[SKEL][PLUGINS] +reservation evenements
authorLudovic CHEVALIER <ludovic@beurresarrasin.net>
Wed, 13 Jan 2021 08:17:50 +0000 (09:17 +0100)
committerLudovic CHEVALIER <ludovic@beurresarrasin.net>
Wed, 13 Jan 2021 08:17:50 +0000 (09:17 +0100)
813 files changed:
.gitmodules
www/plugins/agenda [new submodule]
www/plugins/calendrier_mini [new submodule]
www/plugins/crayons [new submodule]
www/plugins/crayons/action/crayons.php [deleted file]
www/plugins/crayons/action/crayons_html.php [deleted file]
www/plugins/crayons/action/crayons_store.php [deleted file]
www/plugins/crayons/action/crayons_upload.php [deleted file]
www/plugins/crayons/controleurs/article_intro.html [deleted file]
www/plugins/crayons/controleurs/article_intro2.html [deleted file]
www/plugins/crayons/controleurs/article_intro3.php [deleted file]
www/plugins/crayons/controleurs/article_introduction.html [deleted file]
www/plugins/crayons/controleurs/article_introduction.php [deleted file]
www/plugins/crayons/controleurs/article_texte.html [deleted file]
www/plugins/crayons/controleurs/auteur_email.html [deleted file]
www/plugins/crayons/controleurs/auteur_nom.html [deleted file]
www/plugins/crayons/controleurs/auteur_qui.html [deleted file]
www/plugins/crayons/controleurs/breve_hyperlien.html [deleted file]
www/plugins/crayons/controleurs/document_fichier.html [deleted file]
www/plugins/crayons/controleurs/extra.html [deleted file]
www/plugins/crayons/controleurs/extra_fonctions.php [deleted file]
www/plugins/crayons/controleurs/forum_email.html [deleted file]
www/plugins/crayons/controleurs/forum_id_article.html [deleted file]
www/plugins/crayons/controleurs/forum_nom.html [deleted file]
www/plugins/crayons/controleurs/forum_qui.html [deleted file]
www/plugins/crayons/controleurs/hyperlien.html [deleted file]
www/plugins/crayons/controleurs/id_parent.html [deleted file]
www/plugins/crayons/controleurs/logo.html [deleted file]
www/plugins/crayons/controleurs/mots_article_brut.html [deleted file]
www/plugins/crayons/controleurs/portfolio.php [deleted file]
www/plugins/crayons/controleurs/rubrique_introduction.html [deleted file]
www/plugins/crayons/controleurs/rubrique_introduction.php [deleted file]
www/plugins/crayons/controleurs/signature_email.html [deleted file]
www/plugins/crayons/controleurs/signature_nom.html [deleted file]
www/plugins/crayons/controleurs/signature_qui.html [deleted file]
www/plugins/crayons/controleurs/statut.html [deleted file]
www/plugins/crayons/controleurs/syndic_article_hyperlien.html [deleted file]
www/plugins/crayons/controleurs/vignette.html [deleted file]
www/plugins/crayons/crayons.css [deleted file]
www/plugins/crayons/crayons.js.html [deleted file]
www/plugins/crayons/crayons.js_fonctions.php [deleted file]
www/plugins/crayons/crayons_fonctions.php [deleted file]
www/plugins/crayons/fonds/cfg_crayons.html [deleted file]
www/plugins/crayons/formulaires/configurer_crayons.html [deleted file]
www/plugins/crayons/images/annuler-16.png [deleted file]
www/plugins/crayons/images/changed.png [deleted file]
www/plugins/crayons/images/crayon-128.png [deleted file]
www/plugins/crayons/images/crayon-24.png [deleted file]
www/plugins/crayons/images/crayon-32.png [deleted file]
www/plugins/crayons/images/crayon.png [deleted file]
www/plugins/crayons/images/crayon20.png [deleted file]
www/plugins/crayons/images/edit.png [deleted file]
www/plugins/crayons/images/ok-16.png [deleted file]
www/plugins/crayons/images/pencil.png [deleted file]
www/plugins/crayons/images/resizer.png [deleted file]
www/plugins/crayons/images/searching.gif [deleted file]
www/plugins/crayons/inc/compat_crayons.php [deleted file]
www/plugins/crayons/inc/crayons-json.php [deleted file]
www/plugins/crayons/inc/crayons.php [deleted file]
www/plugins/crayons/js/crayons-fade.js [deleted file]
www/plugins/crayons/js/crayons.js [deleted file]
www/plugins/crayons/js/jquery.form.js [deleted file]
www/plugins/crayons/js/jquery.html5uploader.js [deleted file]
www/plugins/crayons/js/jquery.js [deleted file]
www/plugins/crayons/js/resizehandle.js [deleted file]
www/plugins/crayons/js/uploader.js.html [deleted file]
www/plugins/crayons/lang/crayons.xml [deleted file]
www/plugins/crayons/lang/crayons_ar.php [deleted file]
www/plugins/crayons/lang/crayons_ast.php [deleted file]
www/plugins/crayons/lang/crayons_br.php [deleted file]
www/plugins/crayons/lang/crayons_ca.php [deleted file]
www/plugins/crayons/lang/crayons_de.php [deleted file]
www/plugins/crayons/lang/crayons_en.php [deleted file]
www/plugins/crayons/lang/crayons_eo.php [deleted file]
www/plugins/crayons/lang/crayons_es.php [deleted file]
www/plugins/crayons/lang/crayons_eu.php [deleted file]
www/plugins/crayons/lang/crayons_fa.php [deleted file]
www/plugins/crayons/lang/crayons_fr.php [deleted file]
www/plugins/crayons/lang/crayons_fr_tu.php [deleted file]
www/plugins/crayons/lang/crayons_gl.php [deleted file]
www/plugins/crayons/lang/crayons_it.php [deleted file]
www/plugins/crayons/lang/crayons_it_fem.php [deleted file]
www/plugins/crayons/lang/crayons_km.php [deleted file]
www/plugins/crayons/lang/crayons_lb.php [deleted file]
www/plugins/crayons/lang/crayons_nl.php [deleted file]
www/plugins/crayons/lang/crayons_oc_lnc.php [deleted file]
www/plugins/crayons/lang/crayons_oc_ni_mis.php [deleted file]
www/plugins/crayons/lang/crayons_pt_br.php [deleted file]
www/plugins/crayons/lang/crayons_ro.php [deleted file]
www/plugins/crayons/lang/crayons_ru.php [deleted file]
www/plugins/crayons/lang/crayons_sk.php [deleted file]
www/plugins/crayons/lang/crayons_sv.php [deleted file]
www/plugins/crayons/lang/crayons_tr.php [deleted file]
www/plugins/crayons/lang/crayons_tw.php [deleted file]
www/plugins/crayons/lang/crayons_zh.php [deleted file]
www/plugins/crayons/lang/crayons_zh_tw.php [deleted file]
www/plugins/crayons/lang/paquet-crayons.xml [deleted file]
www/plugins/crayons/lang/paquet-crayons_ar.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_de.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_en.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_es.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_fr.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_fr_tu.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_it.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_nl.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_oc_ni_mis.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_pt_br.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_ru.php [deleted file]
www/plugins/crayons/lang/paquet-crayons_sk.php [deleted file]
www/plugins/crayons/lib/JavaScriptPacker/class.JavaScriptPacker.php [deleted file]
www/plugins/crayons/modeles/uploader_item.html [deleted file]
www/plugins/crayons/modeles/uploader_liste.html [deleted file]
www/plugins/crayons/paquet.xml [deleted file]
www/plugins/crayons/plugin.xml [deleted file]
www/plugins/crayons/prive/squelettes/contenu/configurer_crayons.html [deleted file]
www/plugins/crayons/svn.revision [deleted file]
www/plugins/crayons/tetecrayons.php [deleted file]
www/plugins/crayons/vues/article_intro.html [deleted file]
www/plugins/crayons/vues/article_intro2.html [deleted file]
www/plugins/crayons/vues/article_intro3.html [deleted file]
www/plugins/crayons/vues/article_introduction.html [deleted file]
www/plugins/crayons/vues/article_texte.html [deleted file]
www/plugins/crayons/vues/document_fichier.html [deleted file]
www/plugins/crayons/vues/extra.html [deleted file]
www/plugins/crayons/vues/extra_fonctions.php [deleted file]
www/plugins/crayons/vues/hyperlien.html [deleted file]
www/plugins/crayons/vues/id_parent.html [deleted file]
www/plugins/crayons/vues/logo.html [deleted file]
www/plugins/crayons/vues/mots_article_brut.html [deleted file]
www/plugins/crayons/vues/qui.html [deleted file]
www/plugins/crayons/vues/rubrique_id_parent.html [deleted file]
www/plugins/crayons/vues/rubrique_introduction.html [deleted file]
www/plugins/crayons/vues/vignette.html [deleted file]
www/plugins/facteur [new submodule]
www/plugins/facteur/classes/facteur.php [deleted file]
www/plugins/facteur/emails/css.html [deleted file]
www/plugins/facteur/emails/inc-bas.html [deleted file]
www/plugins/facteur/emails/inc-button.html [deleted file]
www/plugins/facteur/emails/inc-haut.html [deleted file]
www/plugins/facteur/emails/test_email_html.html [deleted file]
www/plugins/facteur/emails/test_email_texte.html [deleted file]
www/plugins/facteur/emails/texte.html [deleted file]
www/plugins/facteur/erreurs et exceptions.txt [deleted file]
www/plugins/facteur/facteur_administrations.php [deleted file]
www/plugins/facteur/facteur_fonctions.php [deleted file]
www/plugins/facteur/facteur_ieconfig_metas.php [deleted file]
www/plugins/facteur/facteur_pipelines.php [deleted file]
www/plugins/facteur/formulaires/configurer_facteur.html [deleted file]
www/plugins/facteur/formulaires/configurer_facteur.php [deleted file]
www/plugins/facteur/inc/envoyer_mail.php [deleted file]
www/plugins/facteur/inc/facteur_classes.php [deleted file]
www/plugins/facteur/lang/facteur.xml [deleted file]
www/plugins/facteur/lang/facteur_de.php [deleted file]
www/plugins/facteur/lang/facteur_en.php [deleted file]
www/plugins/facteur/lang/facteur_es.php [deleted file]
www/plugins/facteur/lang/facteur_fa.php [deleted file]
www/plugins/facteur/lang/facteur_fr.php [deleted file]
www/plugins/facteur/lang/facteur_fr_tu.php [deleted file]
www/plugins/facteur/lang/facteur_it.php [deleted file]
www/plugins/facteur/lang/facteur_nl.php [deleted file]
www/plugins/facteur/lang/facteur_oc_ni_mis.php [deleted file]
www/plugins/facteur/lang/facteur_pt_br.php [deleted file]
www/plugins/facteur/lang/facteur_sk.php [deleted file]
www/plugins/facteur/lang/paquet-facteur.xml [deleted file]
www/plugins/facteur/lang/paquet-facteur_de.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_en.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_es.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_fr.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_fr_tu.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_nl.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_pt_br.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_ru.php [deleted file]
www/plugins/facteur/lang/paquet-facteur_sk.php [deleted file]
www/plugins/facteur/lib/markdownify/LICENSE_LGPL.txt [deleted file]
www/plugins/facteur/lib/markdownify/markdownify.php [deleted file]
www/plugins/facteur/lib/markdownify/markdownify_extra.php [deleted file]
www/plugins/facteur/lib/markdownify/parsehtml/parsehtml.php [deleted file]
www/plugins/facteur/paquet.xml [deleted file]
www/plugins/facteur/phpmailer-php5/LICENSE [deleted file]
www/plugins/facteur/phpmailer-php5/PHPMailerAutoload.php [deleted file]
www/plugins/facteur/phpmailer-php5/VERSION [deleted file]
www/plugins/facteur/phpmailer-php5/class.phpmailer.php [deleted file]
www/plugins/facteur/phpmailer-php5/class.phpmaileroauth.php [deleted file]
www/plugins/facteur/phpmailer-php5/class.phpmaileroauthgoogle.php [deleted file]
www/plugins/facteur/phpmailer-php5/class.pop3.php [deleted file]
www/plugins/facteur/phpmailer-php5/class.smtp.php [deleted file]
www/plugins/facteur/phpmailer-php5/composer.json [deleted file]
www/plugins/facteur/phpmailer-php5/composer.lock [deleted file]
www/plugins/facteur/phpmailer-php5/extras/EasyPeasyICS.php [deleted file]
www/plugins/facteur/phpmailer-php5/extras/README.md [deleted file]
www/plugins/facteur/phpmailer-php5/extras/htmlfilter.php [deleted file]
www/plugins/facteur/phpmailer-php5/extras/ntlm_sasl_client.php [deleted file]
www/plugins/facteur/phpmailer-php5/get_oauth_token.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-am.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ar.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-az.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-be.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-bg.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ca.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ch.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-cs.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-da.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-de.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-el.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-eo.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-es.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-et.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fa.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fi.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fo.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fr.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-gl.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-he.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-hr.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-hu.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-id.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-it.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ja.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ka.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ko.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-lt.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-lv.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ms.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-nb.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-nl.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pl.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pt.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pt_br.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ro.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ru.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sk.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sl.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sr.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sv.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-tr.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-uk.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-vi.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-zh.php [deleted file]
www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-zh_cn.php [deleted file]
www/plugins/facteur/prive/squelettes/contenu/configurer_facteur.html [deleted file]
www/plugins/facteur/prive/themes/spip/images/facteur-16.png [deleted file]
www/plugins/facteur/prive/themes/spip/images/facteur-24.png [deleted file]
www/plugins/facteur/prive/themes/spip/images/facteur-32.png [deleted file]
www/plugins/facteur/svn.revision [deleted file]
www/plugins/formidable [new submodule]
www/plugins/formidable/action/dupliquer_formulaire.php [deleted file]
www/plugins/formidable/action/editer_formulaire.php [deleted file]
www/plugins/formidable/action/exporter_formulaire.php [deleted file]
www/plugins/formidable/action/formidable_recuperer_fichier.php [deleted file]
www/plugins/formidable/action/formidable_recuperer_fichier_par_email.php [deleted file]
www/plugins/formidable/action/supprimer_formulaire.php [deleted file]
www/plugins/formidable/action/supprimer_formulaires_reponse.php [deleted file]
www/plugins/formidable/action/vider_formulaire.php [deleted file]
www/plugins/formidable/base/formidable_tables.php [deleted file]
www/plugins/formidable/corbeille/formulaires_pre_suppression.php [deleted file]
www/plugins/formidable/corbeille/formulaires_reponses_pre_suppression.php [deleted file]
www/plugins/formidable/css/formidable_analyse.css.html [deleted file]
www/plugins/formidable/echanger/formulaire/forms.php [deleted file]
www/plugins/formidable/echanger/formulaire/wcs.php [deleted file]
www/plugins/formidable/echanger/formulaire/yaml.php [deleted file]
www/plugins/formidable/exec/puce_statut_formulaires.php [deleted file]
www/plugins/formidable/formidable_administrations.php [deleted file]
www/plugins/formidable/formidable_autorisations.php [deleted file]
www/plugins/formidable/formidable_fonctions.php [deleted file]
www/plugins/formidable/formidable_options.php [deleted file]
www/plugins/formidable/formidable_pipelines.php [deleted file]
www/plugins/formidable/formulaires/configurer_formidable_analyse.html [deleted file]
www/plugins/formidable/formulaires/editer_formulaire.html [deleted file]
www/plugins/formidable/formulaires/editer_formulaire.php [deleted file]
www/plugins/formidable/formulaires/editer_formulaire_champs.html [deleted file]
www/plugins/formidable/formulaires/editer_formulaire_champs.php [deleted file]
www/plugins/formidable/formulaires/editer_formulaire_traitements.html [deleted file]
www/plugins/formidable/formulaires/editer_formulaire_traitements.php [deleted file]
www/plugins/formidable/formulaires/exporter_formulaire_analyse.html [deleted file]
www/plugins/formidable/formulaires/exporter_formulaire_analyse.php [deleted file]
www/plugins/formidable/formulaires/exporter_formulaire_reponses.html [deleted file]
www/plugins/formidable/formulaires/exporter_formulaire_reponses.php [deleted file]
www/plugins/formidable/formulaires/formidable.html [deleted file]
www/plugins/formidable/formulaires/formidable.php [deleted file]
www/plugins/formidable/formulaires/importer_formulaire.html [deleted file]
www/plugins/formidable/formulaires/importer_formulaire.php [deleted file]
www/plugins/formidable/formulaires/inc-formidable-boutons.html [deleted file]
www/plugins/formidable/formulaires/inc-formidable-unicite.html [deleted file]
www/plugins/formidable/genie/formidable_effacer_enregistrements.php [deleted file]
www/plugins/formidable/genie/formidable_effacer_fichiers_email.php [deleted file]
www/plugins/formidable/genie/formidable_hasher_ip.php [deleted file]
www/plugins/formidable/http/collectionjson/formulaires-ressource.html [deleted file]
www/plugins/formidable/http/collectionjson/formulaires.html [deleted file]
www/plugins/formidable/http/collectionjson/formulaires_reponses-ressource.html [deleted file]
www/plugins/formidable/http/collectionjson/formulaires_reponses.html [deleted file]
www/plugins/formidable/http/collectionjson/formulaires_reponses.php [deleted file]
www/plugins/formidable/http/collectionjson/inc-formulaire.html [deleted file]
www/plugins/formidable/http/collectionjson/inc-formulaires_reponse.html [deleted file]
www/plugins/formidable/icones_barre/formulaire.png [deleted file]
www/plugins/formidable/images/formidable-128.png [deleted file]
www/plugins/formidable/images/formidable-24.png [deleted file]
www/plugins/formidable/images/formidable-64.png [deleted file]
www/plugins/formidable/images/formidable.svg [deleted file]
www/plugins/formidable/images/formulaire-24.png [deleted file]
www/plugins/formidable/images/formulaire-action-ajouter.png [deleted file]
www/plugins/formidable/images/formulaire-analyse-24.png [deleted file]
www/plugins/formidable/images/formulaire-config-auteurs-24.png [deleted file]
www/plugins/formidable/images/formulaire-config-champs-24.png [deleted file]
www/plugins/formidable/images/formulaire-config-traitements-24.png [deleted file]
www/plugins/formidable/images/formulaire-dupliquer-24.png [deleted file]
www/plugins/formidable/images/formulaire-editer-24.png [deleted file]
www/plugins/formidable/images/formulaire-exporter-24.png [deleted file]
www/plugins/formidable/images/formulaire-nouveau-48.png [deleted file]
www/plugins/formidable/images/formulaire-reponse-24.png [deleted file]
www/plugins/formidable/images/formulaire-reponse-supprimer-24.png [deleted file]
www/plugins/formidable/images/formulaire-reponses-24.png [deleted file]
www/plugins/formidable/images/formulaire-reponses-exporter-24.png [deleted file]
www/plugins/formidable/images/formulaire-reponses-supprimer-24.png [deleted file]
www/plugins/formidable/images/formulaire-supprimer-24.png [deleted file]
www/plugins/formidable/inc/formidable.php [deleted file]
www/plugins/formidable/inc/formidable_fichiers.php [deleted file]
www/plugins/formidable/inc/rechercher_joints_formulaires_reponse_formulaires_reponses_champ.php [deleted file]
www/plugins/formidable/lang/formidable.xml [deleted file]
www/plugins/formidable/lang/formidable_ar.php [deleted file]
www/plugins/formidable/lang/formidable_de.php [deleted file]
www/plugins/formidable/lang/formidable_en.php [deleted file]
www/plugins/formidable/lang/formidable_es.php [deleted file]
www/plugins/formidable/lang/formidable_fr.php [deleted file]
www/plugins/formidable/lang/formidable_it.php [deleted file]
www/plugins/formidable/lang/formidable_pt_br.php [deleted file]
www/plugins/formidable/lang/formidable_ru.php [deleted file]
www/plugins/formidable/lang/formidable_sk.php [deleted file]
www/plugins/formidable/lang/formulaire.xml [deleted file]
www/plugins/formidable/lang/formulaire_fr.php [deleted file]
www/plugins/formidable/lang/formulaire_pt_br.php [deleted file]
www/plugins/formidable/lang/formulaire_ru.php [deleted file]
www/plugins/formidable/lang/formulaires_reponse.xml [deleted file]
www/plugins/formidable/lang/formulaires_reponse_fr.php [deleted file]
www/plugins/formidable/lang/formulaires_reponse_pt_br.php [deleted file]
www/plugins/formidable/lang/paquet-formidable.xml [deleted file]
www/plugins/formidable/lang/paquet-formidable_en.php [deleted file]
www/plugins/formidable/lang/paquet-formidable_es.php [deleted file]
www/plugins/formidable/lang/paquet-formidable_fr.php [deleted file]
www/plugins/formidable/lang/paquet-formidable_pt_br.php [deleted file]
www/plugins/formidable/modeles/form.html [deleted file]
www/plugins/formidable/modeles/formidable.html [deleted file]
www/plugins/formidable/modeles/formulaire_aide_memoire.html [deleted file]
www/plugins/formidable/modeles/formulaire_analyse.html [deleted file]
www/plugins/formidable/modeles/formulaire_formidable.yaml [deleted file]
www/plugins/formidable/modeles/formulaires_reponse.html [deleted file]
www/plugins/formidable/noisettes/formulaire_formidable.html [deleted file]
www/plugins/formidable/noisettes/formulaire_formidable.yaml [deleted file]
www/plugins/formidable/notifications/formulaire_accuse.html [deleted file]
www/plugins/formidable/notifications/formulaire_email.html [deleted file]
www/plugins/formidable/paquet.xml [deleted file]
www/plugins/formidable/prive/listes/corbeille_formulaires.html [deleted file]
www/plugins/formidable/prive/listes/corbeille_formulaires_reponses.html [deleted file]
www/plugins/formidable/prive/objets/contenu/formulaire.html [deleted file]
www/plugins/formidable/prive/objets/contenu/formulaires_reponse.html [deleted file]
www/plugins/formidable/prive/objets/infos/formulaire.html [deleted file]
www/plugins/formidable/prive/objets/infos/formulaires_reponse.html [deleted file]
www/plugins/formidable/prive/objets/liste/formulaires.html [deleted file]
www/plugins/formidable/prive/objets/liste/formulaires_associer.html [deleted file]
www/plugins/formidable/prive/objets/liste/formulaires_associer_fonctions.php [deleted file]
www/plugins/formidable/prive/objets/liste/formulaires_lies.html [deleted file]
www/plugins/formidable/prive/objets/liste/formulaires_lies_fonctions.php [deleted file]
www/plugins/formidable/prive/objets/liste/formulaires_reponses.html [deleted file]
www/plugins/formidable/prive/squelettes/contenu/configurer_formidable.html [deleted file]
www/plugins/formidable/prive/squelettes/contenu/formulaire.html [deleted file]
www/plugins/formidable/prive/squelettes/contenu/formulaire_edit.html [deleted file]
www/plugins/formidable/prive/squelettes/contenu/formulaires.html [deleted file]
www/plugins/formidable/prive/squelettes/contenu/formulaires_analyse.html [deleted file]
www/plugins/formidable/prive/squelettes/contenu/formulaires_reponse.html [deleted file]
www/plugins/formidable/prive/squelettes/contenu/formulaires_reponses.html [deleted file]
www/plugins/formidable/prive/squelettes/extra/formulaire.html [deleted file]
www/plugins/formidable/prive/squelettes/extra/formulaire_edit.html [deleted file]
www/plugins/formidable/prive/squelettes/extra/formulaires_analyse.html [deleted file]
www/plugins/formidable/prive/squelettes/extra/formulaires_reponses.html [deleted file]
www/plugins/formidable/prive/squelettes/hierarchie/formulaire.html [deleted file]
www/plugins/formidable/prive/squelettes/hierarchie/formulaire_edit.html [deleted file]
www/plugins/formidable/prive/squelettes/hierarchie/formulaires.html [deleted file]
www/plugins/formidable/prive/squelettes/hierarchie/formulaires_analyse.html [deleted file]
www/plugins/formidable/prive/squelettes/hierarchie/formulaires_reponse.html [deleted file]
www/plugins/formidable/prive/squelettes/hierarchie/formulaires_reponses.html [deleted file]
www/plugins/formidable/prive/squelettes/inclure/formulaires_lies.html [deleted file]
www/plugins/formidable/prive/squelettes/inclure/formulaires_reponses-filtres.html [deleted file]
www/plugins/formidable/prive/squelettes/navigation/formulaire.html [deleted file]
www/plugins/formidable/prive/squelettes/navigation/formulaire_edit.html [deleted file]
www/plugins/formidable/prive/squelettes/navigation/formulaires.html [deleted file]
www/plugins/formidable/prive/squelettes/navigation/formulaires_analyse.html [deleted file]
www/plugins/formidable/prive/squelettes/navigation/formulaires_reponse.html [deleted file]
www/plugins/formidable/prive/squelettes/navigation/formulaires_reponses.html [deleted file]
www/plugins/formidable/prive/style_prive_plugin_formidable.html [deleted file]
www/plugins/formidable/prive/themes/basic/images/formulaire-16.png [deleted file]
www/plugins/formidable/prive/themes/spip/images/formulaire-16.png [deleted file]
www/plugins/formidable/prive/themes/spip/images/formulaire-24.png [deleted file]
www/plugins/formidable/prive/themes/spip/images/formulaires_reponse-24.png [deleted file]
www/plugins/formidable/public/formidable_criteres.php [deleted file]
www/plugins/formidable/puce_statut/formulaires_reponse.php [deleted file]
www/plugins/formidable/saisies-analyses/_base.html [deleted file]
www/plugins/formidable/saisies-analyses/auteurs.html [deleted file]
www/plugins/formidable/saisies-analyses/case.html [deleted file]
www/plugins/formidable/saisies-analyses/checkbox.html [deleted file]
www/plugins/formidable/saisies-analyses/destinataires.html [deleted file]
www/plugins/formidable/saisies-analyses/explication.html [deleted file]
www/plugins/formidable/saisies-analyses/fichiers.html [deleted file]
www/plugins/formidable/saisies-analyses/fieldset.html [deleted file]
www/plugins/formidable/saisies-analyses/oui_non.html [deleted file]
www/plugins/formidable/saisies-analyses/radio.html [deleted file]
www/plugins/formidable/saisies-analyses/selecteur_article.html [deleted file]
www/plugins/formidable/saisies-analyses/selecteur_rubrique.html [deleted file]
www/plugins/formidable/saisies-analyses/selecteur_rubrique_article.html [deleted file]
www/plugins/formidable/saisies-analyses/selection.html [deleted file]
www/plugins/formidable/saisies-analyses/selection_multiple.html [deleted file]
www/plugins/formidable/saisies-vues/formulaire_formidable.html [deleted file]
www/plugins/formidable/saisies-vues/formulaire_formidable_multiple.html [deleted file]
www/plugins/formidable/saisies/champ.html [deleted file]
www/plugins/formidable/saisies/formulaire_formidable.html [deleted file]
www/plugins/formidable/saisies/formulaire_formidable_multiple.html [deleted file]
www/plugins/formidable/svn.revision [deleted file]
www/plugins/formidable/todo.txt [deleted file]
www/plugins/formidable/traiter/email.php [deleted file]
www/plugins/formidable/traiter/email.yaml [deleted file]
www/plugins/formidable/traiter/enregistrement.php [deleted file]
www/plugins/formidable/traiter/enregistrement.yaml [deleted file]
www/plugins/nospam [new submodule]
www/plugins/nospam/images/nospam-32.png [deleted file]
www/plugins/nospam/images/nospam.gif [deleted file]
www/plugins/nospam/images/nospam.png [deleted file]
www/plugins/nospam/inc/detecter_langue.php [deleted file]
www/plugins/nospam/inc/nospam.php [deleted file]
www/plugins/nospam/inclure/nobot.html [deleted file]
www/plugins/nospam/lang/nospam.xml [deleted file]
www/plugins/nospam/lang/nospam_ar.php [deleted file]
www/plugins/nospam/lang/nospam_de.php [deleted file]
www/plugins/nospam/lang/nospam_en.php [deleted file]
www/plugins/nospam/lang/nospam_es.php [deleted file]
www/plugins/nospam/lang/nospam_fa.php [deleted file]
www/plugins/nospam/lang/nospam_fr.php [deleted file]
www/plugins/nospam/lang/nospam_fr_tu.php [deleted file]
www/plugins/nospam/lang/nospam_nl.php [deleted file]
www/plugins/nospam/lang/nospam_pt_br.php [deleted file]
www/plugins/nospam/lang/nospam_sk.php [deleted file]
www/plugins/nospam/lang/paquet-nospam.xml [deleted file]
www/plugins/nospam/lang/paquet-nospam_ar.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_de.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_en.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_es.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_fr.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_fr_tu.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_nl.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_pt_br.php [deleted file]
www/plugins/nospam/lang/paquet-nospam_sk.php [deleted file]
www/plugins/nospam/nospam/verifier_formulaire_ecrire_auteur.php [deleted file]
www/plugins/nospam/nospam/verifier_formulaire_forum.php [deleted file]
www/plugins/nospam/nospam/verifier_formulaire_signature.php [deleted file]
www/plugins/nospam/nospam_pipelines.php [deleted file]
www/plugins/nospam/paquet.xml [deleted file]
www/plugins/nospam/plugin.xml [deleted file]
www/plugins/nospam/svn.revision [deleted file]
www/plugins/reservation_evenement [new submodule]
www/plugins/saisies [new submodule]
www/plugins/saisies/action/deplacer_saisie.php [deleted file]
www/plugins/saisies/aide/saisies.html [deleted file]
www/plugins/saisies/balise/configurer_saisie.php [deleted file]
www/plugins/saisies/balise/generer_saisies.php [deleted file]
www/plugins/saisies/balise/saisie.php [deleted file]
www/plugins/saisies/balise/voir_saisie.php [deleted file]
www/plugins/saisies/balise/voir_saisies.php [deleted file]
www/plugins/saisies/css/formulaires_constructeur.css [deleted file]
www/plugins/saisies/demo/configurer_saisie.html [deleted file]
www/plugins/saisies/demo/generer_saisies.html [deleted file]
www/plugins/saisies/demo/page-saisies_cvt.html [deleted file]
www/plugins/saisies/demo/saisie.html [deleted file]
www/plugins/saisies/demo/voir_saisie.html [deleted file]
www/plugins/saisies/demo/voir_saisies.html [deleted file]
www/plugins/saisies/formulaires/construire_formulaire.html [deleted file]
www/plugins/saisies/formulaires/construire_formulaire.php [deleted file]
www/plugins/saisies/formulaires/inc-construire_formulaire-actions.html [deleted file]
www/plugins/saisies/formulaires/inc-generer_saisies_configurables.html [deleted file]
www/plugins/saisies/formulaires/inc-saisies-cvt.html [deleted file]
www/plugins/saisies/formulaires/saisies_cvt.html [deleted file]
www/plugins/saisies/formulaires/saisies_cvt.php [deleted file]
www/plugins/saisies/images/formulaire-annuler-16.png [deleted file]
www/plugins/saisies/images/formulaire-configurer-16.png [deleted file]
www/plugins/saisies/images/formulaire-deplacer-16.png [deleted file]
www/plugins/saisies/images/formulaire-dupliquer-16.png [deleted file]
www/plugins/saisies/images/formulaire-enregistrer-16.png [deleted file]
www/plugins/saisies/images/formulaire-reinitialiser-24.png [deleted file]
www/plugins/saisies/images/formulaire-saisie-defaut.png [deleted file]
www/plugins/saisies/images/formulaire-supprimer-16.png [deleted file]
www/plugins/saisies/images/logo_saisie_48.png [deleted file]
www/plugins/saisies/images/saisies-16.png [deleted file]
www/plugins/saisies/images/saisies-24.png [deleted file]
www/plugins/saisies/images/saisies-32.png [deleted file]
www/plugins/saisies/images/saisies_auteurs.png [deleted file]
www/plugins/saisies/images/saisies_case.png [deleted file]
www/plugins/saisies/images/saisies_checkbox.png [deleted file]
www/plugins/saisies/images/saisies_date.png [deleted file]
www/plugins/saisies/images/saisies_email.png [deleted file]
www/plugins/saisies/images/saisies_explication.png [deleted file]
www/plugins/saisies/images/saisies_fieldset.png [deleted file]
www/plugins/saisies/images/saisies_hidden.png [deleted file]
www/plugins/saisies/images/saisies_input.png [deleted file]
www/plugins/saisies/images/saisies_oui_non.png [deleted file]
www/plugins/saisies/images/saisies_radio.png [deleted file]
www/plugins/saisies/images/saisies_selecteur_article.png [deleted file]
www/plugins/saisies/images/saisies_selecteur_rubrique.png [deleted file]
www/plugins/saisies/images/saisies_selecteur_rubrique_article.png [deleted file]
www/plugins/saisies/images/saisies_selection.png [deleted file]
www/plugins/saisies/images/saisies_selection_multiple.png [deleted file]
www/plugins/saisies/images/saisies_textarea.png [deleted file]
www/plugins/saisies/inc/saisies.php [deleted file]
www/plugins/saisies/inc/saisies_afficher.php [deleted file]
www/plugins/saisies/inc/saisies_lister.php [deleted file]
www/plugins/saisies/inc/saisies_manipuler.php [deleted file]
www/plugins/saisies/inclure/configurer_saisie.html [deleted file]
www/plugins/saisies/inclure/configurer_saisie_fonctions.php [deleted file]
www/plugins/saisies/inclure/fieldset_legend.html [deleted file]
www/plugins/saisies/inclure/generer_saisies.html [deleted file]
www/plugins/saisies/inclure/js_afficher_si.html [deleted file]
www/plugins/saisies/inclure/saisies_aide.html [deleted file]
www/plugins/saisies/inclure/voir_saisies.html [deleted file]
www/plugins/saisies/javascript/saisies.js [deleted file]
www/plugins/saisies/lang/paquet-saisies.xml [deleted file]
www/plugins/saisies/lang/paquet-saisies_ar.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_de.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_en.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_es.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_fr.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_fr_tu.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_nl.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_pt_br.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_ru.php [deleted file]
www/plugins/saisies/lang/paquet-saisies_sk.php [deleted file]
www/plugins/saisies/lang/saisies.xml [deleted file]
www/plugins/saisies/lang/saisies_ca.php [deleted file]
www/plugins/saisies/lang/saisies_de.php [deleted file]
www/plugins/saisies/lang/saisies_en.php [deleted file]
www/plugins/saisies/lang/saisies_es.php [deleted file]
www/plugins/saisies/lang/saisies_fa.php [deleted file]
www/plugins/saisies/lang/saisies_fr.php [deleted file]
www/plugins/saisies/lang/saisies_fr_tu.php [deleted file]
www/plugins/saisies/lang/saisies_it.php [deleted file]
www/plugins/saisies/lang/saisies_nl.php [deleted file]
www/plugins/saisies/lang/saisies_pt_br.php [deleted file]
www/plugins/saisies/lang/saisies_ru.php [deleted file]
www/plugins/saisies/lang/saisies_sk.php [deleted file]
www/plugins/saisies/paquet.xml [deleted file]
www/plugins/saisies/prive/exec/construire_formulaire.html [deleted file]
www/plugins/saisies/prive/listes/articles_originaux_recursifs.html [deleted file]
www/plugins/saisies/prive/listes/rubriques_recursives.html [deleted file]
www/plugins/saisies/prive/squelettes/contenu/saisies_doc.html [deleted file]
www/plugins/saisies/prive/squelettes/navigation/saisies_doc.html [deleted file]
www/plugins/saisies/prive/style_prive_plugin_saisies.html [deleted file]
www/plugins/saisies/saisies-vues/_base.html [deleted file]
www/plugins/saisies/saisies-vues/auteurs.html [deleted file]
www/plugins/saisies/saisies-vues/case.html [deleted file]
www/plugins/saisies/saisies-vues/checkbox.html [deleted file]
www/plugins/saisies/saisies-vues/couleur.html [deleted file]
www/plugins/saisies/saisies-vues/date.html [deleted file]
www/plugins/saisies/saisies-vues/destinataires.html [deleted file]
www/plugins/saisies/saisies-vues/explication.html [deleted file]
www/plugins/saisies/saisies-vues/fieldset.html [deleted file]
www/plugins/saisies/saisies-vues/groupe_mots.html [deleted file]
www/plugins/saisies/saisies-vues/mot.html [deleted file]
www/plugins/saisies/saisies-vues/oui_non.html [deleted file]
www/plugins/saisies/saisies-vues/radio.html [deleted file]
www/plugins/saisies/saisies-vues/secteur.html [deleted file]
www/plugins/saisies/saisies-vues/selecteur.html [deleted file]
www/plugins/saisies/saisies-vues/selecteur_article.html [deleted file]
www/plugins/saisies/saisies-vues/selecteur_article_fonctions.php [deleted file]
www/plugins/saisies/saisies-vues/selecteur_document.html [deleted file]
www/plugins/saisies/saisies-vues/selecteur_rubrique.html [deleted file]
www/plugins/saisies/saisies-vues/selecteur_rubrique_article.html [deleted file]
www/plugins/saisies/saisies-vues/selecteur_site.html [deleted file]
www/plugins/saisies/saisies-vues/selection.html [deleted file]
www/plugins/saisies/saisies-vues/selection_multiple.html [deleted file]
www/plugins/saisies/saisies.css.html [deleted file]
www/plugins/saisies/saisies/_base.html [deleted file]
www/plugins/saisies/saisies/articles_originaux.html [deleted file]
www/plugins/saisies/saisies/auteurs.html [deleted file]
www/plugins/saisies/saisies/auteurs.yaml [deleted file]
www/plugins/saisies/saisies/case.html [deleted file]
www/plugins/saisies/saisies/case.yaml [deleted file]
www/plugins/saisies/saisies/checkbox.html [deleted file]
www/plugins/saisies/saisies/checkbox.yaml [deleted file]
www/plugins/saisies/saisies/choisir_objet.html [deleted file]
www/plugins/saisies/saisies/choisir_objets.html [deleted file]
www/plugins/saisies/saisies/choisir_objets_edit.html [deleted file]
www/plugins/saisies/saisies/couleur.html [deleted file]
www/plugins/saisies/saisies/date.html [deleted file]
www/plugins/saisies/saisies/date.yaml [deleted file]
www/plugins/saisies/saisies/date_jour_mois_annee.html [deleted file]
www/plugins/saisies/saisies/destinataires.html [deleted file]
www/plugins/saisies/saisies/destinataires.yaml [deleted file]
www/plugins/saisies/saisies/email.html [deleted file]
www/plugins/saisies/saisies/email.yaml [deleted file]
www/plugins/saisies/saisies/explication.html [deleted file]
www/plugins/saisies/saisies/explication.yaml [deleted file]
www/plugins/saisies/saisies/fieldset.html [deleted file]
www/plugins/saisies/saisies/fieldset.yaml [deleted file]
www/plugins/saisies/saisies/groupe_mots.html [deleted file]
www/plugins/saisies/saisies/hidden.html [deleted file]
www/plugins/saisies/saisies/hidden.yaml [deleted file]
www/plugins/saisies/saisies/input.html [deleted file]
www/plugins/saisies/saisies/input.yaml [deleted file]
www/plugins/saisies/saisies/mot.html [deleted file]
www/plugins/saisies/saisies/mot.yaml [deleted file]
www/plugins/saisies/saisies/oui_non.html [deleted file]
www/plugins/saisies/saisies/oui_non.yaml [deleted file]
www/plugins/saisies/saisies/pays.html [deleted file]
www/plugins/saisies/saisies/police.html [deleted file]
www/plugins/saisies/saisies/position_construire_formulaire.html [deleted file]
www/plugins/saisies/saisies/radio.html [deleted file]
www/plugins/saisies/saisies/radio.yaml [deleted file]
www/plugins/saisies/saisies/recherche.html [deleted file]
www/plugins/saisies/saisies/secteur.html [deleted file]
www/plugins/saisies/saisies/selecteur.html [deleted file]
www/plugins/saisies/saisies/selecteur_article.html [deleted file]
www/plugins/saisies/saisies/selecteur_article.yaml [deleted file]
www/plugins/saisies/saisies/selecteur_document.html [deleted file]
www/plugins/saisies/saisies/selecteur_document.yaml [deleted file]
www/plugins/saisies/saisies/selecteur_langue.html [deleted file]
www/plugins/saisies/saisies/selecteur_rubrique.html [deleted file]
www/plugins/saisies/saisies/selecteur_rubrique.yaml [deleted file]
www/plugins/saisies/saisies/selecteur_rubrique_article.html [deleted file]
www/plugins/saisies/saisies/selecteur_rubrique_article.yaml [deleted file]
www/plugins/saisies/saisies/selecteur_site.html [deleted file]
www/plugins/saisies/saisies/selection.html [deleted file]
www/plugins/saisies/saisies/selection.yaml [deleted file]
www/plugins/saisies/saisies/selection_multiple.html [deleted file]
www/plugins/saisies/saisies/selection_multiple.yaml [deleted file]
www/plugins/saisies/saisies/selection_par_groupe.html [deleted file]
www/plugins/saisies/saisies/statuts_auteurs.html [deleted file]
www/plugins/saisies/saisies/telephone.html [deleted file]
www/plugins/saisies/saisies/textarea.html [deleted file]
www/plugins/saisies/saisies/textarea.yaml [deleted file]
www/plugins/saisies/saisies/true_false.html [deleted file]
www/plugins/saisies/saisies/url.html [deleted file]
www/plugins/saisies/saisies_fonctions.php [deleted file]
www/plugins/saisies/saisies_options.php [deleted file]
www/plugins/saisies/saisies_pipelines.php [deleted file]
www/plugins/saisies/svn.revision [deleted file]
www/plugins/skel_lhc/contenu/evenement.html [new file with mode: 0755]
www/plugins/skel_lhc/evenement.html [new file with mode: 0644]
www/plugins/skel_lhc/formulaires/inc-reservation_connection.html [new file with mode: 0644]
www/plugins/skel_lhc/formulaires/inc-reservation_evenements.html [new file with mode: 0644]
www/plugins/skel_lhc/formulaires/reservation.html [new file with mode: 0755]
www/plugins/skel_lhc/habillage/skel_lhc.css
www/plugins/skel_lhc/page-sommaire.html
www/plugins/skel_lhc/paquet.xml
www/plugins/spip-bonux [new submodule]
www/plugins/spip-bonux-3/demo/boucle_et_saut.html [deleted file]
www/plugins/spip-bonux-3/demo/boucles_iterations.html [deleted file]
www/plugins/spip-bonux-3/demo/noeud.html [deleted file]
www/plugins/spip-bonux-3/img_pack/annuler-recherche.png [deleted file]
www/plugins/spip-bonux-3/img_pack/article-12.png [deleted file]
www/plugins/spip-bonux-3/img_pack/deplier-droite.gif [deleted file]
www/plugins/spip-bonux-3/img_pack/deplier-droite.png [deleted file]
www/plugins/spip-bonux-3/img_pack/frame-close.png [deleted file]
www/plugins/spip-bonux-3/img_pack/item-add.gif [deleted file]
www/plugins/spip-bonux-3/img_pack/item-add.png [deleted file]
www/plugins/spip-bonux-3/img_pack/item-remove.png [deleted file]
www/plugins/spip-bonux-3/img_pack/logo-bonux.gif [deleted file]
www/plugins/spip-bonux-3/img_pack/message_erreur-24.png [deleted file]
www/plugins/spip-bonux-3/img_pack/message_notice-24.png [deleted file]
www/plugins/spip-bonux-3/img_pack/message_ok-24.png [deleted file]
www/plugins/spip-bonux-3/img_pack/spip-bonux.png [deleted file]
www/plugins/spip-bonux-3/img_pack/tri_asc-12.png [deleted file]
www/plugins/spip-bonux-3/img_pack/tri_asc-16.png [deleted file]
www/plugins/spip-bonux-3/img_pack/tri_asc-24.png [deleted file]
www/plugins/spip-bonux-3/img_pack/tri_asc.png [deleted file]
www/plugins/spip-bonux-3/img_pack/tri_desc-12.png [deleted file]
www/plugins/spip-bonux-3/img_pack/tri_desc-16.png [deleted file]
www/plugins/spip-bonux-3/img_pack/tri_desc-24.png [deleted file]
www/plugins/spip-bonux-3/inc/date_gestion.php [deleted file]
www/plugins/spip-bonux-3/inc/exporter_csv.php [deleted file]
www/plugins/spip-bonux-3/inc/importer_csv.php [deleted file]
www/plugins/spip-bonux-3/javascript/jquery.qtip-1.0.0-rc3.js [deleted file]
www/plugins/spip-bonux-3/javascript/jquery.qtip.activate.js [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux.xml [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_ar.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_de.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_en.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_es.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_fa.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_fr.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_nl.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_pt_br.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_ru.php [deleted file]
www/plugins/spip-bonux-3/lang/paquet-spip_bonux_sk.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux.xml [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_ar.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_de.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_en.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_es.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_fa.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_fr.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_nl.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_pt_br.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_ru.php [deleted file]
www/plugins/spip-bonux-3/lang/spip_bonux_sk.php [deleted file]
www/plugins/spip-bonux-3/lib/array_column/_array_column.php [deleted file]
www/plugins/spip-bonux-3/modeles/pagination_noancre.html [deleted file]
www/plugins/spip-bonux-3/paquet.xml [deleted file]
www/plugins/spip-bonux-3/public/spip_bonux_balises.php [deleted file]
www/plugins/spip-bonux-3/public/spip_bonux_criteres.php [deleted file]
www/plugins/spip-bonux-3/spip_bonux_fonctions.php [deleted file]
www/plugins/spip-bonux-3/spip_bonux_options.php [deleted file]
www/plugins/spip-bonux-3/svn.revision [deleted file]
www/plugins/spip-bonux-3/tests/balises/set_merge.html [deleted file]
www/plugins/spip-bonux-3/tests/balises/set_push.html [deleted file]
www/plugins/verifier [new submodule]
www/plugins/verifier/aide/verifier.html [deleted file]
www/plugins/verifier/aide/verifier_fonctions.php [deleted file]
www/plugins/verifier/images/icones-infos.txt [deleted file]
www/plugins/verifier/images/verifier-128.png [deleted file]
www/plugins/verifier/images/verifier-16.png [deleted file]
www/plugins/verifier/images/verifier-24.png [deleted file]
www/plugins/verifier/images/verifier-32.png [deleted file]
www/plugins/verifier/inc/is_email.php [deleted file]
www/plugins/verifier/inc/verifier.php [deleted file]
www/plugins/verifier/lang/paquet-verifier.xml [deleted file]
www/plugins/verifier/lang/paquet-verifier_de.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_en.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_es.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_fr.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_fr_tu.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_nl.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_pt_br.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_ru.php [deleted file]
www/plugins/verifier/lang/paquet-verifier_sk.php [deleted file]
www/plugins/verifier/lang/verifier.xml [deleted file]
www/plugins/verifier/lang/verifier_ca.php [deleted file]
www/plugins/verifier/lang/verifier_de.php [deleted file]
www/plugins/verifier/lang/verifier_en.php [deleted file]
www/plugins/verifier/lang/verifier_es.php [deleted file]
www/plugins/verifier/lang/verifier_fa.php [deleted file]
www/plugins/verifier/lang/verifier_fr.php [deleted file]
www/plugins/verifier/lang/verifier_fr_tu.php [deleted file]
www/plugins/verifier/lang/verifier_it.php [deleted file]
www/plugins/verifier/lang/verifier_nl.php [deleted file]
www/plugins/verifier/lang/verifier_pt_br.php [deleted file]
www/plugins/verifier/lang/verifier_ru.php [deleted file]
www/plugins/verifier/lang/verifier_sk.php [deleted file]
www/plugins/verifier/paquet.xml [deleted file]
www/plugins/verifier/plugin.xml [deleted file]
www/plugins/verifier/prive/squelettes/contenu/verifier_doc.html [deleted file]
www/plugins/verifier/prive/squelettes/navigation/verifier_doc.html [deleted file]
www/plugins/verifier/prive/style_prive_plugin_verifier.html [deleted file]
www/plugins/verifier/svn.revision [deleted file]
www/plugins/verifier/test/verifier.html [deleted file]
www/plugins/verifier/verifier/code_postal.php [deleted file]
www/plugins/verifier/verifier/code_postal.yaml [deleted file]
www/plugins/verifier/verifier/comparaison_champ.php [deleted file]
www/plugins/verifier/verifier/comparaison_champ.yaml [deleted file]
www/plugins/verifier/verifier/couleur.php [deleted file]
www/plugins/verifier/verifier/couleur.yaml [deleted file]
www/plugins/verifier/verifier/date.php [deleted file]
www/plugins/verifier/verifier/date.yaml [deleted file]
www/plugins/verifier/verifier/decimal.php [deleted file]
www/plugins/verifier/verifier/decimal.yaml [deleted file]
www/plugins/verifier/verifier/email.php [deleted file]
www/plugins/verifier/verifier/email.yaml [deleted file]
www/plugins/verifier/verifier/entier.php [deleted file]
www/plugins/verifier/verifier/entier.yaml [deleted file]
www/plugins/verifier/verifier/fichiers.php [deleted file]
www/plugins/verifier/verifier/fichiers.yaml [deleted file]
www/plugins/verifier/verifier/id_document.php [deleted file]
www/plugins/verifier/verifier/id_document.yaml [deleted file]
www/plugins/verifier/verifier/id_objet.php [deleted file]
www/plugins/verifier/verifier/id_objet.yaml [deleted file]
www/plugins/verifier/verifier/image_upload.php [deleted file]
www/plugins/verifier/verifier/image_upload_multiple.php [deleted file]
www/plugins/verifier/verifier/isbn.php [deleted file]
www/plugins/verifier/verifier/isbn.yaml [deleted file]
www/plugins/verifier/verifier/password.php [deleted file]
www/plugins/verifier/verifier/regex.php [deleted file]
www/plugins/verifier/verifier/regex.yaml [deleted file]
www/plugins/verifier/verifier/siren_siret.php [deleted file]
www/plugins/verifier/verifier/siren_siret.yaml [deleted file]
www/plugins/verifier/verifier/taille.php [deleted file]
www/plugins/verifier/verifier/taille.yaml [deleted file]
www/plugins/verifier/verifier/telephone.php [deleted file]
www/plugins/verifier/verifier/telephone.yaml [deleted file]
www/plugins/verifier/verifier/url.php [deleted file]
www/plugins/verifier/verifier/url.yaml [deleted file]
www/plugins/verifier/verifier_fonctions.php [deleted file]
www/plugins/yaml [new submodule]
www/plugins/yaml/demo/iter_data_yaml.html [deleted file]
www/plugins/yaml/experimental/README [deleted file]
www/plugins/yaml/experimental/yaml.html [deleted file]
www/plugins/yaml/experimental/yaml_fonctions.php [deleted file]
www/plugins/yaml/inc/yaml.php [deleted file]
www/plugins/yaml/inc/yaml_sfyaml.php [deleted file]
www/plugins/yaml/inc/yaml_to_array.php [deleted file]
www/plugins/yaml/lang/paquet-yaml.xml [deleted file]
www/plugins/yaml/lang/paquet-yaml_de.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_en.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_es.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_fa.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_fr.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_nl.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_pt_br.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_ru.php [deleted file]
www/plugins/yaml/lang/paquet-yaml_sk.php [deleted file]
www/plugins/yaml/paquet.xml [deleted file]
www/plugins/yaml/plugin.xml [deleted file]
www/plugins/yaml/sfyaml/sfYaml.php [deleted file]
www/plugins/yaml/sfyaml/sfYamlDumper.php [deleted file]
www/plugins/yaml/sfyaml/sfYamlInline.php [deleted file]
www/plugins/yaml/sfyaml/sfYamlParser.php [deleted file]
www/plugins/yaml/spyc/spyc-php4.php [deleted file]
www/plugins/yaml/spyc/spyc.php [deleted file]
www/plugins/yaml/svn.revision [deleted file]
www/plugins/yaml/yaml.png [deleted file]
www/plugins/yaml/yaml_fonctions.php [deleted file]

index 0692065..4077323 100644 (file)
@@ -7,3 +7,36 @@
 [submodule "www/plugins/metasplus"]
        path = www/plugins/metasplus
        url = https://git.spip.net/spip-contrib-extensions/metasplus.git
+[submodule "www/plugins/agenda"]
+       path = www/plugins/agenda
+       url = https://git.spip.net/spip-contrib-extensions/agenda.git
+[submodule "www/plugins/calendrier_mini"]
+       path = www/plugins/calendrier_mini
+       url = https://git.spip.net/spip-contrib-extensions/calendrier_mini.git
+[submodule "www/plugins/facteur"]
+       path = www/plugins/facteur
+       url = https://git.spip.net/spip-contrib-extensions/facteur.git
+[submodule "www/plugins/formidable"]
+       path = www/plugins/formidable
+       url = https://git.spip.net/spip-contrib-extensions/formidable.git
+[submodule "www/plugins/nospam"]
+       path = www/plugins/nospam
+       url = https://git.spip.net/spip-contrib-extensions/nospam.git
+[submodule "www/plugins/saisies"]
+       path = www/plugins/saisies
+       url = https://git.spip.net/spip-contrib-extensions/saisies.git
+[submodule "www/plugins/spip-bonux"]
+       path = www/plugins/spip-bonux
+       url = https://git.spip.net/spip-contrib-extensions/spip-bonux.git
+[submodule "www/plugins/verifier"]
+       path = www/plugins/verifier
+       url = https://git.spip.net/spip-contrib-extensions/verifier.git
+[submodule "www/plugins/reservation_evenement"]
+       path = www/plugins/reservation_evenement
+       url = https://git.spip.net/spip-contrib-extensions/reservation_evenement.git
+[submodule "www/plugins/yaml"]
+       path = www/plugins/yaml
+       url = https://git.spip.net/spip-contrib-extensions/yaml.git
+[submodule "www/plugins/crayons"]
+       path = www/plugins/crayons
+       url = https://git.spip.net/spip-contrib-extensions/crayons.git
diff --git a/www/plugins/agenda b/www/plugins/agenda
new file mode 160000 (submodule)
index 0000000..4d70d29
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 4d70d2909751bece80d3e16fb9cc2f3423fb1324
diff --git a/www/plugins/calendrier_mini b/www/plugins/calendrier_mini
new file mode 160000 (submodule)
index 0000000..fa594e7
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit fa594e7af8ee320310bb2aad912c58541910b7c8
diff --git a/www/plugins/crayons b/www/plugins/crayons
new file mode 160000 (submodule)
index 0000000..fb728cf
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit fb728cf7431b81cc094debdfbd21a8b336d41c7e
diff --git a/www/plugins/crayons/action/crayons.php b/www/plugins/crayons/action/crayons.php
deleted file mode 100644 (file)
index 8bdc365..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// On a ete appele par un formulaire normal (ajax est traite par crayons_store)
-function action_crayons_dist() {
-       include_spip('action/crayons_store');
-       $r = crayons_store();
-
-       // soit exit, soit un redirect gere par SPIP
-       if (trim($r['$erreur'])) {
-               include_spip('inc/minipres');
-               echo minipres($r['$erreur']);
-               exit;
-       }
-
-       // S'il n'y a pas de redirect, on est mal : eviter toutefois la page blanche
-       if (!_request('redirect')) {
-               die('OK');
-       }
-
-       // Invalider le cache parce que bon... a priori on est dans une
-       // interface qui va avoir besoin de refresh
-       include_spip('inc/invalideur');
-       suivre_invalideur('1');
-}
diff --git a/www/plugins/crayons/action/crayons_html.php b/www/plugins/crayons/action/crayons_html.php
deleted file mode 100644 (file)
index 1af505b..0000000
+++ /dev/null
@@ -1,457 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Affiche le controleur (formulaire) d'un crayon
- * suivant la classe CSS décrivant le champ à éditer (produit par #EDIT)
- *
- * @param string $class
- *   Class CSS décrivant le champ
- * @param null $c
- *
- * @return array
- *   Tableau avec 2 entrées possibles :
- *   - '$erreur' : texte d'erreur éventuel
- *   - '$html' : code HTML du controleur
-**/
-function affiche_controleur($class, $c = null) {
-       $return = array('$erreur'=>'');
-
-       if (preg_match(_PREG_CRAYON, $class, $regs)) {
-               list(,$nomcrayon,$type,$champ,$id) = $regs;
-               $regs[] = $class;
-
-               // A-t-on le droit de crayonner ?
-               spip_log("autoriser('crayonner', $type, $id, NULL, array('modele'=>$champ)", 'crayons_distant');
-               if (!autoriser('crayonner', $type, $id, null, array('modele'=>$champ))) {
-                       $return['$erreur'] = "$type $id: " . _U('crayons:non_autorise');
-               } else {
-                       $f = charger_fonction($type.'_'.$champ, 'controleurs', true)
-                       or $f = charger_fonction($champ, 'controleurs', true)
-                       or $f = charger_fonction($type, 'controleurs', true)
-                       or $f = 'controleur_dist';
-                       list($html,$status) = $f($regs, $c);
-                       if ($status) {
-                               $return['$erreur'] = $html;
-                       } else {
-                               $return['$html'] = $html;
-                       }
-               }
-       } else {
-               $return['$erreur'] = _U('crayons:donnees_mal_formatees');
-       }
-
-       return $return;
-}
-
-function controleur_dist($regs, $c = null) {
-       list( , $nomcrayon, $type, $champ, $id, $class) = $regs;
-       $options = array(
-               'class' => $class
-       );
-       list($distant,$table) = distant_table($type);
-
-       // Si le controleur est un squelette html, on va chercher
-       // les champs qu'il lui faut dans la table demandee
-       // Attention, un controleur multi-tables ne fonctionnera
-       // que si les champs ont le meme nom dans toutes les tables
-       // (par exemple: hyperlien est ok, mais pas nom)
-       if (($fichier = find_in_path(($controleur = 'controleurs/' . $type . '_' . $champ) . '.html'))
-               || ($fichier = find_in_path(($controleur = 'controleurs/' . $champ) .'.html'))) {
-               if (!lire_fichier($fichier, $controldata)) {
-                       die('erreur lecture controleur');
-               }
-               if (preg_match_all('/\bname=(["\'])#ENV\{name_(\w+)\}\1/', $controldata, $matches, PREG_PATTERN_ORDER)) {
-                       $champ = $matches[2];
-               }
-       } else {
-               $controleur = '';
-       }
-
-       $valeur = valeur_colonne_table($type, $champ, $id);
-
-       #spip_log("$valeur = valeur_colonne_table($type, $champ, $id);");
-       #spip_log($champ);
-
-       if ($valeur === false) {
-               return array("$type $id $champ: " . _U('crayons:pas_de_valeur'), 6);
-       }
-/*     if (is_scalar($valeur)) {
-               $valeur = array($champ => $valeur);
-       }*/
-
-       // type du crayon (a revoir quand le core aura type ses donnees)
-       $inputAttrs = array();
-       if ($controleur) {
-               $options['hauteurMini'] = 80; // base de hauteur mini
-               $option['inmode'] = 'controleur';
-               $options['controleur'] = $controleur;
-       } elseif (preg_match(",[\n\r],", $valeur[$champ])
-               or (($champ == 'valeur') && ($id == 'descriptif_site'))
-               or
-       // on regarde le type tel que defini dans serial
-       // (attention il y avait des blob dans les vieux spip)
-               ($sqltype = colonne_table($type, $champ)) &&
-               (in_array($sqltype['type'], array('mediumtext', 'longblob', 'longtext')) ||
-               (($sqltype['type'] == 'text' || $sqltype['type'] == 'blob')
-               and in_array($champ, array('descriptif', 'bio'))))) {
-               // si la valeur fait plusieurs lignes on doit mettre un textarea
-               // derogation specifique pour descriptif_site de spip_metas
-               $options['hauteurMini'] = 80; // hauteur mini d'un textarea
-               $option['inmode'] = 'texte';
-       } else { // ligne, hauteur naturelle
-               $options['hauteurMaxi'] = 0;
-               $option['inmode'] = 'ligne';
-               // c'est un nombre entier
-               if ($sqltype['long']) {
-                       // si long est [4,3] sa longueur maxi est 8 (1234,123)
-                       if (is_array($sqltype['long'])) {
-                               if (count($sqltype['long']) == 2) {
-                                       $inputAttrs['maxlength'] = $sqltype['long'][0] + 1 + $sqltype['long'][1];
-                               } else {
-                                       // on ne sait pas ce que c'est !
-                                       $inputAttrs['maxlength'] = $sqltype['long'][0];
-                               }
-                       } else {
-                               $inputAttrs['maxlength'] = $sqltype['long'];
-                       }
-               }
-       }
-
-       $crayon = new Crayon($nomcrayon, $valeur, $options, $c);
-       $inputAttrs['style'] = implode('', $crayon->styles);
-
-       if (!$controleur) {
-               $inputAttrs['style'] .= 'width:' . $crayon->largeur . 'px;' .
-               ($crayon->hauteur ? ' height:' . $crayon->hauteur . 'px;' : '');
-       }
-
-       $html = $controleur ? $crayon->formulaire(null, $inputAttrs) :
-                                       $crayon->formulaire($option['inmode'], $inputAttrs);
-       $status = null;
-
-       return array($html,$status);
-}
-
-// Definition des crayons
-class Crayon {
-       // le nom du crayon "type-modele-id" comme "article-introduction-237"
-       var $name;
-       // type, a priori une table, extrait du nom plus eventuellement base distante
-       var $type;
-       // table la table a crayonner
-       var $table;
-       // distant base distante
-       var $distant;
-       // modele, un champ comme "texte" ou un modele, extrait du nom
-       var $modele;
-       // l'identificateur dans le type, comme un numero d'article
-       var $id;
-       // la ou les valeurs des champs du crayon, tableau associatif champ => valeur
-       var $texts = array();
-       // une cle unique pour chaque crayon demande
-       var $key;
-       // un md5 associe aux valeurs pour verifier et detecter si elles changent
-       var $md5;
-       // dimensions indicatives
-       var $largeurMini = 170;
-       var $largeurMaxi = 700;
-       var $hauteurMini = 80;
-       var $hauteurMaxi = 700;
-       var $largeur;
-       // le mode d'entree: texte, ligne ou controleur
-       var $inmode = '';
-       // eventuellement le fond modele pour le controleur
-       var $controleur = '';
-       var $styles = array();
-
-       // le constructeur du crayon
-       // $name : son nom
-       // $texts : tableau associatif des valeurs ou valeur unique si crayon monochamp
-       // $options : options directes du crayon (developpement)
-       function __construct($name, $texts = array(), $options = array(), $c = null) {
-               $this->name = $name;
-
-               list($this->type, $this->modele, $this->id) = array_pad(explode('-', $this->name, 3), 3, '');
-               list($this->distant,$this->table) = distant_table($this->type);
-               if (is_scalar($texts) || is_null($texts)) {
-                       $texts = array($this->modele => $texts);
-               }
-               $this->texts = $texts;
-               $this->key = strtr(uniqid('wid', true), '.', '_');
-               $this->md5 = $this->md5();
-               foreach ($options as $opt => $val) {
-                       $this->$opt = $val;
-               }
-               $this->dimension($c);
-               $this->css();
-       }
-
-       // calcul du md5 associe aux valeurs
-       function md5() {
-               #spip_log($this->texts, 'crayons');
-               return md5(serialize($this->texts));
-       }
-
-       // dimensions indicatives
-       function dimension($c) {
-               // largeur du crayon
-               $this->largeur = min(max(intval(_request('w', $c)), $this->largeurMini), $this->largeurMaxi);
-               // hauteur maxi d'un textarea selon wh: window height
-               $maxheight = min(max(intval(_request('wh', $c)) - 50, 400), $this->hauteurMaxi);
-               $this->hauteur = min(max(intval(_request('h', $c)), $this->hauteurMini), $maxheight);
-               $this->left = _request('left');
-               $this->top = _request('top');
-               $this->w = _request('w');
-               $this->h = _request('h');
-               $this->ww = _request('ww');
-               $this->wh = _request('wh');
-       }
-
-       // recuperer les elements de style
-       function css() {
-               foreach (array('color', 'font-size', 'font-family', 'font-weight', 'line-height', 'min-height', 'text-align') as $property) {
-                       if (null !== ($p = _request($property))) {
-                               $this->styles[] = "$property:$p;";
-                       }
-               }
-
-               $property = 'background-color';
-               if (!$p = _request($property)
-                       or $p == 'transparent') {
-                       $p = 'white';
-               }
-               $this->styles[] = "$property:$p;";
-       }
-
-       // formulaire standard
-       function formulaire($contexte = array(), $inputAttrs = array()) {
-               return
-                       $this->code() .
-                       $this->input($contexte, $inputAttrs);
-       }
-
-       // balises input type hidden d'identification du crayon
-       function code() {
-               return
-                '<input type="hidden" class="crayon-id" name="crayons[]"'
-               .' value="'.$this->key.'" />'."\n"
-               . '<input type="hidden" name="name_'.$this->key
-               .'" value="'.$this->name.'" />'."\n"
-               . '<input type="hidden" name="class_' . $this->key
-               . '" value="' . $this->class . '" />' . "\n"
-               . '<input type="hidden" name="md5_'.$this->key
-               .'" value="'.$this->md5.'" />'."\n"
-               . '<input type="hidden" name="fields_'.$this->key
-               .'" value="'.join(',', array_keys($this->texts)).'" />'
-               ."\n"
-               ;
-       }
-
-/**
- * Fabriquer les balises des champs d'apres un modele controleurs/(type_)modele.html
- *
- * @param array $contexte
- *     tableau (nom=>valeur) qui sera enrichi puis passe à recuperer_fond
- * @return string
- *  le contenu de recuperer_fond du controleur
- */
-       function fond($contexte = array()) {
-               include_spip('inc/filtres');
-               $contexte['id_' . $this->type] = $this->id;
-               $contexte['id_' . $this->table] = $this->id;
-               $contexte['crayon_type'] = $this->type;
-               $contexte['crayon_modele'] = $this->modele;
-               $contexte['lang'] = $GLOBALS['spip_lang'];
-               $contexte['key'] = $this->key;
-               $contexte['largeur'] = $this->largeur;
-               $contexte['hauteur'] = $this->hauteur;
-               $contexte['self'] = _request('self');
-               foreach ($this->texts as $champ => $val) {
-                       $contexte['name_' . $champ] = 'content_' . $this->key . '_' . $champ;
-               }
-               $contexte['style'] = join(' ', $this->styles);
-               include_spip('public/assembler');
-               return recuperer_fond($this->controleur, $contexte);
-       }
-
-/**
- * Fabriquer les balises du ou des champs
- * $attrs est un tableau (attr=>val) d'attributs communs ou pour le champs unique
- *
- * @param string|array $spec
- *  soit un scalaire 'ligne' ou 'texte' précisant le type de balise
- *  soit un array($champ=>array('type'=>'...', 'attrs'=>array(attributs specifique du champs)))
- * @return string
- *     le html de l'input
- */
-       function input($spec = 'ligne', $attrs = array()) {
-               if ($this->controleur) {
-                       return $this->fond($spec);
-               }
-               include_spip('inc/filtres');
-               $return = '';
-               foreach ($this->texts as $champ => $val) {
-                       $type = is_array($spec) ? $spec[$champ]['type'] : $spec;
-                       switch ($type) {
-                               case 'texte':
-                                       $id = uniqid('wid');
-                                       $input = '<textarea style="width:100%;" class="crayon-active"'
-                                       . ' name="content_'.$this->key.'_'.$champ.'" id="'.$id.'">'
-                                       . "\n"
-                                       . entites_html($val)
-                                       . "</textarea>\n";
-                                       break;
-                               case 'ligne':
-                               default:
-                                       $input = '<input class="crayon-active text" type="text"'
-                                       . ' name="content_'.$this->key.'_'.$champ.'"'
-                                       . ' value="'
-                                       . entites_html($val)
-                                       . '" />'."\n";
-                       }
-
-                       if (is_array($spec) && isset($spec[$champ]['attrs'])) {
-                               foreach ($spec[$champ]['attrs'] as $attr => $val) {
-                                       $input = inserer_attribut($input, $attr, $val);
-                               }
-                       }
-
-                       foreach ($attrs as $attr => $val) {
-                               $input = inserer_attribut($input, $attr, $val);
-                       }
-
-                       // petit truc crado pour mettre la barre typo si demandee
-                       // pour faire propre il faudra reprogrammer la bt en jquery
-                       $meta_crayon = isset($GLOBALS['meta']['crayons']) ? unserialize($GLOBALS['meta']['crayons']) : array();
-                       if (isset($meta_crayon['barretypo'])
-                               and $meta_crayon['barretypo']
-                               and $type == 'texte') {
-                               // Pas la peine de mettre cette barre si PortePlume est la
-                               if (!(
-                                               function_exists('chercher_filtre')
-                                               and $f = chercher_filtre('info_plugin')
-                                               and $f('PORTE_PLUME', 'est_actif')
-                                       )
-                               ) {
-                                       include_spip('inc/barre');
-                                       $input = "<div style='width:".$this->largeur."px;height:23px;'>"
-                                               . (function_exists('afficher_barre')
-                                                       ? afficher_barre("document.getElementById('$id')")
-                                                       : '')
-                                               . '</div>'
-                                               . $input;
-                               }
-                       }
-
-                       $return .= $input;
-               }
-               return $return;
-       }
-}
-
-/**
- *     Fabriquer les boutons du formulaire
- *
- *  @param array $boutons
- *      Le tableau des boutons
- *  @return string
- *      Le html des boutons
- */
-function crayons_boutons($boutons = array()) {
-       $boutons['submit'] = array('ok', texte_backend(_T('bouton_enregistrer')));
-       $boutons['cancel'] = array('cancel', texte_backend(_T('crayons:annuler')));
-
-       $html = '';
-       foreach ($boutons as $bnam => $bdef) {
-               if ($bdef) {
-                       $html .= '<button type="button" class="crayon-' . $bnam .
-                               '" title="' . $bdef[1] . '">' . $bdef[1] . '</button>';
-               }
-       }
-
-       if ($html) {
-               return '<div class="crayon-boutons"><div>'.$html.'</div></div>';
-       }
-}
-
-function crayons_formulaire($html, $action = 'crayons_store') {
-       if (!$html) {
-               return '';
-       }
-
-       // on est oblige de recreer un Crayon pour connaitre la largeur du form.
-       // Pb conceptuel a revoir
-       $crayon = new Crayon('');
-       $class = ($crayon->largeur < 250 ? ' small' : '');
-
-
-       include_spip('inc/filtres');
-       return liens_absolus(
-               '<div class="formulaire_spip">'
-               . '<form class="formulaire_crayon'.$class.'" method="post" action="'
-               . url_absolue(parametre_url(self(), 'action', $action))
-               . '" enctype="multipart/form-data">'
-               . $html
-               . crayons_boutons()
-               . '</form>'
-               .'</div>'
-       );
-}
-
-//
-// Un Crayon avec une verification de code de securite
-//
-class SecureCrayon extends Crayon {
-
-       function __construct($name, $text='') {
-               parent::__construct($name, $text);
-       }
-
-       function code() {
-               $code = parent::code();
-               $secu = md5($GLOBALS['meta']['alea_ephemere']. '=' . $this->name);
-
-               return
-                       $code
-                       .'<input type="hidden" name="secu_'.$this->key.'" value="'.$secu.'" />'."\n";
-       }
-}
-
-/**
- * Action affichant le controleur html ou php adéquat
- *
- * on affiche le formulaire demande (controleur associe au crayon)
- * Si le crayon n'est pas de type "crayon", c'est un crayon etendu, qui
- * integre le formulaire requis à son controleur (pour avoir les boutons
- * du formulaire dans un controleur Draggable, par exemple, mais il y a
- * d'autres usages possibles)
- *
- */
-function action_crayons_html_dist() {
-       include_spip('inc/crayons');
-
-       // Utiliser la bonne langue d'environnement
-       if (!isset($GLOBALS['forcer_lang']) or !$GLOBALS['forcer_lang'] or ($GLOBALS['forcer_lang'] === 'non')) {
-               lang_select($GLOBALS['auteur_session']['lang']);
-       }
-
-       $return = affiche_controleur(_request('class'));
-       if (!_request('type') or _request('type') == 'crayon') {
-               $return['$html'] = crayons_formulaire($return['$html']);
-       }
-
-       $json = trim(crayons_json_encode($return));
-
-       header('Content-Type: text/plain; charset=utf-8');
-       die($json);
-}
diff --git a/www/plugins/crayons/action/crayons_store.php b/www/plugins/crayons/action/crayons_store.php
deleted file mode 100644 (file)
index b440f7b..0000000
+++ /dev/null
@@ -1,541 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function verif_secu($w, $secu) {
-       return (
-               $secu == md5($GLOBALS['meta']['alea_ephemere'].'='.$w)
-       or
-               $secu == md5($GLOBALS['meta']['alea_ephemere_ancien'].'='.$w)
-       );
-}
-
-function post_crayons() {
-       $results = array();
-
-       if (isset($_POST['crayons']) and is_array($_POST['crayons'])) {
-               foreach ($_POST['crayons'] as $crayon) {
-                       $name = $_POST['name_'.$crayon];
-                       $content = array();
-                       if ($_POST['fields_'.$crayon]) {
-                               foreach (explode(',', $_POST['fields_'.$crayon]) as $field) {
-                                       // cas particulier d'un envoi de fichier
-                                       if (isset($_FILES['content_'.$crayon.'_'.$field])) {
-                                               if ($_FILES['content_'.$crayon.'_'.$field]['size'] > 0) {
-                                                       $content[$field] = $_FILES['content_'.$crayon.'_'.$field];
-                                               } else {
-                                                       $content[$field] = false;
-                                               }
-                                               // cf. valeur passee dans crayon->md5() : false ou filemtime() du logo
-                                       } else {
-                                               /**
-                                                * le changement de charset n'est plus necessaire
-                                                * depuis jquery 1.5 (feature non documentee de jquery!)
-                                                */
-                                               if (isset($_POST['content_'.$crayon.'_'.$field])) {
-                                                       $content[$field] = is_array($_POST['content_'.$crayon.'_'.$field])
-                                                               ?implode(',', $_POST['content_'.$crayon.'_'.$field])
-                                                               :$_POST['content_'.$crayon.'_'.$field];
-                                               } else {
-                                                       $content[$field] = null;
-                                               }
-                                       }
-                               }
-                       }
-
-                       // Si les donnees POSTees ne correspondent pas a leur md5,
-                       // il faut les traiter
-                       if (isset($name)
-                               and md5(serialize($content)) != $_POST['md5_'.$crayon]) {
-                               if (!isset($_POST['secu_'.$crayon])
-                                       or verif_secu($name, $_POST['secu_' . $crayon])) {
-                                       $results[] = array($name, $content, $_POST['md5_'.$crayon], $crayon);
-                               } else {
-                                       return false; // erreur secu
-                               }
-                       } else {
-                               // cas inchange
-                               $results[] = array($name, $content, false, $crayon);
-                       }
-               }
-       }
-       return $results;
-}
-
-
-function crayons_store($options = array()) {
-       // permettre de surcharger les fonctions de recuperation des valeurs
-       // et de sauvegardes de celles-ci
-       $options = array_merge(array(
-                       'f_get_valeur' => 'crayons_store_get_valeur',
-                       'f_set_modifs' => 'crayons_store_set_modifs',
-               ), $options);
-
-       include_spip('inc/crayons');
-       $wdgcfg = wdgcfg();
-
-       $return = array('$erreur'=>'');
-
-       $postees = post_crayons();
-
-       $modifs = $updates = array();
-       if (!is_array($postees)) {
-               $return['$erreur'] = _U('crayons:donnees_mal_formatees');
-       } else {
-               foreach ($postees as $postee) {
-                       if ($postee[2] !== false) {
-                               $name = $postee[0];
-                               $content = $postee[1];
-
-                               if ($content && preg_match(_PREG_CRAYON, 'crayon '.$name, $regs)) {
-                                       list(,$crayon,$type,$modele,$id) = $regs;
-                                       $wid = $postee[3];
-
-                                       spip_log("autoriser('crayonner', $type, $id, null, array('modele' => $modele)", 'crayons_distant');
-                                       if (!autoriser('crayonner', $type, $id, null, array('modele' => $modele))) {
-                                               $return['$erreur'] =
-                                                       "$type $id: " . _U('crayons:non_autorise');
-                                       } else {
-                                               // recuperer l'existant pour calculer son md5 et verifier
-                                               // qu'il n'a pas ete modifie entre-temps
-                                               $get_valeur = $options['f_get_valeur'];
-                                               $data = $get_valeur($content, $regs);
-
-                                               $md5 = md5(serialize($data));
-
-                                               // est-ce que le champ a ete modifie dans la base entre-temps ?
-                                               if ($md5 != $postee[2]) {
-                                                       // si oui, la modif demandee correspond peut-etre
-                                                       // a la nouvelle valeur ? dans ce cas on procede
-                                                       // comme si "pas de modification", sinon erreur
-                                                       if ($md5 != md5(serialize($content))) {
-                                                               $return['$erreur'] = "$type $id $modele: " .
-                                                                       _U('crayons:modifie_par_ailleurs');
-                                                       }
-                                               }
-
-                                               $modifs[] = array($type, $modele, $id, $content, $wid);
-
-                                               /* aiguillage pour verification de la saisie
-                                               Pour traitement ulterieur les fonctions de verifications doivent renvoyer $invalides :
-                                                $invalides[wid_champ]['msg'] -> message de saisie invalide
-                                                $invalides[wid_champ]['retour'] -> caracteres invalides */
-                                               $f = 'verifier_'.$type.'_'.$modele;
-                                               if (function_exists($f)) {
-                                                       if (count($invalides = $f($modifs))) {
-                                                               $return['$invalides'] = $invalides;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       if (!$modifs and !$return['$erreur']) {
-               $return['$erreur'] = $wdgcfg['msgNoChange'] ? _U('crayons:pas_de_modification') : ' ';
-               $return['$annuler'] = true;
-       }
-
-       // un champ invalide ... ou rien ==> on ne fait rien !
-       if (isset($return['$invalides']) and $return['$invalides']) {
-               return $return;
-       }
-
-       // une quelconque erreur ... ou rien ==> on ne fait rien !
-       if (isset($return['$erreur']) and $return['$erreur']) {
-               return $return;
-       }
-
-       // on traite toutes les modifications
-       // en appelant la fonction adequate de traitement
-       $set_modifs = $options['f_set_modifs'];
-       $return = $set_modifs($modifs, $return);
-
-       // une quelconque erreur ... ou rien ==> on ne fait rien !
-       if ($return['$erreur']) {
-               return $return;
-       }
-
-       // et maintenant refaire l'affichage des crayons modifies
-       include_spip('inc/texte');
-       foreach ($modifs as $m) {
-               list($type, $modele, $id, $content, $wid) = $m;
-                       $f = charger_fonction($type.'_'.$modele, 'vues', true)
-                               or $f = charger_fonction($modele, 'vues', true)
-                               or $f = charger_fonction($type, 'vues', true)
-                               or $f = 'vues_dist';
-                       $return[$wid] = $f($type, $modele, $id, $content, $wid);
-       }
-       return $return;
-}
-
-// recuperer une valeur en fonction des parametres recuperes
-// cette fonction cherche une valeur d'une colonne d'une table SQL
-function crayons_store_get_valeur($content, $regs) {
-       list(,$crayon,$type,$modele,$id) = $regs;
-       return valeur_colonne_table($type, array_keys($content), $id);
-}
-
-// stocke les valeurs envoyees dans des colonnes de table SQL
-function crayons_store_set_modifs($modifs, $return) {
-       // sinon on bosse : toutes les modifs ont ete acceptees
-       // verifier qu'on a tout ce qu'il faut pour mettre a jour la base
-       // et regrouper les mises a jour par type/id
-       foreach ($modifs as $modif) {
-               list($type, $modele, $id, $content, $wid) = $modif;
-
-               $fun = '';
-               // si le crayon est un MODELE avec une fonction xxx_revision associee
-               // cas ou une fonction xxx_revision existe
-               if (function_exists($f = $type.'_'. $modele . '_revision')
-                       or function_exists($f = $modele . '_revision')
-                       or function_exists($f = $type . '_revision')) {
-                       $fun = $f;
-               } elseif (function_exists('lister_tables_objets_sql')
-                       and $tables_objet = lister_tables_objets_sql()
-                       and isset($tables_objet[table_objet_sql($type)])) {
-                       // si on est en SPIP 3+ et qu'on edite un objet editorial bien declare
-                       // passer par l'API objet_modifier
-                       $fun = 'crayons_objet_modifier';
-               } else {
-                       // sinon spip < 3 (ou pas un objet edito)
-                       // on teste les objets connus et on route sur les fonctions correspondantes
-                       switch ($type) {
-                               case 'article':
-                                       $fun = 'crayons_update_article';
-                                       break;
-                               case 'breve':
-                                       include_spip('action/editer_breve');
-                                       $fun = 'revisions_breves';
-                                       break;
-                               case 'forum':
-                                       include_spip('inc/forum');
-                                       $fun = 'enregistre_et_modifie_forum';
-                                       break;
-                               case 'rubrique':
-                                       include_spip('action/editer_rubrique');
-                                       $fun = 'revisions_rubriques';
-                                       break;
-                               case 'syndic':
-                               case 'site':
-                                       include_spip('action/editer_site');
-                                       $fun = 'revisions_sites';
-                                       break;
-                               case 'document':
-                                       include_spip('plugins/installer');
-                                       include_spip('inc/plugin');
-                                       if (spip_version_compare($GLOBALS['spip_version_branche'], '3.0.0alpha', '>=')) {
-                                               include_spip('action/editer_document');
-                                               $fun = 'document_modifier';
-                                       } else {
-                                               include_spip('inc/modifier');
-                                               $fun = 'revision_document';
-                                       }
-                                       break;
-                               // cas geres de la maniere la plus standard
-                               case 'auteur':
-                               case 'mot':
-                               case 'signature':
-                               case 'petition':
-                               default:
-                                       include_spip('inc/modifier');
-                                       $fun = 'revision_'.$type;
-                                       break;
-                       }
-               }
-               // si on a pas reussi on passe par crayons_update() qui fera un update sql brutal
-               if (!$fun or !function_exists($fun)) {
-                       $fun = 'crayons_update';
-                       // $return['$erreur'] = "$type: " . _U('crayons:non_implemente');
-                       // break;
-               }
-
-               if (!isset($updates[$type][$fun])) {
-                       $updates[$type][$fun] = array();
-               }
-               if (!isset($updates[$type][$fun][$id])) {
-                       $updates[$type][$fun][$id] = array('wdg'=>array(), 'chval'=>array());
-               }
-               // pour reaffecter le retour d'erreur sql au cas ou
-               $updates[$type][$fun][$id]['wdg'][] = $wid;
-               foreach ($content as $champtable => $val) {
-                       $updates[$type][$fun][$id]['chval'][$champtable] = $val;
-               }
-       }
-
-       // il manque une fonction de mise a jour ==> on ne fait rien !
-       if ($return['$erreur']) {
-               return $return;
-       }
-
-       // hop ! mises a jour table par table et id par id
-       foreach ($updates as $type => $idschamps) {
-               foreach ($idschamps as $fun => $ids) {
-                       foreach ($ids as $id => $champsvaleurs) {
-                               /* cas particulier du logo dans un crayon complexe :
-                                  ce n'est pas un champ de la table */
-                               if (isset($champsvaleurs['chval']['logo'])) {
-                                       spip_log('revision logo', 'crayons');
-                                       logo_revision($id, $champsvaleurs['chval'], $type, $champsvaleurs['wdg']);
-                                       unset($champsvaleurs['chval']['logo']);
-                               }
-                               if (count($champsvaleurs['chval'])) {
-                                       // -- revisions_articles($id_article, $c) --
-                                       spip_log("$fun($id ...)", 'crayons');
-                                       $updok = $fun($id, $champsvaleurs['chval'], $type, $champsvaleurs['wdg']);
-                                       // Renvoyer erreur si update base distante echoue,
-                                       // on ne regarde pas les updates base local car ils ne renvoient rien
-                                       list($distant,$table) = distant_table($type);
-                                       if ($distant and !$updok) {
-                                               $return['$erreur'] = "$type: " . _U('crayons:update_impossible');
-                                       }
-                               }
-                       }
-               }
-       }
-       return $return;
-}
-
-//
-// VUE
-//
-function vues_dist($type, $modele, $id, $content, $wid) {
-       // pour ce qui a une {lang_select} par defaut dans la boucle,
-       // la regler histoire d'avoir la bonne typo dans le propre()
-       // NB: ceci n'a d'impact que sur le "par defaut" en bas
-       list($distant,$table) = distant_table($type);
-       if (colonne_table($type, 'lang')) {
-               $b = valeur_colonne_table($type, 'lang', $id);
-               lang_select($a = array_pop($b));
-       } else {
-               lang_select($a = $GLOBALS['meta']['langue_site']);
-       }
-
-       // chercher vues/article_toto.html
-       // sinon vues/toto.html
-       if (find_in_path(($fond = 'vues/' . $type . '_' . $modele) . '.html')
-               or find_in_path(($fond = 'vues/' . $modele) .'.html')
-               or find_in_path(($fond = 'vues/' . $type) .'.html')) {
-               $primary = (function_exists('id_table_objet')?id_table_objet($table):'id_' . $table);
-               $contexte = array(
-                       $primary => $id,
-                       'crayon_type' => $type,
-                       'crayon_modele' => $modele,
-                       'champ' => $modele,
-                       'class' => _request('class_'.$wid),
-                       'self' => _request('self'),
-                       'lang' => $GLOBALS['spip_lang']
-               );
-               $contexte = array_merge($contexte, $content);
-               include_spip('public/assembler');
-               return recuperer_fond($fond, $contexte);
-       } else {
-               // vue par defaut
-               // Par precaution on va rechercher la valeur
-               // dans la base de donnees (meme si a priori la valeur est
-               // ce qu'on vient d'envoyer, il y a nettoyage des caracteres et
-               // eventuellement d'autres filtres de saisie...)
-               $bdd = valeur_colonne_table($type, $modele, $id);
-               if (count($bdd)) {
-                       $valeur = array_pop($bdd);
-               } else {
-                       // les champs n'ont pas ete retrouves dans la base
-                       // ce qui signifie a priori que nous sommes en face d'une cle primaire compose
-                       // et qu'un crayon a modifie un element de cette cle (c'est pas malin !)
-                       // dans ce cas, on reaffiche a minima ce qu'on vient de publier
-                       // mais il sera impossible de le reediter dans la foulee avec le meme crayon
-                       // (car l'identifiant du crayon se base sur l'id).
-                       // Il faudra donc recharger la page pour pouvoir reediter.
-                       if (is_scalar($id)) {
-                               $valeur = $content[$modele];
-                       }
-               }
-
-               if ($valeur) {
-                       // seul spip core sait rendre les donnees
-                       if (function_exists('appliquer_traitement_champ')) {
-                               $valeur = appliquer_traitement_champ($valeur, $modele, table_objet($table));
-                       } else {
-                               if (in_array($modele, array('chapo', 'texte', 'descriptif', 'ps', 'bio'))) {
-                                       $valeur = propre($valeur);
-                               } else {
-                                       $valeur = typo($valeur);
-                               }
-                       }
-               }
-               return $valeur;
-       }
-}
-
-
-/**
- * Fonction de mise a jour par API editer_objet
- * @param $id
- * @param $data
- * @param $type
- * @param $ref
- * @return bool|mixed|string
- */
-function crayons_objet_modifier($id, $data, $type, $ref) {
-       if (include_spip('action/editer_objet')
-               and function_exists('objet_modifier')) {
-               return objet_modifier(objet_type($type), $id, $data);
-       }
-       // fallback
-       return crayons_update($id, $data, $type);
-}
-
-//
-// Fonctions de mise a jour generique
-//
-function crayons_update($id, $colval = array(), $type = '') {
-       if (!$colval or !count($colval)) {
-               return false;
-       }
-       list($distant,$table) = distant_table($type);
-
-       if ($distant) {
-               list($nom_table, $where) = table_where($type, $id);
-               if (!$nom_table) {
-                       return false;
-               }
-
-               $update = $sep = '';
-               foreach ($colval as $col => $val) {
-                       $update .= $sep . '`' . $col . '`=' . _q($val);
-                       $sep = ', ';
-               }
-
-               $a = spip_query($q = 'UPDATE `' . $nom_table . '` SET ' . $update . ' WHERE ' . $where, $distant);
-
-               #spip_log($q);
-               include_spip('inc/invalideur');
-               suivre_invalideur($cond, $modif = true);
-       } else {
-               // cle primaire composee : 3-4-rubrique
-               // calculer un where approprie
-               // et modifier sans passer par la fonction destinee aux tables principales
-               // on limite a SPIP 2 mini car sql_updateq n'est pas mappe dans les crayons_compat
-               if (is_scalar($id) and ($GLOBALS['spip_version_code'] >= '1.93')) {
-                       list($nom_table, $where) = table_where($type, $id, true); // where sous forme de tableau
-                       $a = sql_updateq($nom_table, $colval, $where);
-               } else {
-                       // modification d'une table principale
-                       include_spip('inc/modifier');
-                       $a = modifier_contenu($type, $id, array(), $colval);
-               }
-       }
-       return $a;
-}
-
-//
-// Fonctions de mise a jour
-//
-function crayons_update_article($id_article, $c = false) {
-       include_spip('action/editer_article');
-
-       // Enregistrer les nouveaux contenus
-       revisions_articles($id_article, $c);
-
-       // En cas de statut ou de id_rubrique
-       // NB: instituer_article veut id_parent, et pas id_rubrique !
-       if (isset($c['id_rubrique'])) {
-               $c['id_parent'] = $c['id_rubrique'];
-               unset($c['id_rubrique']);
-       }
-       instituer_article($id_article, $c);
-}
-
-/**
- * Enregistre les modifications sur une configuration
- * suite à un crayon sur une meta
- *
- * La colonne est toujours 'valeur' pour ces données.
- * La donnée à enregistrer peut-être une sous partie de configuration.
- * Si c'est le cas, on gère l'enregistrement via ecrire_config.
- *
- * @param string $a
- *   Nom ou clé de la meta (descriptif_site ou demo__truc pour demo/truc)
- * @param bool|array $c
- *   Liste des champs modifiés
- *   Ici, 'valeur' normalement.
- * @return void
-**/
-function revision_meta($a, $c = false) {
-       if (isset($c['valeur'])) {
-               // Certaines cles de configuration sont echapées ici (cf #EDIT_CONFIG{demo/truc})
-               $a = str_replace('__', '/', $a);
-               spip_log("meta '$a' = '$c[valeur]'", 'crayons');
-               // eviter de planter les vieux SPIP
-               if (false === strpos($a, '/')) {
-                       ecrire_meta($a, $c['valeur']);
-               // SPIP 3 ou Bonux 2 ou CFG
-               } else {
-                       include_spip('inc/config');
-                       ecrire_config($a, $c['valeur']);
-               }
-               include_spip('inc/invalideur');
-               suivre_invalideur('meta');
-       }
-}
-
-
-// TODO:
-// Ce modele est cense enregistrer les tags sous forme de ??
-// une ligne dans un champ spip_articles.tags, et/ou des mots-cles...
-function modeles_tags($id, $c) {
-       var_dump($id); #id_article
-       var_dump($c); # perturbant : ici on a array('id_article'=>'valeur envoyee')
-}
-
-function action_crayons_store_dist() {
-       return action_crayons_store_args();
-}
-
-// permettre de passer une autre fonction de stockage des informations
-function action_crayons_store_args($store = 'crayons_store') {
-       header('Content-Type: text/plain; charset='.$GLOBALS['meta']['charset']);
-       lang_select($GLOBALS['auteur_session']['lang']);
-
-       $r = $store();
-
-       // Si on a ete appeles par jQuery, on renvoie tout, c'est le client
-       // crayons.js qui va traiter l'affichage du resultat et status
-       # Attention le test $_SERVER["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest"
-       # n'est pas bon car le cas d'un fichier uploade via iframe n'est pas detecte
-
-       // S'il y a une adresse de redirection, on renvoie vers elle
-       // En cas d'erreur il faudrait ajouter &err=... dans l'url ?
-       if (_request('redirect')) {
-               if (!$r['$erreur']
-                       or $r['$annuler']) {
-                       include_spip('inc/headers');
-                       redirige_par_entete(_request('redirect'));
-               } else {
-                       echo "<h4 class='status'>".$r['$erreur']."</h4>\n";
-
-                       foreach ($r as $wid => $v) {
-                               if ($wid !== '$erreur') {
-                                       echo "<div id='$wid'>$v</div><hr />\n";
-                               }
-                       }
-                       echo "<a href='".quote_amp(_request('redirect'))."'>"
-                               .quote_amp(_request('redirect'))
-                               ."</a>\n";
-               }
-       } else {
-               // Cas normal : JSON
-               echo crayons_json_export($r);
-       }
-
-       exit;
-}
diff --git a/www/plugins/crayons/action/crayons_upload.php b/www/plugins/crayons/action/crayons_upload.php
deleted file mode 100644 (file)
index 38b8099..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Upload de documents
- *
- * Cette action recoit des fichiers ($_FILES)
- * et les affecte a l'objet courant ;
- * puis renvoie la liste des documents joints
- */
-function action_crayons_upload() {
-
-       $type = preg_replace('/\W+/', '', strval(_request('type')));
-       $id = intval(_request('id'));
-
-       // check securite :-)
-       include_spip('inc/autoriser');
-       if (!autoriser('joindredocument', $type, $id)) {
-               echo 'Erreur: upload interdit';
-               return false;
-       }
-
-       // on n'accepte qu'un seul document à la fois, dans la variable 'upss'
-       if ($file = $_FILES['upss']
-               and $file['error'] == 0) {
-               $source = $file['tmp_name'];  # /tmp/php/phpxxx
-               $nom_envoye = $file['name'];  # mon-image.jpg
-
-               include_spip('plugins/installer'); // spip_version_compare dans SPIP 3.x
-               include_spip('inc/plugin'); // spip_version_compare dans SPIP 2.x
-               if (function_exists('spip_version_compare')) { // gerer son absence dans les branche precedente a SPIP 2.x
-                       if (spip_version_compare($GLOBALS['spip_version_branche'], '3.0.0alpha', '>=')) {
-                               define('_SPIP3', true);
-                       }
-               }
-               if (defined('_SPIP3')) {
-                       include_spip('action/ajouter_documents');
-                       $ajouter_un_document = charger_fonction('ajouter_un_document', 'action');
-                       $id = $ajouter_un_document('new', $file, $type, $id, 'document');
-               } else {
-                       include_spip('inc/ajouter_documents');
-                       $id = ajouter_un_document($source, $nom_envoye, $type, $id, 'document', $id_document = 0, $documents_actifs, $titrer = true);
-               }
-       }
-
-       if (!$id) {
-               $erreur = 'erreur !';
-       }
-
-       $a = recuperer_fond('modeles/uploader_item', array('id_document' => $id, 'erreur' => $erreur));
-
-       echo $a;
-}
diff --git a/www/plugins/crayons/controleurs/article_intro.html b/www/plugins/crayons/controleurs/article_intro.html
deleted file mode 100644 (file)
index 87a4d05..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'article_intro' , uniquement html
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-<textarea class="crayon-active" name="#ENV{name_descriptif}"
- style="width:#ENV{largeur}px; height:#ENV{hauteur}px;#ENV{style}">
-[(#DESCRIPTIF**|sinon{#INTRODUCTION|textebrut|trim}|entites_html)]</textarea>
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/article_intro2.html b/www/plugins/crayons/controleurs/article_intro2.html
deleted file mode 100644 (file)
index 803dd07..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'article_intro2' , uniquement html
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-<fieldset style="width:#ENV{largeur}px;#ENV{style}">
-<legend>Introduction</legend>
-<label>Descriptif</label><textarea class="crayon-active" name="#ENV{name_descriptif}"
- style="width:100%; height:#ENV{hauteur}px;">
-[(#DESCRIPTIF**|entites_html)]</textarea>
-<label>Chapo</label><textarea class="crayon-active" name="#ENV{name_chapo}"
- style="width:100%; height:#ENV{hauteur}|mul{2}px;">
-[(#CHAPO**|entites_html)]</textarea>
-</fieldset>
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/article_intro3.php b/www/plugins/crayons/controleurs/article_intro3.php
deleted file mode 100644 (file)
index 557f676..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// un controleur qui n'utilise que php et les inputs défauts
-function controleurs_article_intro3_dist($regs) {
-       list(,$crayon,$type,$champ,$id) = $regs;
-       $valeur = valeur_colonne_table($type, array('descriptif', 'chapo', 'texte'), $id);
-       if ($valeur === false) {
-               return array("$type $id $champ: " . _U('crayons:pas_de_valeur'), 6);
-       }
-
-       $n = new Crayon('article-intro3-' . $id, $valeur, array('hauteurMini' => 234));
-
-       $return = array(
-               // html
-               $n->formulaire(
-                       // champs et attributs propres
-                       array(
-                       'descriptif' => array('type' => 'texte', 'attrs' => array(
-                               'style' => 'height:' . ceil($n->hauteur*2/13) . 'px;' .
-                                                       'width:' . $n->largeur . 'px;')),
-                       'chapo' =>  array('type' => 'texte', 'attrs' => array(
-                               'style' => 'height:' . ceil($n->hauteur*4/13) . 'px;' .
-                                                       'width:' . $n->largeur . 'px;')),
-                       'texte' =>  array('type' => 'texte', 'attrs' => array(
-                               'style' => 'height:' . ceil($n->hauteur*4/13) . 'px;' .
-                                                       'width:' . $n->largeur . 'px;'))) //,
-                       // attributs communs :( marche pas pour style , pas 2 fois ?
-                       // array('style' => 'width:' . $n->largeur . 'px;')
-               ),
-               // status
-               null);
-
-       return $return;
-}
diff --git a/www/plugins/crayons/controleurs/article_introduction.html b/www/plugins/crayons/controleurs/article_introduction.html
deleted file mode 100644 (file)
index 53d1694..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'article_introduction' php+html
-       
-       (les balises écrites ci-dessous sont volontairement avec un espace pour ne pas être
-       compilée)
-       
-       Appelé via # EDIT{introduction} dans une boucle article
-       
-       Affiche les trois champs :
-       - descriptif (si rempli, il sera le rendu de # INTRODUCTION)
-       - chapo 
-       - texte
-       
-       Si aucun descriptif, le rendu de # INTRODUCTION est par défaut les 600 premiers caractères de
-       # CHAPO + # TEXTE
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-<ul class="editer-groupe">
-       <li class="fieldset" style="width:#ENV{largeur}px;#ENV{style}">
-               <h3 class="legend"><:crayons:legend_introduction_article:></h3>
-               <p class="explication"><:crayons:explication_introduction_article:></p>
-               <ul class="editer-groupe">
-                       <li class="editer_descriptif">
-                               <label for="descriptif"><:texte_descriptif_rapide:></label>
-                               <textarea class="crayon-active maxheight150" 
-                                       name="#ENV{name_descriptif}"
-                                       id="descriptif"
-                                       style="width:100%;
-                                       height:#ENV{h_descriptif}px;">[(#DESCRIPTIF**|entites_html)]</textarea>
-                       </li>
-                       [(#CONFIG{articles_chapeau}|=={oui}|oui)
-                       <li class="editer_chapo">
-                               <label for="chapo"><:info_chapeau:></label>
-                               <textarea class="crayon-active"
-                                       name="#ENV{name_chapo}"
-                                       id="chapo"
-                                       style="width:100%;
-                                       height:#ENV{h_chapo}px;">[(#CHAPO**|entites_html)]</textarea>
-                       </li>]
-                       <li class="editer_texte">
-                               <label for="text_area"><:info_texte:></label>
-                               <textarea class="crayon-active"
-                                       name="#ENV{name_texte}"
-                                       id="text_area"
-                                       style="width:100%;
-                                       height:#ENV{h_texte}px;">[(#TEXTE**|entites_html)]</textarea>
-                       </li>
-               </ul>
-       </li>
-</ul>
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/article_introduction.php b/www/plugins/crayons/controleurs/article_introduction.php
deleted file mode 100644 (file)
index 4c15293..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// un controleur php + html
-// html == avec un modele, controleurs/article_introduction.html)
-function controleurs_article_introduction_dist($regs) {
-       list(,$crayon,$type,$champ,$id) = $regs;
-       $valeur = valeur_colonne_table($type, array('descriptif', 'chapo', 'texte'), $id);
-       if ($valeur === false) {
-               return array("$type $id $champ: " . _U('crayons:pas_de_valeur'), 6);
-       }
-
-       $n = new Crayon('article-introduction-' . $id, $valeur, array('hauteurMini' => 234, 'controleur' => 'controleurs/article_introduction'));
-
-       $contexte = array(
-               'h_descriptif' => (int)ceil($n->hauteur*2/13),
-               'h_chapo' => (int)ceil($n->hauteur*4/13),
-               'h_texte' => (int)ceil($n->hauteur*4/13));
-       $html = $n->formulaire($contexte);
-       $status = null;
-
-       return array($html, $status);
-}
diff --git a/www/plugins/crayons/controleurs/article_texte.html b/www/plugins/crayons/controleurs/article_texte.html
deleted file mode 100644 (file)
index 03e8303..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'article_intro' , uniquement html
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-<textarea class="crayon-active" name="#ENV{name_texte}"
- style="width:#ENV{largeur}px; height:#ENV{hauteur}px;#ENV{style}">
-[(#TEXTE**|entites_html)]</textarea>
-
-[(#CONFIG{crayons/upload}|?{
-       #MODELE{uploader_liste,id_article}
-
-})<INCLURE{fond=js/uploader.js,id_article=#ID_ARTICLE}>]
-</BOUCLE_a>
-
diff --git a/www/plugins/crayons/controleurs/auteur_email.html b/www/plugins/crayons/controleurs/auteur_email.html
deleted file mode 100644 (file)
index 2272130..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'auteur_email', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_a(AUTEURS){id_auteur}{tous}>
-<input class="crayon-active" name="#ENV{name_email}"
- style="width:#ENV{largeur}px;#ENV{style}" value="[(#EMAIL**|entites_html)]" />
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/auteur_nom.html b/www/plugins/crayons/controleurs/auteur_nom.html
deleted file mode 100644 (file)
index d1ad82f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'auteur_nom', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_a(AUTEURS){id_auteur}{tous}>
-<input class="crayon-active" name="#ENV{name_nom}"
- style="width:#ENV{largeur}px;#ENV{style}" value="[(#NOM**|entites_html)]" />
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/auteur_qui.html b/www/plugins/crayons/controleurs/auteur_qui.html
deleted file mode 100644 (file)
index 2ac3f63..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'auteur_qui', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_a(AUTEURS){id_auteur}{tous}>
-<fieldset style="#ENV{style}">
-       <h3 class="legend"><:crayons:legend_controleur_qui:></h3>
-       <ul class="editer-groupe">
-               <li class="editer_nom">
-                       <label for="nom"><:ecrire:info_nom:> :</label>
-                       <input type="text" class="crayon-active text" name="#ENV{name_nom}" id="nom"
-        size="40" value="[(#NOM**|entites_html)]" />
-    </li>
-               <li class="editer_email">
-      <label for="email"><:ecrire:email_2|ucfirst:></label>
-                       <input type="text" class="crayon-active text" name="#ENV{name_email}" id="email"
-        size="40" value="[(#EMAIL**|entites_html)]" />
-               </li>
-       </ul>
-</fieldset>
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/breve_hyperlien.html b/www/plugins/crayons/controleurs/breve_hyperlien.html
deleted file mode 100644 (file)
index a90378a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<BOUCLE_f(BREVES){id_breve}{statut==.}>
-<fieldset style="#ENV{largeur}px;#ENV{style}"><legend>Hyperlien</legend>
-<label><:form_prop_indiquer_nom_site:></label> <input class="crayon-active" name="#ENV{name_lien_titre}"
- style="width:100%;" value="[(#NOM_SITE**|entites_html)]" />
- <br />
- <label><:form_prop_url_site:></label> <input class="crayon-active" name="#ENV{name_lien_url}"
- style="width:100%;" value="[(#URL_SITE**|entites_html)]" />
-</fieldset>
-</BOUCLE_f>
diff --git a/www/plugins/crayons/controleurs/document_fichier.html b/www/plugins/crayons/controleurs/document_fichier.html
deleted file mode 100644 (file)
index 7471fca..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'document'
-
-]
-#CACHE{0}
-
-
-[(#REM) En fonction de du contexte, choisir un logo ]
-
-<BOUCLE_d(DOCUMENTS){id_document}{tout}>
-
-[(#SET{image,[<img src="(#LOGO_DOCUMENT||extraire_attribut{src})" />]})]
-
-<fieldset[ style="(#ENV{style});"]>
-<legend>
-       [(#SET{logo,[(#GET{image}|image_reduire{0,40})]})]
-
-       [(#REM) hacke l'url pour eviter le cache du navigateur ]
-       [(#SET{url,[(#GET{logo}|extraire_attribut{src}
-               |parametre_url{s,#EVAL{time()}})]})]
-
-       <small>[(#GET{logo}|inserer_attribut{src,#GET{url}}
-               |inserer_attribut{style,vertical-align:middle;})]
-       &nbsp; <:crayons:legend_controleur_fichier_remplacer{extension=#EXTENSION}:>
-       [((#GET{image}
-               |extraire_attribut{width})&times;[(#GET{image}
-               |extraire_attribut{height})]px)]</small>
-
-</legend>
-
-<input class="crayon-active" name="#ENV{name_document}" type="file"[
-onchange="(#MODE|=={vignette}|?{' '})if (this.value && !this.value.match(/\.(png|jpeg|jpg|gif)$/i)) { alert('Il faut choisir une image :-)'); this.value=''; };"] />
-
-[(#REM)
-
-TODO: document distant (cf. document_fichier_revision dans inc/crayons)
-
-<br />
-<input class="crayon-active" name="#ENV{name_fichier}" type="text" value="#FICHIER" />
-
-]
-
-</fieldset>
-
-</BOUCLE_d>
diff --git a/www/plugins/crayons/controleurs/extra.html b/www/plugins/crayons/controleurs/extra.html
deleted file mode 100644 (file)
index 1863ec4..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'extra'
-
-]
-#CACHE{0}
-
-<fieldset[ style="(#ENV{style});"]>
-<legend>extra</legend>
-
-<input class="crayon-active" name="#ENV{name_extra}" type="hidden" value="go" />
-
-<BOUCLE_a(AUTEURS){id_auteur}{tous}>
-[(#EXTRA**|extra_saisie{auteurs,#STATUT})]
-</BOUCLE_a>
-
-<BOUCLE_b(ARTICLES){id_article}{statut==.}>
-[(#EXTRA**|extra_saisie{articles,#ID_RUBRIQUE})]
-</BOUCLE_b>
-
-<BOUCLE_c(BREVES){id_breve}{statut==.}>
-[(#EXTRA**|extra_saisie{breves,#ID_RUBRIQUE})]
-</BOUCLE_c>
-
-<BOUCLE_d(RUBRIQUES){id_rubrique}{statut==.}>
-[(#EXTRA**|extra_saisie{rubriques,#ID_SECTEUR})]
-</BOUCLE_d>
-
-<BOUCLE_e(SITES){id_syndic=#ENV{id_site}}{statut==.}>
-[(#EXTRA**|extra_saisie{sites,#ID_RUBRIQUE})]
-</BOUCLE_e>
-
-<//B_d>
-<//B_c>
-<//B_b>
-<//B_a>
-
-</fieldset>
\ No newline at end of file
diff --git a/www/plugins/crayons/controleurs/extra_fonctions.php b/www/plugins/crayons/controleurs/extra_fonctions.php
deleted file mode 100644 (file)
index cb208a0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/extra');
-include_spip('inc/presentation');
diff --git a/www/plugins/crayons/controleurs/forum_email.html b/www/plugins/crayons/controleurs/forum_email.html
deleted file mode 100644 (file)
index ec7cc13..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'forum-email', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_b(FORUMS){id_forum}{statut==.}>
-<input class="crayon-active" name="#ENV{name_email_auteur}"
- style="width:#ENV{largeur}px;#ENV{style}" value="[(#EMAIL**|entites_html)]" />
-</BOUCLE_b>
diff --git a/www/plugins/crayons/controleurs/forum_id_article.html b/www/plugins/crayons/controleurs/forum_id_article.html
deleted file mode 100644 (file)
index 703cce7..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'forum-id_article'
-
-       NB: il est possible d'ajouter ci-dessous un second menu
-       qui permettrait de passer d'un article a une breve ; la seule
-       difficulte etant de savoir remettre a zero la valeur id_article
-       si une breve a ete selectionnee (et vice-versa)
-
-       Tant qu'on en  pas besoin, hein, on va laisser comme \8da.
-
-]
-#CACHE{0}
-
-<BOUCLE_f(FORUMS){id_forum}{statut==.}{id_parent=0}{id_article>0}>
-
-<B_a>
-<fieldset style="#ENV{style}">
-Associer ce forum &#224; l'article :
-<select class="crayon-active" name="#ENV{name_id_article}"
-       onchange="cQuery(this).parents('form.formulaire_spip').submit();">
-<option value="0"[
-       (#ID_ARTICLE|?{'',selected})]>&gt;&gt;</option>
-<BOUCLE_a(ARTICLES)>
-<option value="#ID_ARTICLE"[
-       (#ID_ARTICLE|=={#_f:ID_ARTICLE}|?{selected})]>#ID_ARTICLE - [(#TITRE|couper{30})]</option>
-</BOUCLE_a>
-</select>
-</fieldset>
-</B_a>
-
-
-</BOUCLE_f>
diff --git a/www/plugins/crayons/controleurs/forum_nom.html b/www/plugins/crayons/controleurs/forum_nom.html
deleted file mode 100644 (file)
index d40980b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'forum-nom', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_b(FORUMS){id_forum}{statut==.}>
-<input class="crayon-active" name="#ENV{name_auteur}"
- style="width:#ENV{largeur}px;#ENV{style}" value="[(#NOM**|entites_html)]" />
-</BOUCLE_b>
diff --git a/www/plugins/crayons/controleurs/forum_qui.html b/www/plugins/crayons/controleurs/forum_qui.html
deleted file mode 100644 (file)
index 933a329..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'forum_qui', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_d(FORUMS){id_forum}{statut==.}>
-<fieldset style="#ENV{style};text-align:right;"><legend>Qui ?</legend>
-<label><:ecrire:info_nom:> : <input class="crayon-active" name="#ENV{name_auteur}"
- style="width:#ENV{largeur}px;" value="[(#NOM**|entites_html)]" /></label><br />
- <label><:ecrire:email_2:> <input class="crayon-active" name="#ENV{name_email_auteur}"
- style="width:#ENV{largeur}px;" value="[(#EMAIL**|entites_html)]" /></label>
-</fieldset>
-</BOUCLE_d>
diff --git a/www/plugins/crayons/controleurs/hyperlien.html b/www/plugins/crayons/controleurs/hyperlien.html
deleted file mode 100644 (file)
index b271d83..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'hyperlien', uniquement html
-
-       (attention pour les syndic_articles et breves, les champs ne sont
-       pas les memes, il faut donc un autre controleur)
-
-]
-#CACHE{0}
-
-<BOUCLE_a(AUTEURS){id_auteur}{tous}>
-<fieldset style="#ENV{largeur}px;#ENV{style}">
-       <h3 class="legend"><:crayons:legend_controleur_hyperlien:></h3>
-       <ul class="editer-groupe">
-               <li class="editer_nom_site">
-                       <label for="nom_site"><:form_prop_indiquer_nom_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_nom_site}" id="nom_site"
-                   size="40" value="[(#NOM_SITE**|entites_html)]" />
-               </li>
-               <li class="editer_url_site">
-                       <label for="url_site"><:form_prop_url_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_url_site}" id="url_site"
-                   size="40" value="[(#URL_SITE**|entites_html)]" />
-               </li>
-  </ul>
-</fieldset>
-</BOUCLE_a>
-
-<BOUCLE_b(ARTICLES){id_article}{statut==.}>
-<fieldset style="#ENV{largeur}px;#ENV{style}">
-       <h3 class="legend"><:crayons:legend_controleur_hyperlien:></h3>
-       <ul class="editer-groupe">
-               <li class="editer_nom_site">
-                       <label for="nom_site"><:form_prop_indiquer_nom_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_nom_site}" id="nom_site"
-                   size="40" value="[(#NOM_SITE**|entites_html)]" />
-               </li>
-               <li class="editer_url_site">
-                       <label for="url_site"><:form_prop_url_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_url_site}" id="url_site"
-                   size="40" value="[(#URL_SITE**|entites_html)]" />
-               </li>
-  </ul>
-</fieldset>
-</BOUCLE_b>
-
-<BOUCLE_c(SIGNATURES){id_signature}{statut==.}>
-<fieldset style="#ENV{largeur}px;#ENV{style}">
-       <h3 class="legend"><:crayons:legend_controleur_hyperlien:></h3>
-       <ul class="editer-groupe">
-               <li class="editer_nom_site">
-                       <label for="nom_site"><:form_prop_indiquer_nom_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_nom_site}" id="nom_site"
-                   size="40" value="[(#NOM_SITE**|entites_html)]" />
-               </li>
-               <li class="editer_url_site">
-                       <label for="url_site"><:form_prop_url_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_url_site}" id="url_site"
-                   size="40" value="[(#URL_SITE**|entites_html)]" />
-               </li>
-  </ul>
-</fieldset>
-</BOUCLE_c>
-
-<BOUCLE_d(FORUMS){id_forum}{statut==.}>
-<fieldset style="#ENV{largeur}px;#ENV{style}">
-       <h3 class="legend"><:crayons:legend_controleur_hyperlien:></h3>
-       <ul class="editer-groupe">
-               <li class="editer_nom_site">
-                       <label for="nom_site"><:form_prop_indiquer_nom_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_nom_site}" id="nom_site"
-                   size="40" value="[(#NOM_SITE**|entites_html)]" />
-               </li>
-               <li class="editer_url_site">
-                       <label for="url_site"><:form_prop_url_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_url_site}" id="url_site"
-                   size="40" value="[(#URL_SITE**|entites_html)]" />
-               </li>
-  </ul>
-</fieldset>
-</BOUCLE_d>
-
-<BOUCLE_e(SITES){id_syndic=#ENV{id_site}}{statut==.}>
-<fieldset style="#ENV{largeur}px;#ENV{style}">
-       <h3 class="legend"><:crayons:legend_controleur_hyperlien:></h3>
-       <ul class="editer-groupe">
-               <li class="editer_nom_site">
-                       <label for="nom_site"><:form_prop_indiquer_nom_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_nom_site}" id="nom_site"
-                   size="40" value="[(#NOM_SITE**|entites_html)]" />
-               </li>
-               <li class="editer_url_site">
-                       <label for="url_site"><:form_prop_url_site:></label>
-                       <input class="crayon-active text" name="#ENV{name_url_site}" id="url_site"
-                   size="40" value="[(#URL_SITE**|entites_html)]" />
-               </li>
-  </ul>
-</fieldset>
-</BOUCLE_e>
-
-<//B_d>
-<//B_c>
-<//B_b>
-<//B_a>
diff --git a/www/plugins/crayons/controleurs/id_parent.html b/www/plugins/crayons/controleurs/id_parent.html
deleted file mode 100644 (file)
index 6961863..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'id_parent', uniquement html
-       
-       Utilisable dans une boucle rubriques et articles
-       On affiche toutes les rubriques même non publiées
-       On sépare visuellement les sous rubriques
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-#SET{id,#ID_RUBRIQUE}
-</BOUCLE_a>
-<BOUCLE_r(RUBRIQUES){id_rubrique}{tout}>
-#SET{id,#ID_PARENT}
-</BOUCLE_r>
-<//B_a>
-<B_rubriques>
-<select class="crayon-active" name="#ENV{name_id_rubrique}"
-       style="width:#ENV{largeur}px;#ENV{style}" >
-       <BOUCLE_rubriques(RUBRIQUES){racine}{par num titre, titre}{tout}>
-               [(#SET{separateur_[(#ID_RUBRIQUE)],''})]
-               <option value="#ID_RUBRIQUE"[(#GET{id}|=={#ID_RUBRIQUE}|?{selected})]>[(#TITRE)]</option>
-               <BOUCLE_ss_rub(RUBRIQUES){id_parent}{tout}>
-                       [(#SET{separateur_[(#ID_RUBRIQUE)],[(#GET{separateur_[(#ID_PARENT)]}|concat{&nbsp;&rsaquo;&nbsp;})]})]
-                       <option value="#ID_RUBRIQUE"[(#GET{id}|=={#ID_RUBRIQUE}|?{selected})]>[(#GET{separateur_[(#ID_RUBRIQUE)]})][(#TITRE)]</option>
-                       <BOUCLE_ss_ss_rub(BOUCLE_ss_rub) />
-               </BOUCLE_ss_rub>
-       </BOUCLE_rubriques>
-</select>
-</B_rubriques>
\ No newline at end of file
diff --git a/www/plugins/crayons/controleurs/logo.html b/www/plugins/crayons/controleurs/logo.html
deleted file mode 100644 (file)
index c8f120c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'logo'
-
-]
-#CACHE{0}
-
-[(#REM) En fonction de du contexte, choisir un logo ]
-[(#SET{image,[(#ID_ARTICLE|?{#LOGO_ARTICLE_NORMAL}
-       |sinon{[(#ID_AUTEUR|?{#LOGO_AUTEUR_NORMAL})]}
-       |sinon{[(#ID_BREVE|?{#LOGO_BREVE_NORMAL})]}
-       |sinon{[(#ID_RUBRIQUE|?{[(#LOGO_RUBRIQUE_NORMAL|extraire_attribut{src}|match{[(#EVAL{_DIR_IMG})]rubon0\.}|?{'',#LOGO_RUBRIQUE_NORMAL})]})]}
-       |sinon{[(#ID_SYNDIC_ARTICLE|?{#LOGO_SYNDIC_ARTICLE})]}
-       |sinon{[(#ID_SYNDIC|?{#LOGO_SITE_NORMAL})]}
-       |sinon{[(#ID_MOT|?{#LOGO_MOT_NORMAL})]})]})]
-[(#GET{image}|?{
-       [(#SET{logo,[(#GET{image}|image_reduire{64})]})]
-       [(#REM) hacke l'url pour eviter le cache du navigateur ]
-       [(#SET{url,[(#GET{logo}|extraire_attribut{src}
-               |parametre_url{s,#EVAL{time()}})]})]
-       [(#SET{legend,
-               <:crayons:legend_controleur_logo_remplacer:>
-               [((#GET{image}
-               |extraire_attribut{width})&times;[(#GET{image}
-               |extraire_attribut{height})]px)]&nbsp;:
-       })]
-       [(#SET{supprimer,
-               [<div class="choix">
-                       <input type="checkbox" name="(#ENV{name_logo})_supprimer" id="#ENV{name_logo}_supprimer" /><label for="#ENV{name_logo}_supprimer"> <:crayons:bouton_supprimer:></label>
-               <div>]
-       })]
-})]
-
-<fieldset [ style="(#ENV{style}); border:none;"]>
-       <h3 class="legend">
-               [(#GET{legend}|sinon{<:crayons:legend_controleur_logo:>})]
-               [<div style="float:#LANG_RIGHT">(#GET{logo}|inserer_attribut{src,#GET{url}}
-                       |inserer_attribut{style,vertical-align:middle;})</div>]
-       </h3>
-       <ul class="editer-groupe">
-               <li class="editer_logo">
-                       <div class="choix">
-                               <input class="crayon-active file" name="#ENV{name_logo}" type="file"
-                                       onchange="if (this.value && !this.value.match(/\.(png|jpeg|jpg|gif)$/i)) { alert('<:crayons:message_image_obligatoire:>'); this.value=''; }; var q=cQuery('##ENV{name_logo}_supprimer').parent(); this.value ? q.hide() : q.show();" size="1" />
-                       </div>
-                       #GET{supprimer}
-               </li>
-       </ul>
-</fieldset>
\ No newline at end of file
diff --git a/www/plugins/crayons/controleurs/mots_article_brut.html b/www/plugins/crayons/controleurs/mots_article_brut.html
deleted file mode 100644 (file)
index 159cc16..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'mots_article_brut'
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-<fieldset style="#ENV{style}"><legend>Mots-clé pour #TITRE (#ID_ARTICLE)</legend>
-<B_moex>
-<label>Existants</label>
-<select class="crayon-active" name="#ENV{name_existants}" style="width:#ENV{largeur}px; height:#ENV{hauteur}px;">
-<BOUCLE_moex(MOTS){id_article}{doublons}>
-       <option value="#ID_GROUPE:#ID_MOT">[(#TITRE|entites_html)]</option>
-</BOUCLE_moex>
-</select>
-</B_moex>
-Pas d'existant
-<//B_moex>
-</fieldset>
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/portfolio.php b/www/plugins/crayons/controleurs/portfolio.php
deleted file mode 100644 (file)
index 362206a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// un controleur php (TODO -- NE FONCTIONNE PAS DU TOUT)
-
-function controleurs_portfolio_dist($regs) {
-       list(,$crayon,$type,$champ,$id) = $regs;
-
-       include_spip('inc/minipres'); # pour aide()
-       include_spip('inc/presentation'); # pour debut_cadre()
-       include_spip('inc/layer'); # pour le js des fleches
-       include_spip('inc/documents'); # pour aide()
-
-       $html =
-               http_script("\nvar ajax_image_searching = \n'<div style=\"float: " . $GLOBALS['spip_lang_right'] . ';\"><img src="' . url_absolue(_DIR_IMG_PACK . 'searching.gif')."\" alt=\"\" /></div>';")
-               . http_script('', generer_url_public('jquery.js'))
-               . http_script('', _DIR_JAVASCRIPT . 'layer.js', '')
-               . afficher_documents_colonne($id, $type, 'portfolio');
-
-       $status = null;
-
-       return array($html, $status);
-}
diff --git a/www/plugins/crayons/controleurs/rubrique_introduction.html b/www/plugins/crayons/controleurs/rubrique_introduction.html
deleted file mode 100644 (file)
index b1c98e0..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'rubrique_introduction' php+html
-       
-       (les balises écrites ci-dessous sont volontairement avec un espace pour ne pas être
-       compilée)
-       
-       Appelé via # EDIT{introduction} dans une boucle rubrique
-       
-       Affiche les deux champs :
-       - descriptif (si rempli, il sera le rendu de # INTRODUCTION)
-       - texte
-       
-       Si aucun descriptif, le rendu de # INTRODUCTION est par défaut les 600 premiers caractères de
-       # # TEXTE
-
-]
-#CACHE{0}
-<BOUCLE_a(RUBRIQUES){id_rubrique}{statut==.}>
-<fieldset style="width:#ENV{largeur}px;#ENV{style};background-color:inherit;">
-       <h3 class="legend"><:crayons:legend_introduction_rubrique:></h3>
-       <ul class="editer-groupe">
-               <li class="editer_descriptif">
-                       <label for="descriptif"><:texte_descriptif_rapide:></label>
-                       <textarea class="crayon-active maxheight150"
-                               name="#ENV{name_descriptif}"
-                               id="descriptif"
-                               style="width:100%;
-                               height:#ENV{h_descriptif}px;">[(#DESCRIPTIF**|entites_html)]</textarea>
-               </li>
-               <li class="editer_texte">
-                       <label for="text_area"><:info_texte:></label>
-                       <textarea class="crayon-active"
-                               name="#ENV{name_texte}"
-                               id="text_area"
-                               style="width:100%;
-                               height:#ENV{h_texte}px;">[(#TEXTE**|entites_html)]</textarea>
-               </li>
-       </ul>
-</fieldset>
-</BOUCLE_a>
diff --git a/www/plugins/crayons/controleurs/rubrique_introduction.php b/www/plugins/crayons/controleurs/rubrique_introduction.php
deleted file mode 100644 (file)
index c1000af..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// un controleur php + html
-// html == avec un modele, controleurs/rubrique_introduction.html)
-function controleurs_rubrique_introduction_dist($regs) {
-       list(,$crayon,$type,$champ,$id) = $regs;
-       $valeur = valeur_colonne_table($type, array('descriptif', 'texte'), $id);
-       if ($valeur === false) {
-               return array("$type $id $champ: " . _U('crayons:pas_de_valeur'), 6);
-       }
-
-       $n = new Crayon(
-               'rubrique-introduction-' . $id,
-               $valeur,
-               array('hauteurMini' => 234, 'controleur' => 'controleurs/rubrique_introduction')
-       );
-
-       $contexte = array(
-       'h_descriptif' => (int)ceil($n->hauteur*5/13),
-               'h_texte' => (int)ceil($n->hauteur*7/13));
-       $html = $n->formulaire($contexte);
-       $status = null;
-
-       return array($html, $status);
-}
diff --git a/www/plugins/crayons/controleurs/signature_email.html b/www/plugins/crayons/controleurs/signature_email.html
deleted file mode 100644 (file)
index ec501bb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'signature-email', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_c(SIGNATURES){id_signature}{statut==.}>
-<input class="crayon-active" name="#ENV{name_ad_email}"
- style="width:#ENV{largeur}px;#ENV{style}" value="[(#EMAIL**|entites_html)]" />
-</BOUCLE_c>
diff --git a/www/plugins/crayons/controleurs/signature_nom.html b/www/plugins/crayons/controleurs/signature_nom.html
deleted file mode 100644 (file)
index 1f8136c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'signature-nom', uniquement html
-]
-#CACHE{0}
-
-<BOUCLE_c(SIGNATURES){id_signature}{statut==.}>
-<input class="crayon-active" name="#ENV{name_nom_email}"
- style="width:#ENV{largeur}px;#ENV{style}" value="[(#NOM**|entites_html)]" />
-</BOUCLE_c>
diff --git a/www/plugins/crayons/controleurs/signature_qui.html b/www/plugins/crayons/controleurs/signature_qui.html
deleted file mode 100644 (file)
index fbb208c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'signature_qui', uniquement html
-
-]
-#CACHE{0}
-
-<BOUCLE_c(SIGNATURES){id_signature}{statut==.}>
-<fieldset style="width:#ENV{largeur}px;#ENV{style}"><legend>Qui ?</legend>
-<label><:ecrire:info_nom:> :</label> <input class="crayon-active" name="#ENV{name_nom_email}"
- style="width:100%;" value="[(#NOM**|entites_html)]" />
- <br />
- <label><:ecrire:email_2:></label> <input class="crayon-active" name="#ENV{name_ad_email}"
- style="width:100%;" value="[(#EMAIL**|entites_html)]" />
-</fieldset>
-</BOUCLE_c>
diff --git a/www/plugins/crayons/controleurs/statut.html b/www/plugins/crayons/controleurs/statut.html
deleted file mode 100644 (file)
index e532361..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-[(#REM)
-
-       Un crayon pour changer le statut (autrement dit, une gomme)
-       
-       Plutot qu'un menu on peut avoir envie de faire une interface plus jolie
-       mais techniquement ça tourne (version SVN > 1.9.2).
-
-]
-
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-#SET{id,#STATUT}
-<select class="crayon-active" name="#ENV{name_statut}"
- style="width:#ENV{largeur}px;">
-       <option value="publie"[
-               (#GET{id}|=={publie}?{selected})="selected"]>publi&#233;</option>
-       <option value="prop"[
-               (#GET{id}|=={prop}?{selected})="selected"]>propos&#233;</option>
-       <option value="prepa"[
-               (#GET{id}|=={prepa}?{selected})="selected"]>en pr&#233;paration</option>
-</select>
-
-</BOUCLE_a>
-
-
-
diff --git a/www/plugins/crayons/controleurs/syndic_article_hyperlien.html b/www/plugins/crayons/controleurs/syndic_article_hyperlien.html
deleted file mode 100644 (file)
index f8026f0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'hyperlien' des articles syndiques
-
-]
-#CACHE{0}
-
-<BOUCLE_f(SYNDIC_ARTICLES){id_syndic_article=#ENV{id_syndic_article}}
-       {statut==.}>
-<fieldset style="#ENV{largeur}px;#ENV{style}"><legend>Hyperlien</legend>
-<label><:forum_titre:></label> <input class="crayon-active" name="#ENV{name_titre}"
- style="width:100%;" value="[(#TITRE**|entites_html)]" />
- <br />
- <label><:form_prop_url_site:></label> <input class="crayon-active" name="#ENV{name_url}"
- style="width:100%;" value="[(#URL_ARTICLE**|sinon{http://}|entites_html)]" />
-</fieldset>
-</BOUCLE_f>
diff --git a/www/plugins/crayons/controleurs/vignette.html b/www/plugins/crayons/controleurs/vignette.html
deleted file mode 100644 (file)
index 15bd12e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-[(#REM)
-
-       Controleur pour le crayon 'vignette'
-       Ce crayon ne s'applique qu'aux documents
-       On le mets dans une boucle documents contenant le critère {tous} au cas
-       ou le document ne soit pas considere comme publie
-
-]
-#CACHE{0}
-
-<BOUCLE_document(DOCUMENTS){id_document}{tous}>
-[(#SET{image,[(#ID_VIGNETTE|>{0}|?{#LOGO_DOCUMENT})]})]
-[(#GET{image}|?{
-       [(#SET{vignette,[(#GET{image}|image_reduire{64})]})]
-       [(#REM) hacke l'url pour eviter le cache du navigateur ]
-       [(#SET{url,[(#GET{vignette}|extraire_attribut{src}
-               |parametre_url{s,#EVAL{time()}})]})]
-       [(#SET{legend,
-               <:crayons:legend_controleur_vignette_remplacer:>
-               [((#GET{image}
-               |extraire_attribut{width})&times;[(#GET{image}
-               |extraire_attribut{height})]px)]&nbsp;:
-       })]
-       [(#SET{supprimer,
-               [<div class="choix">
-                       <input type="checkbox" name="(#ENV{name_vignette})_supprimer" id="#ENV{name_vignette}_supprimer" /><label for="#ENV{name_vignette}_supprimer"> <:crayons:bouton_supprimer:></label>
-               <div>]
-       })]
-})]
-
-<fieldset [ style="(#ENV{style}); border:none;"]>
-       <h3 class="legend">
-               [(#GET{legend}|sinon{<:crayons:legend_controleur_vignette:>})]
-               [<div style="float:#LANG_RIGHT">(#GET{vignette}|inserer_attribut{src,#GET{url}}
-                       |inserer_attribut{style,vertical-align:middle;})</div>]
-       </h3>
-       <ul class="editer-groupe">
-               <li class="editer_vignette">
-                       <div class="choix">
-                               <input class="crayon-active file" name="#ENV{name_vignette}" type="file"
-                                       onchange="if (this.value && !this.value.match(/\.(png|jpeg|jpg|gif)$/i)) { alert('<:crayons:message_image_obligatoire:>'); this.value=''; }; var q=cQuery('##ENV{name_vignette}_supprimer').parent(); this.value ? q.hide() : q.show();" size="10" />
-                       </div>
-                       #GET{supprimer}
-               </li>
-       </ul>
-</fieldset>
-</BOUCLE_document>
\ No newline at end of file
diff --git a/www/plugins/crayons/crayons.css b/www/plugins/crayons/crayons.css
deleted file mode 100644 (file)
index 4c62420..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-em.crayon-img-changed { display: none; }
-.crayon-changed em.crayon-img-changed {        display: block; }
-.crayon-changed em.crayon-crayon { display: none; }
-em.crayon-edit,
-em.crayon-crayon { display: none; }
-.crayon-boutons,
-.crayon-searching { float: right;padding:0;text-align: right;}
-.crayon-boutons button { border:1px solid; cursor: pointer;display:inline-block; }
-.crayon-boutons .crayon-submit { background: #e6efc2 url(images/ok-16.png) 2px center no-repeat; color: #264409; border-color: #c6d880;float:right;margin-bottom: 0.5em;margin-left:0.5em;padding-left:20px;}
-.crayon-boutons .crayon-cancel { background: #fbe3e4 url(images/annuler-16.png) center center no-repeat; color: #8a1f11; border-color: #fbc2c4;width: 40px; text-indent: -3000em;padding-right:20px;}
-.small .crayon-boutons {float:none;}
-.small .crayon-boutons .crayon-submit {text-indent: -3000em;background-position: center;width: 40px;}
-.small .crayon-boutons .crayon-cancel {float:left;}
-
-.crayon-icones { float: right; width: 20px; text-align: right; position: relative; top:0; left:0; z-index:4999; }
-.crayon-icones span,.crayon-icones em { position:absolute; left:0; }
-em.crayon-edit,
-em.crayon-crayon,
-em.crayon-img-changed { cursor: pointer; border:0; }
-
-/* definition des icones */
-.crayon-icones em.crayon-crayon { background: url(images/crayon20.png) no-repeat; height: 20px; width: 20px; }
-.crayon-icones em.crayon-searching { background: url(images/searching.gif) no-repeat; height: 13px; width: 13px; }
-.crayon-icones em.crayon-edit { background: url(images/edit.png) no-repeat; height: 20px; width: 20px; }
-.crayon-icones em.crayon-img-changed { background: url(images/changed.png) no-repeat; height: 20px; width: 20px; }
-
-.formulaire_crayon .crayon-active { padding: 1px; border: 1px inset; font: inherit; display:block; }
-.crayon-html .formulaire_crayon { max-width: 703px; }
-.crayon-html textarea { overflow: auto; font: inherit; }
-.crayon-html { z-index:5000; }
-.crayon-html .crayon-boutons { position:absolute; right:0px; }
-.crayon-html .small .crayon-boutons {position: relative;}
-
-
-.crayon-invalide { display: block; background-color: #ff8888; border: 1px dashed #ff0000; }
-.crayon-invalide p { margin:0; padding: 1%; font-style: italic; font-size: 80%; }
-/* resizer */
-.resizehandle { background:transparent url("images/resizer.png") no-repeat scroll 50%; cursor:ns-resize; font-size:0.1em; width: auto !important;margin-right: 150px;}
-.small .resizehandle {margin-right: 0;}
-.resizehandle_boutons { margin-top: -16px; }
diff --git a/www/plugins/crayons/crayons.js.html b/www/plugins/crayons/crayons.js.html
deleted file mode 100644 (file)
index 6448ca4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-[(#REM)
-
-       Charger la librairie crayons et ses addenda
-
-]
-#HTTP_HEADER{'Content-Type: text/javascript'}
-
-[(#ENV**{debug_crayons}|?{
-       #CACHE{0}
-,
-       #CACHE{7*24*3600,cache-client}
-})]
-
-/* cQuery est jQuery, renommee pour eviter tout conflit */
-
-[(#CHEMIN{js/jquery.js}|pack_cQuery)]
-
-cQuery.noConflict();
-
-[(#CHEMIN{js/jquery.form.js}|pack_cQuery)]
-
-[(#CHEMIN{js/crayons.js}|pack_cQuery)]
-
-[(#CHEMIN{js/resizehandle.js}|pack_cQuery)]
-
-[(#CHEMIN{js/jquery.html5uploader.js}|pack_cQuery)]
-
-[(#CONFIG{crayons}|match{s:11:"yellow_fade";s:2:"on";}|?{' ',''})
-       [(#CHEMIN{js/crayons-fade.js}|pack_cQuery)]
-]
-
-[(#REM) Appeler la callback si demandee ]
-[(#ENV{callback})();]
diff --git a/www/plugins/crayons/crayons.js_fonctions.php b/www/plugins/crayons/crayons.js_fonctions.php
deleted file mode 100644 (file)
index 17c8e3e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-//
-// Les crayons ont leur propre copie du pack de Dean Edwards
-// pour compatibilite avec SPIP < [9717]
-//
-function pack_cQuery($chemin) {
-       if (!$chemin) {
-               return;
-       }
-
-       $flux = spip_file_get_contents($chemin);
-       $flux = str_replace('jQuery', 'cQuery', $flux);
-       $flux = str_replace('cQuery.spip', 'jQuery.spip', $flux);
-
-       // On ne compacte PAS deux fois (c'est inutile et en plus ca bugge)
-       if (!strlen($flux)
-               or _request('debug_crayons') // mode debug des crayons
-               or ($GLOBALS['meta']['auto_compress_js'] == 'oui'       // le vieil auto_compress_js
-               and @file_exists(_DIR_RESTREINT.'inc/compacte_js.php'))
-               or !function_exists('test_espace_prive')// ou l'espace prive
-               or test_espace_prive()) {
-               return $flux;
-       }
-
-       include_spip('lib/JavaScriptPacker/class.JavaScriptPacker');
-       $packer = new JavaScriptPacker($flux, 0, true, false);
-
-       // en cas d'echec (?) renvoyer l'original
-       if (strlen($t = $packer->pack())) {
-               return $t;
-       }
-
-       // erreur
-       spip_log('erreur de pack_js');
-       return $flux;
-}
diff --git a/www/plugins/crayons/crayons_fonctions.php b/www/plugins/crayons/crayons_fonctions.php
deleted file mode 100644 (file)
index fd0c89f..0000000
+++ /dev/null
@@ -1,480 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2014
- * licence GPL
- *
- * @package SPIP\Crayons\Fonctions
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-if (!defined('_DEBUG_CRAYONS')) {
-       /**
-        * Débuguer les crayons
-        *
-        * Mettre a true dans mes_options pour avoir les crayons non compresses
-        */
-       define('_DEBUG_CRAYONS', false);
-}
-
-/**
- * Dire rapidement si ca vaut le coup de chercher des droits
- *
- * @return bool
-**/
-function analyse_droits_rapide_dist() {
-       return isset($GLOBALS['auteur_session']['statut']);
-}
-
-/**
- * Vérifier si un exec du privé est crayonnable
- *
- * @param string $exec
- *
- * @return bool
- **/
-function test_exec_crayonnable($exec) {
-       if ($exec_autorise = lire_config('crayons/exec_autorise')) {
-               $execs = explode(',', $exec_autorise);
-               foreach ($execs as $key => $value) {
-                       $execs[$key] = trim($value);
-               }
-               if ($exec_autorise == '*' || in_array($exec, $execs)) {
-                       return true;
-               }
-       }
-
-       return false;
-}
-
-/**
- * Ajouter la gestion des crayons dans l'espace privé
- *
- * @pipeline header_prive
- * @uses Crayons_preparer_page()
- *
- * @param string $head
- *     Contenu du header
- * @return string
- *     Contenu du header
-**/
-function Crayons_insert_head($head) {
-       // verifie la presence d'une meta crayons, si c'est vide
-       // on ne cherche meme pas a traiter l'espace prive
-       $config_espace_prive = @unserialize($GLOBALS['meta']['crayons']);
-       if (empty($config_espace_prive)) {
-               return $head;
-       }
-
-       // verifie que l'edition de l'espace prive est autorisee
-       if (isset($config_espace_prive['espaceprive'])
-       and $config_espace_prive['espaceprive'] == 'on') {
-               // determine les pages (exec) crayonnables
-               if (test_exec_crayonnable(_request('exec'))) {
-                       // Calcul des droits
-                       include_spip('inc/crayons');
-                       $head = Crayons_preparer_page($head, '*', wdgcfg(), 'head');
-               }
-       }
-
-       // retourne l'entete modifiee
-       return $head;
-}
-
-/**
- * Ajouter la gestion des crayons dans l'espace public
- *
- * @pipeline affichage_final
- * @uses analyse_droits_rapide_dist()
- * @uses Crayons_preparer_page()
- * @note
- *     Le pipeline affichage_final est executé à chaque hit sur toute la page
- *
- * @param string $page
- *     Contenu de la page à envoyer au navigateur
- * @return string
- *     Contenu de la page à envoyer au navigateur
-**/
-function &Crayons_affichage_final(&$page) {
-
-       // ne pas se fatiguer si le visiteur n'a aucun droit
-       if (!(function_exists('analyse_droits_rapide')?analyse_droits_rapide():analyse_droits_rapide_dist())) {
-               return $page;
-       }
-
-       // sinon regarder rapidement si la page a des classes crayon
-       if (strpos($page, 'crayon')===false) {
-               return $page;
-       }
-
-       // voir un peu plus precisement lesquelles
-       include_spip('inc/crayons');
-       if (!preg_match_all(_PREG_CRAYON, $page, $regs, PREG_SET_ORDER)) {
-               return $page;
-       }
-
-       $wdgcfg = wdgcfg();
-
-       // calculer les droits sur ces crayons
-       include_spip('inc/autoriser');
-       $droits = array();
-       $droits_accordes = 0;
-       foreach ($regs as $reg) {
-               list(,$crayon,$type,$champ,$id) = $reg;
-               if (_DEBUG_CRAYONS) {
-                       spip_log("autoriser('modifier', $type, $id, NULL, array('champ'=>$champ))", 'crayons_distant');
-               }
-               if (autoriser('modifier', $type, $id, null, array('champ'=>$champ))) {
-                       if (!isset($droits['.' . $crayon])) {
-                               $droits['.' . $crayon] = 0;
-                       }
-                       $droits['.' . $crayon]++;
-                       $droits_accordes ++;
-               }
-       }
-
-       // et les signaler dans la page
-       if ($droits_accordes == count($regs)) { // tous les droits
-               $page = Crayons_preparer_page($page, '*', $wdgcfg);
-       } elseif ($droits) { // seulement certains droits, preciser lesquels
-               $page = Crayons_preparer_page($page, join(',', array_keys($droits)), $wdgcfg);
-       }
-
-       return $page;
-}
-
-/**
- * Ajoute les scripts css et js nécessaires aux crayons dans le code HTML
- *
- * @uses crayons_var2js()
- *
- * @param string $page
- *     Code HTML de la page complète ou du header seulement
- * @param string $droits
- *     - Liste de css définissant les champs crayonnables
- *       (séparés par virgule) dont l'édition est autorisée
- *     - "*" si tous sont autorisés
- * @param array $wdgcfg
- *     Description de la configuration des crayons (attribut => valeur)
- * @param string $mode
- *     - page : toute la page est présente dans `$page`
- *     - head : seul le header est présent dans `$page`
- * @return
-**/
-function &Crayons_preparer_page(&$page, $droits, $wdgcfg = array(), $mode = 'page') {
-       /**
-        * Si pas forcer_lang, on charge le contrôleur dans la langue que l'utilisateur a dans le privé
-        */
-       if (!isset($GLOBALS['forcer_lang']) or !$GLOBALS['forcer_lang'] or ($GLOBALS['forcer_lang'] === 'non')) {
-               lang_select($GLOBALS['auteur_session']['lang']);
-       }
-
-       $jsFile = generer_url_public('crayons.js');
-       if (_DEBUG_CRAYONS) {
-               $jsFile = parametre_url($jsFile, 'debug_crayons', 1, '&');
-       }
-       include_spip('inc/filtres'); // rien que pour direction_css() :(
-       $cssFile = direction_css(find_in_path('crayons.css'));
-
-       $config = crayons_var2js(array(
-               'imgPath' => dirname(find_in_path('images/crayon.png')),
-               'droits' => $droits,
-               'dir_racine' => _DIR_RACINE,
-               'self' => self('&'),
-               'txt' => array(
-                       'error' => _U('crayons:svp_copier_coller'),
-                       'sauvegarder' => $wdgcfg['msgAbandon'] ? _U('crayons:sauvegarder') : ''
-               ),
-               'img' => array(
-                       'searching' => array(
-                               'txt' => _U('crayons:veuillez_patienter')
-                       ),
-                       'crayon' => array(
-                               'txt' => _U('crayons:editer')
-                       ),
-                       'edit' => array(
-                               'txt' => _U('crayons:editer_tout')
-                       ),
-                       'img-changed' => array(
-                               'txt' => _U('crayons:deja_modifie')
-                       )
-               ),
-               'cfg' => $wdgcfg
-       ));
-
-
-       // Est-ce que PortePlume est la ?
-       $meta_crayon = isset($GLOBALS['meta']['crayons']) ? unserialize($GLOBALS['meta']['crayons']): array();
-       $pp = '';
-       if (isset($meta_crayon['barretypo']) && $meta_crayon['barretypo']) {
-               if (function_exists('chercher_filtre')
-               and $f = chercher_filtre('info_plugin')
-               and $f('PORTE_PLUME','est_actif')) {
-                       $pp = <<<EOF
-cQuery(function() {
-       if (typeof onAjaxLoad == 'function') {
-               function barrebouilles_crayons() {
-                       $('.formulaire_crayon textarea.crayon-active')
-                       .barre_outils('edition');
-               }
-               onAjaxLoad(barrebouilles_crayons);
-       }
-});
-EOF;
-               }
-       }
-
-
-       $incCSS = "<link rel=\"stylesheet\" href=\"{$cssFile}\" type=\"text/css\" media=\"all\" />";
-       $incJS = <<<EOH
-<script type="text/javascript">/* <![CDATA[ */
-var configCrayons;
-function startCrayons() {
-       configCrayons = new cQuery.prototype.cfgCrayons({$config});
-       cQuery.fn.crayonsstart();
-{$pp}
-}
-var cr = document.createElement('script');
-cr.type = 'text/javascript'; cr.async = true;
-cr.src = '{$jsFile}\x26callback=startCrayons';
-var s = document.getElementsByTagName('script')[0];
-s.parentNode.insertBefore(cr, s);
-/* ]]> */</script>
-
-EOH;
-
-       if ($mode == 'head') {
-               //js inline avant les css, sinon ca bloque le chargement
-               $page = $page . $incJS . $incCSS;
-               return $page;
-       }
-
-       $pos_head = strpos($page, '</head>');
-       if ($pos_head === false) {
-               return $page;
-       }
-
-       // js inline avant la premiere css, ou sinon avant la fin du head
-       $pos_link = strpos($page, '<link ');
-       if (!$pos_link) {
-               $pos_link = $pos_head;
-       }
-       $page = substr_replace($page, $incJS, $pos_link, 0);
-
-       // css avant la fin du head
-       $pos_head = strpos($page, '</head>');
-               $page = substr_replace($page, $incCSS, $pos_head, 0);
-
-       return $page;
-}
-
-/**
- * Balise indiquant un champ SQL crayonnable
- *
- * @note
- *   Si cette fonction est absente, `balise_EDIT_dist()` déclarée par SPIP
- *   ne retourne rien
- *
- * @example
- *     ```
- *     <div class="#EDIT{texte}">#TEXTE</div>
- *     <div class="#EDIT{ps}">#PS</div>
- *     ```
- *
- * @param Champ $p
- *   Pile au niveau de la balise
- * @return Champ
- *   Pile complétée par le code à générer
-**/
-function balise_EDIT($p) {
-
-       // le code compile de ce qui se trouve entre les {} de la balise
-       $label = interprete_argument_balise(1, $p);
-
-       // Verification si l'on est dans le cas d'une meta
-       // #EDIT{meta-descriptif_site} ou #EDIT{meta-demo/truc}
-       if (preg_match('/meta-(.*)\'/', $label, $meta)) {
-               $type = 'meta';
-               $label= 'valeur';
-               $primary = $meta[1];
-               $p->code = "classe_boucle_crayon('"
-                       . $type
-                       ."','"
-                       .$label
-                       ."',"
-                       . "str_replace('/', '__', '$primary')" # chaque / doit être remplacé pour CSS.
-                       .").' '";
-               $p->interdire_scripts = false;
-               return $p;
-       }
-
-       $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle;
-       // #EDIT hors boucle? ne rien faire
-       if (!isset($p->boucles[$i_boucle]) or !$type = ($p->boucles[$i_boucle]->type_requete)) {
-               $p->code = "''";
-               $p->interdire_scripts = false;
-               return $p;
-       }
-
-       // crayon sur une base distante 'nua__article-intro-5'
-       if ($distant = $p->boucles[$i_boucle]->sql_serveur) {
-               $type = $distant.'__'.$type;
-       }
-
-       // le compilateur 1.9.2 ne calcule pas primary pour les tables secondaires
-       // il peut aussi arriver une table sans primary (par ex: une vue)
-       if (!($primary = $p->boucles[$i_boucle]->primary)) {
-               include_spip('inc/vieilles_defs'); # 1.9.2 pour trouver_def_table
-               if (function_exists('trouver_def_table')) {
-                       list($nom, $desc) = trouver_def_table(
-                               $p->boucles[$i_boucle]->type_requete,
-                               $p->boucles[$i_boucle]
-                       );
-                       $primary = $desc['key']['PRIMARY KEY'];
-               }
-       }
-       // On rajoute ici un debug dans le cas où aucune clé primaire n'est trouvée.
-       // Cela peut se présenter par exemple si on utilise #EDIT{monchamp} directement
-       // dans une boucle CONDITION sans faire référence au nom de la boucle d'au dessus.
-       if (!$primary) {
-               erreur_squelette(_T('crayons:absence_cle_primaire'), $p);
-       }
-
-       $primary = explode(',', $primary);
-       $id = array();
-       foreach ($primary as $key) {
-               $id[] = champ_sql(trim($key), $p);
-       }
-       $primary = implode(".'-'.", $id);
-
-       $p->code = "classe_boucle_crayon('"
-               . $type
-               ."',"
-               .sinon($label, "''")
-               .','
-               . $primary
-               .").' '";
-       $p->interdire_scripts = false;
-       return $p;
-}
-
-/**
- * Balise indiquant une configuration crayonnable
- *
- * @example
- *     ```
- *     <div class="#EDIT_CONFIG{descriptif_site}">#DESCRIPTIF_SITE_SPIP</div>
- *     <div class="#EDIT_CONFIG{demo/truc}">#CONFIG{demo/truc}</div>
- *     ```
- *
- * @param Champ $p
- *   Pile au niveau de la balise
- * @return Champ
- *   Pile complétée par le code à générer
-**/
-function balise_EDIT_CONFIG_dist($p) {
-
-       // le code compile de ce qui se trouve entre les {} de la balise
-       $config = interprete_argument_balise(1, $p);
-       if (!$config) {
-               return $p;
-       }
-
-       // chaque / du nom de config doit être transformé pour css.
-       // nous utiliserons '__' à la place.
-
-       $type = 'meta';
-       $label= 'valeur';
-
-       $p->code = "classe_boucle_crayon('"
-               . $type
-               . "','"
-               . $label
-               . "',"
-               . "str_replace('/', '__', $config)"
-               . ").' '";
-       $p->interdire_scripts = false;
-       return $p;
-}
-
-/**
- * Crée le controleur du crayon indiqué par la classe CSS
- *
- * @param string $class
- *   Class CSS de crayon tel que créé par #EDIT
- * @return string
- *   HTML du crayon, sinon texte d'erreur
-**/
-function creer_le_crayon($class) {
-       include_spip('inc/crayons');
-       include_spip('action/crayons_html');
-       $a = affiche_controleur($class, array('w' => 485, 'h' => 300, 'wh' => 500));
-       return $a['$erreur'] ? $a['$erreur'] : $a['$html'];
-}
-
-/**
- * Balise `#CRAYON` affichant un formulaire de crayon
- *
- * SI `?edit=1;`
- *
- * @example
- *    ```
- *    #CRAYON{ps}
- *    ```
- *
- * @param Champ $p
- *   Pile au niveau de la balise
- * @return Champ
- *   Pile complétée par le code à générer
-**/
-function balise_CRAYON($p) {
-       $p = balise_EDIT($p);
-       $p->code = 'creer_le_crayon('.$p->code.')';
-       return $p;
-}
-
-
-/**
- * Donne la classe CSS crayon
- *
- * En fonction :
- * - du type de la boucle
- *   (attention aux exceptions pour `#EDIT` dans les boucles HIERARCHIE et SITES)
- * - du champ demande (vide, + ou se terminant par + : (+)classe type--id)
- * - de l'id courant
- *
- * @param string $type
- *   Type d'objet, ou "meta" pour un champ de configuration
- * @param string $champ
- *   Champ SQL concerné
- * @param int|string $id
- *   Identifiant de la ligne sql
- * @return string
- *   Classes CSS (à ajouter dans le HTML à destination du javascript de Crayons)
-**/
-function classe_boucle_crayon($type, $champ, $id) {
-       // $type = objet_type($type);
-       $type = $type[strlen($type) - 1] == 's' ?
-               substr($type, 0, -1) :
-               str_replace(
-                       array('hierarchie','syndication'),
-                       array('rubrique','site'),
-                       $type
-               );
-
-       $plus = (substr($champ, -1) == '+' and $champ = substr($champ, 0, -1))
-               ? " $type--$id"
-               : '';
-
-       // test rapide pour verifier que l'id est valide (a-zA-Z0-9)
-       if (false !== strpos($id, ' ')) {
-               spip_log("L'identifiant ($id) ne pourra être géré ($type | $champ)", 'crayons');
-               return 'crayon_id_ingerable';
-       }
-
-       return 'crayon ' . $type . '-' . $champ . '-' . $id . $plus;
-}
diff --git a/www/plugins/crayons/fonds/cfg_crayons.html b/www/plugins/crayons/fonds/cfg_crayons.html
deleted file mode 100644 (file)
index df6eef9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- descriptif=
-       <a href="http://www.spip-contrib.net/Les-Crayons" class="spip_out">Cf. documentation</a>
- -->
-<!-- titre=<:crayons:titre_crayons:> -->
-<!-- icone=images/crayon-24.png -->
-<!-- logo=images/crayon-128.png -->
-
-#CACHE{0}
-<div class="ajax">
-#FORMULAIRE_CONFIGURER_CRAYONS
-</div>
diff --git a/www/plugins/crayons/formulaires/configurer_crayons.html b/www/plugins/crayons/formulaires/configurer_crayons.html
deleted file mode 100644 (file)
index 54d2c8b..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<!-- autoriser=configurer -->
-<!-- refus=<:cfg:refus_configuration_administrateur:> -->
-<!-- nom=crayons -->
-
-<div class="formulaire_spip formulaire_cfg formulaire_#FORM">
-
-<h3 class='titrem'>[(#CHEMIN{images/crayon-24.png}|image_reduire{24}|inserer_attribut{class,cadre-icone}|inserer_attribut{alt,''})]<:crayons:titre_config_crayons:></h3>
-
-[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-
-<form method="post" action="#ENV{action}">
-<div>
-#ACTION_FORMULAIRE{#ENV{action}}
-<ul>
-#SET{erreurs,#ENV**{erreurs}|table_valeur{barretypo}}
-<li class="editer editer_barretypo[ (#GET{erreurs}|oui)erreur]">
-       <label for="barretypo"><:crayons:label_barre_typo:></label>
-       [<span class='erreur_message'>(#GET{erreurs})</span>]
-       <div class="choix">
-               <input type="checkbox" name="barretypo" class="checkbox"  value='on' id='barretypo'[ (#ENV{barretypo}|oui)checked="checked"] />
-               <label for='barretypo'><:crayons:label_activer_barre_typo:></label>
-               [(#PLUGIN{porte_plume,version}|version_compare{'1.5','>='}|oui)
-                       [<p class="attention">
-                               (#VAL{PORTE_PLUME_PUBLIC}|defined|et{#VAL{PORTE_PLUME_PUBLIC}|constant}
-                                       |ou{#CONFIG{barre_outils_public}|=={non}})
-                                       <:crayons:activation_barre_impossible:>
-                       </p>]
-               ]
-       </div>
-</li>
-
-#SET{erreurs,#ENV**{erreurs}|table_valeur{msgNoChange}}
-<li class="editer editer_messages[ (#GET{erreurs}|oui)erreur]">
-       <label><:crayons:label_message:></label>
-       [<span class='erreur_message'>(#GET{erreurs})</span>]
-       <div class="choix">
-               <input type="checkbox" name="msgNoChange" class="checkbox" value='on' id='msgNoChange'[ (#ENV{msgNoChange}|oui)checked="checked"] />
-               <label for='msgNoChange'><:crayons:label_msg_no_change:></label>
-       </div>
-       <div class="choix">
-               <input type="checkbox" name="msgAbandon" class="checkbox" value='on' id='msgAbandon'[ (#ENV{msgAbandon}|oui)checked="checked"] />
-               <label for='msgAbandon'><:crayons:label_msg_abandon:></label>
-       </div>
-</li>
-
-#SET{erreurs,#ENV**{erreurs}|table_valeur{filet}}
-<li class="editer editer_effets[ (#GET{erreurs}|oui)erreur]">
-       <label><:crayons:label_effets:></label>
-       [<span class='erreur_message'>(#GET{erreurs})</span>]
-       <div class="choix">
-               <input type="checkbox" name="filet" class="checkbox" value='on' id='filet'[ (#ENV{filet}|oui)checked="checked"] />
-               <label for='filet'><:crayons:label_filet:></label>
-       </div>
-       <div class="choix">
-               <input type="checkbox" name="yellow_fade" class="checkbox" value='on' id='yellow_fade'[ (#ENV{yellow_fade}|oui)checked="checked"] />
-               <label for='yellow_fade'><:crayons:label_yellow_fade:></label>
-       </div>
-       <div class="choix">
-               <input type="checkbox" name="clickhide" class="checkbox" value='on' id='clickhide'[ (#ENV{clickhide}|oui)checked="checked"] />
-               <label for='clickhide'><:crayons:label_clickhide:></label>
-       </div>
-</li>
-
-
-#SET{erreurs,#ENV**{erreurs}|table_valeur{reduire_logo}}
-<li class="editer editer_reduire_logo[ (#GET{erreurs}|oui)erreur]">
-       <label><:crayons:label_reduire_logo:></label>
-       [<span class='erreur_message'>(#GET{erreurs})</span>]
-       <p class='explication'><:crayons:explication_reduire_logo:></p>
-       <input type="text" name="reduire_logo" class="text" size="3" id='reduire_logo' value="[(#ENV{reduire_logo}|intval)]" />
-</li>
-
-<li class="fieldset fieldset_crayons_prive">
-       <h3 class="legend"><:crayons:legend_editer_prive:></h3>
-       <ul>
-               #SET{erreurs,#ENV**{erreurs}|table_valeur{espaceprive}}
-               <li class="editer editer_reduire_logo[ (#GET{erreurs}|oui)erreur]">
-                       <label><:crayons:label_espaceprive:></label>
-                       [<span class='erreur_message'>(#GET{erreurs})</span>]
-                       <div class="choix">
-                               <input type="checkbox" name="espaceprive" class="checkbox"  value='on' id='espaceprive'[ (#ENV{espaceprive}|oui)checked="checked"] />
-                               <label for='espaceprive'><:crayons:label_activer_crayons_prive:></label>
-                       </div>
-               </li>
-               #SET{erreurs,#ENV**{erreurs}|table_valeur{exec_autorise}}
-               <li class="editer editer_exec_autorise[ (#GET{erreurs}|oui)erreur]">
-                       <label><:crayons:label_exec_autorise:></label>
-                       [<span class='erreur_message'>(#GET{erreurs})</span>]
-                       <p class='explication'><:crayons:explication_exec_autorise:></p>
-                       <input type="text" name="exec_autorise" class="text"  id='exec_autorise' value="[(#ENV{exec_autorise}|attribut_html)]" />
-               </li>
-       </ul>
-</li>
-
-
-<li class="fieldset fieldset_crayons_upload experimental">
-       <h3 class="legend"><:crayons:legend_documents:></h3>
-       <ul>
-               <li class="editer editer_reduire_logo[ (#GET{erreurs}|oui)erreur]">
-                       <label><:crayons:info_experimental:></label>
-                       [<span class='erreur_message'>(#GET{erreurs})</span>]
-                       <div class="choix">
-                               <input type="checkbox" name="upload" class="checkbox"  value='on' id='upload'[ (#ENV{upload}|oui)checked="checked"] />
-                               <label for='upload'><:crayons:label_upload_document:></label>
-                       </div>
-               </li>
-       </ul>
-</li>
-
-
-</ul>
-<p class="boutons">
-       <input type="submit" name="_cfg_ok" value="<:bouton_enregistrer:>" class="submit" />
-</p>
-</div>
-</form>
-</div>
diff --git a/www/plugins/crayons/images/annuler-16.png b/www/plugins/crayons/images/annuler-16.png
deleted file mode 100644 (file)
index fd4c41a..0000000
Binary files a/www/plugins/crayons/images/annuler-16.png and /dev/null differ
diff --git a/www/plugins/crayons/images/changed.png b/www/plugins/crayons/images/changed.png
deleted file mode 100644 (file)
index 12829fa..0000000
Binary files a/www/plugins/crayons/images/changed.png and /dev/null differ
diff --git a/www/plugins/crayons/images/crayon-128.png b/www/plugins/crayons/images/crayon-128.png
deleted file mode 100644 (file)
index 51d52ee..0000000
Binary files a/www/plugins/crayons/images/crayon-128.png and /dev/null differ
diff --git a/www/plugins/crayons/images/crayon-24.png b/www/plugins/crayons/images/crayon-24.png
deleted file mode 100644 (file)
index 4370da9..0000000
Binary files a/www/plugins/crayons/images/crayon-24.png and /dev/null differ
diff --git a/www/plugins/crayons/images/crayon-32.png b/www/plugins/crayons/images/crayon-32.png
deleted file mode 100644 (file)
index ef17876..0000000
Binary files a/www/plugins/crayons/images/crayon-32.png and /dev/null differ
diff --git a/www/plugins/crayons/images/crayon.png b/www/plugins/crayons/images/crayon.png
deleted file mode 100644 (file)
index 74d9c22..0000000
Binary files a/www/plugins/crayons/images/crayon.png and /dev/null differ
diff --git a/www/plugins/crayons/images/crayon20.png b/www/plugins/crayons/images/crayon20.png
deleted file mode 100644 (file)
index c8e3851..0000000
Binary files a/www/plugins/crayons/images/crayon20.png and /dev/null differ
diff --git a/www/plugins/crayons/images/edit.png b/www/plugins/crayons/images/edit.png
deleted file mode 100644 (file)
index aa0c5d6..0000000
Binary files a/www/plugins/crayons/images/edit.png and /dev/null differ
diff --git a/www/plugins/crayons/images/ok-16.png b/www/plugins/crayons/images/ok-16.png
deleted file mode 100755 (executable)
index c277e6b..0000000
Binary files a/www/plugins/crayons/images/ok-16.png and /dev/null differ
diff --git a/www/plugins/crayons/images/pencil.png b/www/plugins/crayons/images/pencil.png
deleted file mode 100644 (file)
index 8be4812..0000000
Binary files a/www/plugins/crayons/images/pencil.png and /dev/null differ
diff --git a/www/plugins/crayons/images/resizer.png b/www/plugins/crayons/images/resizer.png
deleted file mode 100644 (file)
index 5f42c4f..0000000
Binary files a/www/plugins/crayons/images/resizer.png and /dev/null differ
diff --git a/www/plugins/crayons/images/searching.gif b/www/plugins/crayons/images/searching.gif
deleted file mode 100644 (file)
index 01d48f3..0000000
Binary files a/www/plugins/crayons/images/searching.gif and /dev/null differ
diff --git a/www/plugins/crayons/inc/compat_crayons.php b/www/plugins/crayons/inc/compat_crayons.php
deleted file mode 100644 (file)
index db6456c..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-## ceci n'est pas l'original mais la copie pour crayons
-
-// Module de compatibilite pour les plugins qui veulent passer en 1.9.3
-// tout en restant compatibles avec 1.9.2 voire 1.9.1 : il permet de faire
-// tourner sur ces versions du code prevu pour 1.9.3
-
-// C'est l'inverse de vieilles_defs (lequel vise a permettre a du code
-// fait pour 1.9.2 de tourner sur 1.9.3)
-
-// Ce module doit etre appele par le plugin ("nouveau code") de la
-// maniere suivante :
-/*
-
-// Si SPIP est vieux, charger les fonctions de compat
-if ($GLOBALS['spip_version_code'] < '1.93'
-AND $f = charger_fonction('compat', 'inc'))
-       $f();
-
-qui charge toutes les defs de compat connues
-
-ou plus precis :
-
-// Si SPIP est vieux, charger les fonctions de compat
-if ($GLOBALS['spip_version_code'] < '1.93'
-AND $f = charger_fonction('compat', 'inc'))
-       $f('sql_fetch');
-
-ou encore :
-
-// Si SPIP est vieux, charger les fonctions de compat
-if ($GLOBALS['spip_version_code'] < '1.93'
-AND $f = charger_fonction('compat', 'inc'))
-       $f(array('sql_fetch', '_q'));
-
-
-*/
-
-// En termes de distribution ce fichier PEUT etre recopie dans chaque plugin
-// qui desire en avoir une version autonome (voire forkee), A CONDITION DE
-// RENOMMER le fichier et ses deux fonctions ; c'est un peu lourd a maintenir
-// mais c'est le prix a payer pour l'independance des plugins entre eux :-(
-
-// la version commune a tous est developpee sur
-// svn://zone.spip.org/spip-zone/_dev_/compat/
-
-
-function inc_compat_crayons_dist($quoi = null) {
-       if (!function_exists($f = 'compat_crayons_defs')) {
-               $f .= '_dist';
-       }
-       $defs = $f();
-
-       if (is_string($quoi)) {
-               $quoi = array($quoi);
-       } elseif (is_null($quoi)) {
-               $quoi = array_keys($defs);
-       }
-
-       foreach ($quoi as $d) {
-               if (!function_exists($d) and isset($defs[$d])) {
-                       eval("function $d". $defs[$d]);
-               }
-       }
-}
-
-function compat_crayons_defs_dist() {
-       $defs = array();
-
-       // http://trac.rezo.net/trac/spip/changeset/9919
-       if ($GLOBALS['spip_version_code'] < '1.9259') {
-               $defs['sql_fetch'] = '($res, $serveur=\'\') {
-                       return spip_fetch_array($res);
-               }';
-       }
-
-       $defs['table_objet_sql'] = '($type) {
-               global $table_des_tables;
-               $nom = table_objet($type);
-               include_spip(\'public/interfaces\');
-               if (isset($table_des_tables[$nom])) {
-                       $t = $table_des_tables[$nom];
-                       $nom = \'spip_\' . $t;
-               }
-               return $nom ;
-       }';
-
-       // Contourner un bug du plugin CFG
-       include_spip('base/abstract_sql');
-
-       return $defs;
-}
diff --git a/www/plugins/crayons/inc/crayons-json.php b/www/plugins/crayons/inc/crayons-json.php
deleted file mode 100644 (file)
index 93a30b3..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// Les fonctions de toggg pour faire du JSON
-
-/**
- * Transform a variable into its javascript equivalent (recursive)
- *
- * @access private
- * @param mixed the variable
- * @return string|boolean
- *     - string : js script
- *     - false if error
- */
-function crayons_var2js($var) {
-       $asso = false;
-       switch (true) {
-               case is_null($var):
-                       return 'null';
-               case is_string($var):
-                       return '"' .addcslashes($var, "\"\\\n\r\t/") . '"';
-               case is_bool($var):
-                       return $var ? 'true' : 'false';
-               case is_scalar($var):
-                       return (string)$var;
-               case is_object($var):
-                       $var = get_object_vars($var);
-                       $asso = true;
-               case is_array($var):
-                       $keys = array_keys($var);
-                       $ikey = count($keys);
-                       while (!$asso && $ikey--) {
-                               $asso = $ikey !== $keys[$ikey];
-                       }
-                       $sep = '';
-                       if ($asso) {
-                               $ret = '{';
-                               foreach ($var as $key => $elt) {
-                                       $ret .= $sep . '"' . $key . '":' . crayons_var2js($elt);
-                                       $sep = ',';
-                               }
-                               return $ret .'}';
-                       } else {
-                               $ret = '[';
-                               foreach ($var as $elt) {
-                                       $ret .= $sep . crayons_var2js($elt);
-                                       $sep = ',';
-                               }
-                               return $ret .']';
-                       }
-       }
-       return false;
-}
-
-// Un json_encode qui marche en iso (la spec JSON exige utf-8)
-function crayons_json_encode($v) {
-       if ($GLOBALS['meta']['charset'] == 'utf-8' and function_exists('json_encode')) {
-               return json_encode($v);
-       }
-
-       $v = crayons_var2js($v);
-
-       if ($GLOBALS['meta']['charset'] != 'utf-8') {
-               include_spip('inc/charsets');
-               $v = charset2unicode($v);
-       }
-
-       return $v;
-}
-
-// http://doc.spip.org/@json_export
-function crayons_json_export($var) {
-       return crayons_json_encode($var);
-
-/// Il semble que ce hack n'ait plus lieu d'etre avec jquery 1.5
-/*
-       // flag indiquant qu'on est en iframe et qu'il faut proteger nos
-       // donnees dans un <textarea> ; attention $_FILES a ete vide par array_pop
-       if (defined('FILE_UPLOAD'))
-               return "<textarea>".htmlspecialchars($var)."</textarea>";
-       else
-               return $var;
-*/
-}
diff --git a/www/plugins/crayons/inc/crayons.php b/www/plugins/crayons/inc/crayons.php
deleted file mode 100644 (file)
index 7bcf64d..0000000
+++ /dev/null
@@ -1,720 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-define('_PREG_CRAYON', ',crayon\b[^<>\'"]+?\b((\w+)-(\w+)-(\w+(?:-\w+)*))\b,');
-
-// Compatibilite pour 1.92 : on a besoin de sql_fetch et table_objet_sql
-if ($GLOBALS['spip_version_code'] < '1.93' and $f = charger_fonction('compat_crayons', 'inc')) {
-       $f();
-}
-
-// Autoriser les crayons sur les tables non SPIP ?
-// Par defaut : oui (pour les admins complets, si autoriser_defaut_dist()) ;
-// mettre a false en cas de mutualisation par prefixe de table,
-// sinon on ne peut pas garantir que les sites sont hermetiques
-if (!defined('_CRAYONS_TABLES_EXTERNES')) {
-       define('_CRAYONS_TABLES_EXTERNES', true);
-}
-
-// Autorisations non prevues par le core
-include_spip('inc/autoriser');
-
-include_spip('inc/crayons-json');
-
-if (!function_exists('autoriser_meta_modifier_dist')) {
-/**
- * Autorisation d'éditer les configurations dans spip_meta
- *
- * Les admins complets OK pour certains champs,
- * Sinon, il faut être webmestre
- *
- * @note
- *  Attention sur les SPIP < 11515 (avant 04/2008) inc/autoriser
- *  passe seulement intval($id) alors qu'ici la cle est une chaine...
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_meta_modifier_dist($faire, $type, $id, $qui, $opt) {
-       // Certaines cles de configuration sont echapées ici (cf #EDIT_CONFIG{demo/truc})
-       // $id = str_replace('__', '/', $id);
-       if (in_array($id, array('nom_site', 'slogan_site', 'descriptif_site', 'email_webmaster'))) {
-               return autoriser('configurer', null, null, $qui);
-       } else {
-               return autoriser('webmestre', null, null, $qui);
-       }
-}
-}
-
-// table spip_messages, la c'est tout simplement non (peut mieux faire,
-// mais c'est a voir dans le core/organiseur ou dans autorite)
-if (defined('_DIR_PLUGIN_ORGANISEUR')) {
-       include_spip('organiseur_autoriser');
-}
-
-if (!function_exists('autoriser_message_modifier_dist')) {
-       function autoriser_message_modifier_dist($faire, $type, $id, $qui, $opt) {
-               return false;
-       }
-}
-//compat 192 documents
-if ($GLOBALS['spip_version_code'] < '1.93') {
-       if (!function_exists('get_spip_doc')) {
-               function get_spip_doc($fichier) {
-                       // fichier distant
-                       if (preg_match(',^\w+://,', $fichier)) {
-                               return $fichier;
-                       }
-                       // gestion d'erreurs, fichier=''
-                       if (!strlen($fichier)) {
-                               return false;
-                       }
-
-                       // fichier normal
-                       return (strpos($fichier, _DIR_IMG) === false) ? _DIR_IMG . $fichier : $fichier;
-               }
-       }
-}
-
-// Autoriser l'usage des crayons ?
-function autoriser_crayonner_dist($faire, $type, $id, $qui, $opt) {
-       // Le type pouvant etre une table, verifier les autoriser('modifier')
-       // correspondant ; ils demandent le nom de l'objet: spip_articles => article
-       // ex: spip_articles => 'article'
-       $type = preg_replace(',^spip_(.*?)s?$,', '\1', $type);
-       if (strlen($GLOBALS['table_prefix'])) {
-               $type = preg_replace(',^'.$GLOBALS['table_prefix'].'_(.*?)s?$,', '\1', $type);
-       }
-
-       // Tables non SPIP ? Si elles sont interdites il faut regarder
-       // quelle table on appelle, et verifier si elle est "interne"
-       if (!_CRAYONS_TABLES_EXTERNES) {
-               include_spip('base/serial');
-               include_spip('base/auxiliaires');
-               include_spip('public/parametrer');
-               if (!isset($GLOBALS['tables_principales']['spip_'.table_objet($type)])
-                       and !isset($GLOBALS['tables_auxiliaires']['spip_'.table_objet($type)])) {
-                       return false;
-               }
-       }
-
-       // Traduire le modele en liste de champs
-       if (isset($opt['modele'])) {
-               $opt['champ'] = $opt['modele'];
-       }
-
-       // Pour un auteur, si le champ est statut ou email, signaler l'option
-       // ad hoc (cf. inc/autoriser)
-       if ($type == 'auteur'
-               and in_array($opt['champ'], array('statut', 'email'))) {
-               $opt[$opt['champ']] = true;
-       }
-
-       return (
-                autoriser('modifier', $type, $id, $qui, $opt)
-       );
-}
-
-// Si un logo est demande, on renvoie la date dudit logo (permettra de gerer
-// un "modifie par ailleurs" si la date a change, rien de plus)
-function valeur_champ_logo($table, $id, $champ) {
-       $chercher_logo = charger_fonction('chercher_logo', 'inc');
-       $on = $chercher_logo($id, id_table_objet($table), 'on');
-       return $on ? filemtime($on[0]) : false;
-}
-
-// Idem : si un doc est demande, on renvoie la date du doc
-function valeur_champ_document($table, $id, $champ) {
-       $s = spip_query('SELECT date FROM spip_documents WHERE id_document=' . _q($id));
-       if ($t = sql_fetch($s)) {
-               return $t['date'];
-       }
-}
-
-function valeur_champ_vignette($table, $id, $champ) {
-       $vignette = sql_getfetsel('id_vignette', 'spip_documents', 'id_document=' . intval($id));
-       if (is_numeric($vignette) && ($vignette > 0)) {
-               $date = sql_getfetsel('date', 'spip_documents', 'id_document=' . intval($vignette));
-       }
-       return $date ? $date : false;
-}
-// cette fonction de revision recoit le fichier upload a passer en logo
-// en reference : le nom du widget, pour aller chercher d'autres donnees
-// (ex: supprimer)
-function logo_revision($id, $file, $type, $ref) {
-       $chercher_logo = charger_fonction('chercher_logo', 'inc');
-       $_id_objet = id_table_objet($type);
-
-       // Chargement d'un nouveau logo ?
-       if ($file['logo']) {
-               define('FILE_UPLOAD', true); // message pour crayons_json_export :(
-
-               if (include_spip('action/editer_logo')
-                       and function_exists('logo_modifier')) {
-                       logo_modifier($type, $id, 'on', $file['logo']);
-               } else {
-                       // compat SPIP < 3.1
-                       // supprimer l'ancien logo
-                       $on = $chercher_logo($id, $_id_objet, 'on');
-                       if ($on) {
-                               @unlink($on[0]);
-                       }
-
-                       // ajouter le nouveau
-                       include_spip('action/iconifier');
-                       action_spip_image_ajouter_dist(type_du_logo($_id_objet) . 'on' . $id, false, false); // beurk
-               }
-       } else {
-               // Suppression du logo ?
-               if ($wid = array_pop($ref)
-                       and $_POST['content_'.$wid.'_logo_supprimer'] == 'on') {
-                       if (include_spip('action/editer_logo')
-                               and function_exists('logo_supprimer')) {
-                               logo_supprimer($type, $id, 'on');
-                       } else {
-                               if ($on = $chercher_logo($id, $_id_objet, 'on')) {
-                                       @unlink($on[0]);
-                               }
-                       }
-               }
-       }
-
-       // Reduire le logo ?
-       if (is_array($cfg = @unserialize($GLOBALS['meta']['crayons']))
-               and $max = intval($cfg['reduire_logo'])) {
-               $on = $chercher_logo($id, $_id_objet, 'on');
-               include_spip('inc/filtres');
-               @copy($on[0], $temp = _DIR_VAR . 'tmp' . rand(0, 999) . '.' . $on[3]);
-               $img1 = filtrer('image_reduire', $temp, $max);
-               $img2 = preg_replace(',[?].*,', '', extraire_attribut($img1, 'src'));
-               if (@file_exists($img2)
-                       and $img2 !=  $temp) {
-                       if (include_spip('action/editer_logo')
-                               and function_exists('logo_modifier')) {
-                               logo_modifier($type, $id, 'on', $img2);
-                       } else {
-                               @unlink($on[0]);
-                               $dest = $on[1].$on[2].'.'
-                                       .preg_replace(',^.*\.(gif|jpg|png)$,', '\1', $img2);
-                               @rename($img2, $dest);
-                       }
-               }
-               @unlink($temp);
-       }
-
-       return true;
-}
-
-
-// cette fonction de revision recoit le fichier upload a passer en document
-function document_fichier_revision($id, $data, $type, $ref) {
-
-       $s = spip_query('SELECT * FROM spip_documents WHERE id_document=' . intval($id));
-       if (!$t = sql_fetch($s)) {
-               return false;
-       }
-
-       /*
-       // Envoi d'une URL de document distant ?
-       // TODO: verifier l'extension distante, sinon tout explose
-       if ($data['fichier']
-       AND preg_match(',^(https?|ftp)://.+,', $data['fichier'])) {
-               include_spip('inc/modifier');
-               modifier_contenu('document', $id,
-                       array('champs' => array('fichier', 'distant')),
-                       array('fichier' => $data['fichier'], 'distant' => 'oui')
-               );
-               return true;
-       }
-       else
-       */
-
-       // Chargement d'un nouveau doc ?
-       if ($data['document']) {
-               $arg = $data['document'];
-               /**
-                * Méthode >= SPIP 3.0
-                * ou SPIP 2.x + Mediathèque
-                */
-               if ($ajouter_documents = charger_fonction('ajouter_documents', 'action', true)) {
-                       $actifs = $ajouter_documents($id, array($arg), '', 0, $t['mode']);
-                       $x = reset($actifs);
-                       if (is_numeric($x)) {
-                               return true;
-                       } else {
-                               return false;
-                       }
-               } elseif ($ajouter_documents = charger_fonction('ajouter_documents', 'inc', true)) {
-                       /**
-                        * Méthode SPIP < 3.0
-                        */
-                       check_upload_error($arg['error']);
-                       $x = $ajouter_documents($arg['tmp_name'], $arg['name'],
-                                       'article', 0, 'document', null, $actifs);
-                       // $actifs contient l'id_document nouvellement cree
-                       // on recopie les donnees interessantes dans l'ancien
-                        $extension = ', extension ';
-                       //compat 192
-                       if ($GLOBALS['spip_version_code'] < '1.93') {
-                               $extension = '';
-                       }
-
-                       if ($id_new = array_pop($actifs)
-                               and $s = spip_query("SELECT fichier, taille, largeur, hauteur $extension, distant FROM spip_documents
-                               WHERE id_document="._q($id_new))
-                               and $new = sql_fetch($s)) {
-                               define('FILE_UPLOAD', true); // message pour crayons_json_export :(
-
-                               // Une vignette doit rester une image
-                               if ($t['mode'] == 'vignette'
-                                       and !in_array($new['extension'], array('jpg', 'gif', 'png'))) {
-                                       return false;
-                               }
-
-                               // Maintenant on est bon, on recopie les nouvelles donnees
-                               // dans l'ancienne ligne spip_documents
-                               include_spip('inc/modifier');
-                               modifier_contenu(
-                                       'document',
-                                       $id,
-                                       # 'champs' inutile a partir de SPIP 11348
-                                       array('champs' => array_keys($new)),
-                                       $new
-                               );
-
-                               // supprimer l'ancien document (sauf s'il etait distant)
-                               if ($t['distant'] != 'oui'
-                                       and file_exists(get_spip_doc($t['fichier']))) {
-                                       supprimer_fichier(get_spip_doc($t['fichier']));
-                               }
-
-                               // Effacer la ligne temporaire de spip_document
-                               spip_query('DELETE FROM spip_documents WHERE id_document='.intval($id_new));
-
-                               // oublier id_document temporaire (ca marche chez moi, sinon bof)
-                               spip_query('ALTER TABLE spip_documents AUTO_INCREMENT='.intval($id_new));
-
-                               return true;
-                       }
-               }
-       }
-}
-
-// cette fonction de revision soit supprime la vignette d'un document,
-// soit recoit le fichier upload a passer ou remplacer la vignette du document
-function vignette_revision($id, $data, $type, $ref) {
-       $s = sql_fetsel('id_document,id_vignette', 'spip_documents', 'id_document = '.intval($id));
-       if (!is_array($s)) {
-               return false;
-       }
-
-       include_spip('inc/modifier');
-       include_spip('inc/documents');
-       include_spip('action/editer_document');//pour revision_document
-       // Chargement d'un nouveau doc ?
-       if ($data['vignette']) {
-               define('FILE_UPLOAD', true);
-               if (is_numeric($s['id_vignette']) and ($s['id_vignette'] > 0)) {
-                       spip_log('suppression de la vignette');
-                       // Suppression du document
-                       $vignette = sql_getfetsel('fichier', 'spip_documents', 'id_document='.intval($s['id_vignette']));
-                       if (@file_exists($f = get_spip_doc($vignette))) {
-                               spip_log("efface $f");
-                               supprimer_fichier($f);
-                       }
-                       sql_delete('spip_documents', 'id_document='.intval($s['id_vignette']));
-                       sql_delete('spip_documents_liens', 'id_document='.intval($s['id_vignette']));
-
-                       pipeline(
-                               'post_edition',
-                               array(
-                                       'args' => array(
-                                               'operation' => 'supprimer_document',
-                                               'table' => 'spip_documents',
-                                               'id_objet' => $s['id_vignette']
-                                       ),
-                                       'data' => null
-                               )
-                       );
-                       $id_vignette = 0;
-               }
-
-               $arg = $data['vignette'];
-               check_upload_error($arg['error']);
-               // Ajout du document comme vignette
-
-               /**
-                * Méthode >= SPIP 3.0
-                * ou SPIP 2.x + Mediatheque
-                */
-               if ($ajouter_documents = charger_fonction('ajouter_documents', 'action', true)) {
-                       $x = $ajouter_documents(null,array($arg),'', 0, 'vignette');
-                       $vignette = reset($x);
-                       if (intval($vignette)) {
-                               document_modifier($id, array('id_vignette'=>$vignette));
-                       } elseif ($id_vignette) {
-                               document_modifier($id, array('id_vignette'=>$id_vignette));
-                       }
-               } elseif ($ajouter_documents = charger_fonction('ajouter_documents', 'inc', true)) {
-                       /**
-                        * Méthode < SPIP 3.0
-                        */
-                       // On remet l'id_vignette a 0 si on l'a supprimé
-                       if ($id_vignette) {
-                               revision_document($s['id_document'], array('id_vignette' => 0));
-                       }
-                       $x = $ajouter_documents($arg['tmp_name'], $arg['name'],'','', 'vignette', $id, $actifs);
-               }
-       } elseif ($wid = array_pop($ref)
-               and $_POST['content_'.$wid.'_vignette_supprimer'] == 'on') {
-               if (is_numeric($s['id_vignette']) and ($s['id_vignette']>0)) {
-                       // Suppression du document
-                       $vignette = sql_getfetsel('fichier', 'spip_documents', 'id_document='.intval($s['id_vignette']));
-                       if (@file_exists($f = get_spip_doc($vignette))) {
-                               spip_log("efface $f");
-                               supprimer_fichier($f);
-                       }
-                       sql_delete('spip_documents', 'id_document='.intval($s['id_vignette']));
-                       sql_delete('spip_documents_liens', 'id_document = ' . intval($s['id_vignette']));
-
-                       pipeline(
-                               'post_edition',
-                               array(
-                                       'args' => array(
-                                               'operation' => 'supprimer_document',
-                                               'table' => 'spip_documents',
-                                               'id_objet' => $s['id_vignette']
-                                       ),
-                                       'data' => null
-                               )
-                       );
-
-                       // On remet l'id_vignette a 0
-                       revision_document($s['id_document'], array('id_vignette'=>0));
-               }
-       }
-       return true;
-}
-
-
-function colonne_table($type, $col) {
-       list($distant,$table) = distant_table($type);
-       $nom_table = '';
-       if (!(($tabref = &crayons_get_table($table, $nom_table))
-               && isset($tabref['field'][$col])
-               && ($brut = $tabref['field'][$col]))) {
-                       return false;
-       }
-       $ana = explode(' ', $brut);
-       $sta = 0;
-       $sep = '';
-       $ret = array('brut' => $brut,
-               'type' => '', 'notnull' => false, 'long' => 0, 'def' => '');
-       foreach ($ana as $mot) {
-               switch ($sta) {
-                       case 0:
-                               $ret['type'] = ($mot = strtolower($mot));
-                               continue;
-                       case 1:
-                               if ($mot[strlen($mot) - 1] == ')') {
-                                       $pos = strpos($mot, '(');
-                                       $ret['type'] = strtolower(substr($mot, 0, $pos++));
-                                       $vir = explode(',', substr($mot, $pos, -1));
-                                       if ($ret['type'] == 'enum') {
-                                               $ret['enum'] = $vir;
-                                       } elseif (count($vir) > 1) {
-                                               $ret['long'] = $vir;
-                                       } else {
-                                               $ret['long'] = $vir[0];
-                                       }
-                                       $sta = 1;
-                                       continue;
-                               }
-                               if (!$sta) {
-                                       $sta = 1;
-                                       continue;
-                               }
-                               continue;
-                       case 2:
-                               switch (strtolower($mot)) {
-                                       case 'not':
-                                               $sta = 3;
-                                               continue;
-                                       case 'default':
-                                               $sta = 4;
-                                               continue;
-                               }
-                               continue;
-                       case 3:
-                               $ret['notnull'] = strtolower($mot) == 'null';
-                               $sta = 2;
-                               continue;
-                       case 4:
-                               $df1 = strpos('"\'', $mot[0]) !== false? $mot[0] : '';
-                               $sta = 5;
-                               continue;
-                       case 5:
-                               $ret['def'] .= $sep . $mot;
-                               if (!$df1) {
-                                       $sta = 2;
-                                       continue;
-                               }
-                               if ($df1 == $mot[strlen($mot) - 1]) {
-                                       $ret['def'] = substr($ret['def'], 1, -1);
-                                       $sta = 2;
-                               }
-                               $sep = ' ';
-                               continue;
-               }
-       }
-       return $ret;
-}
-
-
-/**
- * Obtient le nom de la table ainsi que sa ou ses clés primaires
- *
- * @param string $type
- *     Table sur laquelle s'applique le crayon.
- *     Ce type peut contenir le nom d'un connecteur distant tel que `{connect}__{table}`
- *
- * @return array|bool
- *     - false si on ne trouve pas de table ou de table ayant de clé primaire
- *     - liste :
- *     - - nom de la table sql
- *     - - tableau des noms de clés primaires
-**/
-function crayons_get_table_name_and_primary($type) {
-       static $types = array();
-       if (isset($types[$type])) {
-               return $types[$type];
-       }
-
-       $nom_table = '';
-       if ($tabref = &crayons_get_table($type, $nom_table)
-               and ($tabid = explode(',', $tabref['key']['PRIMARY KEY']))) {
-               return $types[$type] = array($nom_table, $tabid);
-       }
-       spip_log('crayons: table ' . $type . ' inconnue');
-       return $types[$type] = false;
-}
-
-
-function table_where($type, $id, $where_en_tableau = false) {
-       if (!$infos = crayons_get_table_name_and_primary($type)) {
-               return array(false, false);
-       }
-
-       list($nom_table, $tabid) = $infos;
-
-       if (is_scalar($id)) {
-               $id = explode('-', $id);
-       }
-       // sortie tableau pour sql_updateq
-       if ($where_en_tableau) {
-               $where = array();
-               foreach ($id as $idcol => $idval) {
-                       $where[] = '`' . (is_int($idcol) ? trim($tabid[$idcol]) : $idcol) . '`=' . sql_quote($idval);
-               }
-       // sinon sortie texte pour sql_query
-       } else {
-               $where = $and = '';
-               foreach ($id as $idcol => $idval) {
-                       $where .= $and . '`' . (is_int($idcol) ? trim($tabid[$idcol]) : $idcol) . '`=' . _q($idval);
-                       $and = ' AND ';
-               }
-       }
-       return array($nom_table, $where);
-}
-//     var_dump(colonne_table('forum', 'id_syndic')); die();
-
-function valeur_colonne_table_dist($type, $col, $id) {
-
-       // Table introuvable ou sans clé primaire
-       if (!$infos = crayons_get_table_name_and_primary($type)) {
-               return false;
-       }
-       $table = reset($infos);
-
-       $r = array();
-
-       // valeurs non SQL
-       foreach ($col as $champ) {
-               if (function_exists($f = 'valeur_champ_'.$table.'_'.$champ)
-                       or function_exists($f = 'valeur_champ_'.$champ)) {
-                       $r[$champ] = $f($table, $id, $champ);
-                       $col = array_diff($col, array($champ));
-               }
-       }
-
-       // valeurs SQL
-       if (count($col)) {
-               list($distant, $table)   = distant_table($type);
-               list($nom_table, $where) = table_where($type, $id);
-
-               if ($s = spip_query(
-                       'SELECT `' . implode($col, '`, `') .
-                       '` FROM ' . $nom_table . ' WHERE ' . $where,
-                       $distant
-               ) and $t = sql_fetch($s)) {
-                               $r = array_merge($r, $t);
-               }
-       }
-
-       return $r;
-}
-
-/**
- * Extrait la valeur d'une ou plusieurs colonnes d'une table
- *
- * @param string $table
- *   Type d'objet de la table (article)
- * @param string|array $col
- *   Nom de la ou des colonnes (ps)
- * @param string $id
- *   Identifiant de l'objet
- * @return array
- *   Couples Nom de la colonne => Contenu de la colonne
-**/
-function valeur_colonne_table($table, $col, $id) {
-       if (!is_array($col)) {
-               $col = array($col);
-       }
-
-       if (function_exists($f = $table . '_valeur_colonne_table_dist')
-               or function_exists($f = $table.'_valeur_colonne_table')
-               or $f = 'valeur_colonne_table_dist') {
-               return $f($table, $col, $id);
-       }
-}
-
-/**
- * Extrait la valeur d'une configuration en meta
- *
- * Pour ces données, il n'y a toujours qu'une colonne (valeur),
- * mais on gère l'enregistrement et la lecture via lire_config ou ecrire_config
- * dès que l'on demande des sous parties d'une configuration.
- *
- * On ne retourne alors ici dans 'valeur' que la sous-partie demandée si
- * c'est le cas.
- *
- * @param string $table
- *   Nom de la table (meta)
- * @param array $col
- *   Nom des colonnes (valeur)
- * @param string $id
- *   Nom ou clé de configuration (descriptif_site ou demo__truc pour demo/truc)
- * @return array
- *   Couple valeur => Contenu de la configuration
-**/
-function meta_valeur_colonne_table_dist($table, $col, $id) {
-       // Certaines clés de configuration sont echapées ici (cf #EDIT_CONFIG{demo/truc})
-       $id = str_replace('__', '/', $id);
-
-       // Éviter de planter les vieux SPIP
-       if (false === strpos($id, '/')) {
-               $config = isset($GLOBALS['meta'][$id]) ? $GLOBALS['meta'][$id] : '';
-       // SPIP 3 ou Bonux 2 ou CFG
-       } else {
-               include_spip('inc/config');
-               $config =  lire_config($id, '');
-       }
-       return array('valeur' => $config);
-}
-
-
-function return_log($var) {
-       die(crayons_json_export(array('$erreur'=> var_export($var, true))));
-}
-
-function _U($texte, $params = array()) {
-       include_spip('inc/charsets');
-       return unicode2charset(html2unicode(_T($texte, $params)));
-}
-
-/**
- * Obtenir la configuration des crayons
- *
- * @note wdgcfg = widget config :-)
- *
- * @return array
- *     Couples : attribut => valeur
-**/
-function wdgcfg() {
-       $php = function_exists('crayons_config') ? crayons_config() : array();
-       include_spip('inc/meta');
-       lire_metas();
-       global $meta;
-       $metacrayons = empty($meta['crayons']) ? array() : unserialize($meta['crayons']);
-       $wdgcfg = array();
-       foreach (array(
-               'msgNoChange' => false,
-               'msgAbandon' => false,  /* etait: true */
-               'filet' => false,
-               'yellow_fade' => false,
-               'clickhide' => false /* etait: true */
-       ) as $cfgi => $def) {
-               $wdgcfg[$cfgi] = isset($php[$cfgi]) ? $php[$cfgi] :
-                       isset($metacrayons[$cfgi]) ? $metacrayons[$cfgi] : $def;
-       }
-       return $wdgcfg;
-}
-
-function &crayons_get_table($type, &$nom_table) {
-       list($distant,$table) = distant_table($type);
-       static $return = array();
-       static $noms = array();
-       if (!isset($return[$table])) {
-               $try = array(table_objet_sql($table), 'spip_'.table_objet($table), 'spip_' . $table . 's', $table . 's', 'spip_' . $table, $table);
-
-               // premiere possibilite (à partir de 1.9.3) : regarder directement la base
-               if (function_exists('sql_showtable')) {
-                       foreach ($try as $nom) {
-                               if ($q = sql_showtable($nom, !$distant, $distant)) {
-                                       $noms[$table] = $nom;
-                                       $return[$table] = $q;
-                                       break;
-                               }
-                       }
-               }
-
-               // seconde, une heuristique 1.9.2
-               if (!isset($return[$table])) {
-                       include_spip('base/serial');
-                       include_spip('base/auxiliaires');
-                       include_spip('public/parametrer');
-                       foreach (array('tables_principales', 'tables_auxiliaires') as $categ) {
-                               foreach ($try as $nom) {
-                                       if (isset($GLOBALS[$categ][$nom])) {
-                                               $noms[$table] = $nom;
-                                               $return[$table] = & $GLOBALS[$categ][$nom];
-                                               break 2;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       $nom_table = $noms[$table];
-       return $return[$table];
-}
-
-function distant_table($type) {
-       //separation $type en $distant $table
-       //separateur double underscore "__"
-       strstr($type, '__') ? list($distant,$table) = explode('__', $type) : list($distant, $table) = array(false, $type);
-       return array($distant,$table);
-}
diff --git a/www/plugins/crayons/js/crayons-fade.js b/www/plugins/crayons/js/crayons-fade.js
deleted file mode 100644 (file)
index 47f5b88..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-
-// Gestion du Yellow Fade (fonctionnalite optionnelle)
-function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
-       var delta = maxValue - minValue;
-       var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
-       return Math.ceil(stepp)
-};
-
-function doBGFade(elem,startRGB,endRGB,finalColor,steps,intervals,powr) {
-       if (elem.bgFadeInt) window.clearInterval(elem.bgFadeInt);
-       var actStep = 0;
-       elem.bgFadeInt = window.setInterval(
-               function() {
-                       elem.style.backgroundColor = "rgb("+
-                               easeInOut(startRGB[0],endRGB[0],steps,actStep,powr)+","+
-                               easeInOut(startRGB[1],endRGB[1],steps,actStep,powr)+","+
-                               easeInOut(startRGB[2],endRGB[2],steps,actStep,powr)+")";
-                       actStep++;
-                       if (actStep > steps) {
-                       elem.style.backgroundColor = finalColor;
-                       window.clearInterval(elem.bgFadeInt);
-                       }
-               }
-               ,intervals)
-};
-
-function findPos(obj) {
-       var curleft = curtop = 0;
-       if (obj.offsetParent) {
-               curleft = obj.offsetLeft;
-               curtop = obj.offsetTop;
-               while (obj = obj.offsetParent) {
-                       curleft += obj.offsetLeft;
-                       curtop += obj.offsetTop;
-               }
-       }
-       return [curleft,curtop];
-};
-
-// demarrage crayons-fade
-jQuery(document).ready(function() {
-       if (configCrayons.cfg.yellow_fade) {
-               // Activer le Yellow Fade pour les elements editables
-               jQuery("div.crayon").hover(function(){doBGFade(this,[255,255,180],[255,255,255],'transparent',40,20,4);}, function(){});
-       }
-
-       if (configCrayons.cfg.filet) {
-               // on rajoute une div supplémentaire qui se cale avec la div courante 
-               // C'est elle qui va s'afficher lors du hover
-               
-               // esthetique
-               jQuery('.crayon-icones img',this).css({
-                       'padding':'2px',
-                       'border':'2px solid #999',
-                       'border-left':'0',
-                       'background-color':'#FFF'
-               });
-                       
-               var test=0;
-               
-               jQuery('.crayon-autorise').each(
-                       function(){
-                               var contenu = jQuery(this).html();
-                               jQuery(this)
-                                       .css('height',this.offsetHeight + 'px')
-                                       .html('<div></div>');
-                               jQuery(this)
-                                       .find('div')
-                                               .html(contenu)
-                                               .css('position','absolute')
-                                               .css('width',this.offsetWidth + 'px');
-                               jQuery(this)
-                                       .prepend('<div class="survol"></div>')
-                                       .find('.survol')
-                                               .css('border','1px solid red')
-                                               .css('display','none')
-                                               .css('position','absolute')
-                                               .css('height',(this.offsetHeight - 2) + 'px')
-                                               .css('width',(this.offsetWidth - 2) + 'px');
-                               if (jQuery.browser.msie) {
-                           jQuery('#survol')
-                                               .css('width',this.offsetWidth + 'px')
-                                               .css('height',this.offsetHeight + 'px');
-                               }
-                       }
-               );
-
-               jQuery('.crayon-autorise').hover(
-                       function(){
-                               if (jQuery.browser.msie) jQuery(this).addClass('crayon-hover');
-                               jQuery('.survol', this).css('display','block');
-                       },
-                       function(){
-                               if (jQuery.browser.msie) jQuery(this).removeClass('crayon-hover');
-                               jQuery('.survol', this).css('display','none');
-                       }
-               );
-               
-       }
-
-});
diff --git a/www/plugins/crayons/js/crayons.js b/www/plugins/crayons/js/crayons.js
deleted file mode 100644 (file)
index 713b8ac..0000000
+++ /dev/null
@@ -1,585 +0,0 @@
-(function($){
-/*
- *     crayons.js (c) Fil, toggg, 2006-2013 -- licence GPL
- */
-
-// le prototype configuration de Crayons
-$.prototype.cfgCrayons = function (options) {
-       this.url_crayons_html = '?action=crayons_html';
-       this.img = {
-               'searching':{'txt':'En attente du serveur ...'},
-               'edit':{'txt':'Editer'},
-               'img-changed':{'txt':'Deja modifie'}
-       };
-       this.txt = {
-       };
-       for (opt in options) {
-               this[opt] = options[opt];
-       }
-};
-
-$.prototype.cfgCrayons.prototype.mkimg = function(what, extra) {
-       var txt = this.img[what] ? this.img[what].txt : this.img['crayon'].txt;
-       return '<em class="crayon-'+what+'" title="'+ txt + (extra ? extra : '') + '"></em>';
-};
-
-$.prototype.cfgCrayons.prototype.iconclick = function(c, type) {
-
-       // le + qui passe en prive pour editer tout si classe type--id
-       var link = c.match(/\b(\w+)--(\d+)\b/);
-       link = link ?
-               '<a href="ecrire/?exec=' + link[1] + 's_edit&id_' + link[1] + '=' + link[2] +
-               '">' + this.mkimg('edit', ' (' + link[1] + ' ' + link[2] + ')') + '</a>' : '';
-
-       // on recherche une class du type type-champ-id
-       // comme article-texte-10 pour le texte de l'article 10
-       // ou meta-valeur-meta
-       var cray =
-                               c.match(/\b\w+-(\w+)-\d(?:-\w+)+\b/)   // numeros_lien-type-2-3-article (table-champ-cles)
-                               || c.match(/\b\w+-(\w+)-\d+\b/)           // article-texte-10 (inclu dans le precedent, mais bon)
-                               || c.match(/\b\meta-valeur-(\w+)\b/)      // meta-valeur-xx
-                               ;
-
-       var boite = !cray ? '' : this.mkimg(type, ' (' + cray[1] + ')');
-
-       return "<span class='crayon-icones'><span>" + boite +
-                       this.mkimg('img-changed', cray ? ' (' + cray[1] + ')': '') +
-                       link +"</span></span>";
-};
-
-function entity2unicode(txt)
-{
-       var reg = txt.split(/&#(\d+);/i);
-       for (var i = 1; i < reg.length; i+=2) {
-               reg[i] = String.fromCharCode(parseInt(reg[i]));
-       }
-       return reg.join('');
-};
-
-function uniAlert(txt)
-{
-       alert(entity2unicode(txt));
-};
-
-function uniConfirm(txt)
-{
-       return confirm(entity2unicode(txt));
-};
-
-// donne le crayon d'un element
-$.fn.crayon = function(){
-       if (this.length)
-               return $(
-                       $.map(this, function(a){
-                               return '#'+($(a).find('.crayon-icones').attr('rel'));
-                       })
-                       .join(','));
-       else
-               return $([]);
-};
-
-// ouvre un crayon
-$.fn.opencrayon = function(evt, percent) {
-       if (evt && evt.stopPropagation) {
-               evt.stopPropagation();
-       }
-       return this
-       .each(function(){
-               // verifier que je suis un crayon
-               if (!$(this).is('.crayon'))
-                       return;
-
-               // voir si je dispose deja du crayon comme voisin
-               if ($(this).is('.crayon-has')) {
-                       $(this)
-                       .css('visibility','hidden')
-                       .crayon()
-                               .show();
-               }
-               // sinon charger le formulaire
-               else {
-                       // sauf si je suis deja en train de le charger (lock)
-                       if ($(this).find("em.crayon-searching").length) {
-                               return;
-                       }
-                       $(this)
-                       .find('>span.crayon-icones span')
-                       .append(configCrayons.mkimg('searching')); // icone d'attente
-                       var me=this;
-                       var offset = $(this).offset();
-                       var params = {
-                               'top': offset.top,
-                               'left': offset.left,
-                               'w': $(this).width(),
-                               'h': $(this).height(),
-                               'ww': (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth)),
-                               'wh': (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight)),
-                               'em': $(this).css('fontSize'), // Bug de jquery resolu : http://bugs.jquery.com/ticket/760
-                               'class': me.className,
-                               'color': $(this).css('color'),
-                               'font-size': $(this).css('fontSize'),
-                               'font-family': $(this).css('fontFamily'),
-                               'font-weight': $(this).css('fontWeight'),
-                               'line-height': $(this).css('lineHeight'),
-                               'min-height': $(this).css('lineHeight'),
-                               'text-align': $(this).css('textAlign'),
-                               'background-color': $(this).css('backgroundColor'),
-                               'self': configCrayons.self
-                       };
-                       if (me.type) params.type = me.type;
-                       if (params['background-color'] == 'transparent'
-                       || params['background-color'] == 'rgba(0, 0, 0, 0)') {
-                               $(me).parents()
-                               .each(function(){
-                                       var bg = $(this).css('backgroundColor');
-                                       if (bg != 'transparent'
-                                       && (params['background-color'] == 'transparent'
-                                       || params['background-color'] == 'rgba(0, 0, 0, 0)'))
-                                               params['background-color'] = bg;
-                               });
-                       }
-                       $.post(configCrayons.url_crayons_html,
-                               params,
-                               function (c) {
-                                       try {
-                                               c = $.parseJSON(c);
-                                       } catch(e) {
-                                               c = {'$erreur': 'erreur de communication :' + '  ' + e.message, '$html':''};
-                                       }
-                                       $(me)
-                                       .find("em.crayon-searching")
-                                               .remove();
-                                       if (c.$erreur) {
-                                               uniAlert(c.$erreur);
-                                               return false;
-                                       }
-                                       id_crayon++;
-
-                                       var position = 'absolute';
-                                       $(me).parents().each(function(){
-                                               if($(this).css("position") == "fixed")
-                                                       position = 'fixed';
-                                       });
-
-                                       $(me)
-                                       .css('visibility','hidden')
-                                       .addClass('crayon-has')
-                                       .find('>.crayon-icones')
-                                               .attr('rel','crayon_'+id_crayon);
-                                       // Detection IE sur sa capacite a gerer zoom :
-                                       // http://www.sitepoint.com/detect-css3-property-browser-support/
-                                       if (document.createElement("detect").style.zoom === "") {
-                                               $(me).css({'zoom':1});
-                                       }
-                                       var pos = $(me).offset();
-                                       $('<div class="crayon-html" id="crayon_'+id_crayon+'"></div>')
-                                       .css({
-                                               'position':position,
-                                               'top':pos['top']-1,
-                                               'left':pos['left']-1
-                                       })
-                                       .appendTo('body')
-                                       .html(c.$html);
-                                       $(me)
-                                       .activatecrayon(percent);
-                                       // Si le crayon a une taille mini qui le fait deborder
-                                       // a droite de l'ecran, recadrer vers la gauche
-                                       var diff = $('#crayon_'+id_crayon).offset().left + $('#crayon_'+id_crayon).width() - $(window).width();
-                                       if (diff>0) {
-                                                $('#crayon_'+id_crayon)
-                                                .css({'left': parseInt(pos['left'])-diff});
-                                       }
-                               }
-                       );
-               }
-       });
-};
-
-// annule le crayon ouvert (fonction destructive)
-$.fn.cancelcrayon = function() {
-       this
-               .filter('.crayon-has')
-               .css('visibility','visible')
-               .removeClass('crayon-has')
-               .removeClass('crayon-changed')
-       .crayon()
-               .remove();
-       return this;
-};
-
-// masque le crayon ouvert
-$.fn.hidecrayon = function() {
-       this
-       .filter('.crayon-has')
-       .css('visibility','visible')
-       .crayon()
-               .hide()
-               .removeClass('crayon-hover');
-       return this;
-};
-
-// active un crayon qui vient d'etre charge
-$.fn.activatecrayon = function(percent) {
-       var focus = false;
-       this
-       .crayon()
-       .click(function(e){
-               e.stopPropagation();
-       });
-       this
-       .each(function(){
-               var me = $(this);
-               var crayon = $(this).crayon();
-               crayon
-               .find('form')
-                       .append(
-                               $('<input type="hidden" name="self" />')
-                               .attr('value',configCrayons.self)
-                       )
-                       .ajaxForm({
-                       "dataType":"json",
-                       "error": function(d) {
-                               uniAlert('erreur de communication');
-                               crayon
-                               .empty()
-                               .append(
-                                       $('<div class="error">')
-                                       .html(d.responseText || d.error || 'erreur inconnue')
-                               )
-                               .css({
-                                       background: 'white',
-                                       color: 'black',
-                                       width: '480px',
-                                       border: 'red solid 2px',
-                                       padding: '10px'}
-                               );
-                       },
-                       "success": function(d) {
-                               // parfois le JSON n'est pas renvoye sous forme d'objet
-                               // mais d'une chaine encadree de <pre>...</pre>
-                               if (typeof d == "string") {
-                                       try {
-                                               d = $.parseJSON(d.replace(/^<pre>/,'').replace(/<[/]pre>$/,''));
-                                       } catch(e) {
-                                               d = {'$erreur': 'erreur de communication :' + '  ' + e.message, '$html':''};
-                                       }
-                               }
-                               me
-                               .find("em.crayon-searching")
-                                       .remove();
-
-                               //Remise a zero des warnings invalides (unwrap)
-                               crayon
-                               .find("span.crayon-invalide p")
-                                         .remove();
-                               crayon
-                               .find("span.crayon-invalide")
-                                         .each(function(){
-                                             $(this).replaceWith( this.childNodes );
-                                               }
-                                           );
-
-                               if(d.$invalides) {
-                                       for (invalide in d.$invalides) {
-                                               //Affichage des warnings invalides
-                                               d.$invalides[invalide]['retour']?retour=d.$invalides[invalide]['retour']:retour='';
-                                               d.$invalides[invalide]['msg']?msg=d.$invalides[invalide]['msg']:msg='';
-                                               crayon
-                                                   .find("*[name='content_"+invalide+"']")
-                                                       .wrap("<span class=\"crayon-invalide\"></span>")
-                                                   .parent()
-                                                   .append("<p>"
-                                                               + retour
-                                                               + " "
-                                                               + msg
-                                                               + "</p>"
-                                                       );
-                                               }
-
-                               }
-
-                               if (d.$erreur > '') {
-                                       if (d.$annuler) {
-                                               if (d.$erreur > ' ') {
-                                                       uniAlert(d.$erreur);
-                                               }
-                                               me
-                                               .cancelcrayon();
-                                       } else {
-                                                       uniAlert(d.$erreur+'\n'+configCrayons.txt.error);
-                                       }
-                               }
-
-                               if (d.erreur > '' || d.$invalides) {
-                                       crayon
-                                       .find('form')
-                                               .css('opacity', 1.0)
-                                               .find(".crayon-boutons,.resizehandle")
-                                                       .show()
-                                               .end()
-                                               .find('.crayon-searching')
-                                                       .remove();
-                                               return false;
-                               }
-                               // Desactive celui pour qui on vient de recevoir les nouvelles donnees
-                               $(me)
-                               .cancelcrayon();
-                               // Insere les donnees dans *tous* les elements ayant le meme code
-                               var tous = $(
-                                       '.crayon.crayon-autorise.' +
-                                               me[0].className.match(/crayon ([^ ]+)/)[1]
-                               )
-                               .html(
-                                       d[$('input.crayon-id', crayon).val()]
-                               )
-                               .iconecrayon();
-
-                               // Invalider des préchargements ajax
-                               if (typeof jQuery.spip == 'object' && typeof jQuery.spip.preloaded_urls == 'object') {
-                                       jQuery.spip.preloaded_urls = {};
-                               }
-
-                               // Declencher le onAjaxLoad normal de SPIP
-                               if (typeof jQuery.spip == 'object' && typeof jQuery.spip.triggerAjaxLoad == 'function') {
-                                       jQuery.spip.triggerAjaxLoad(tous.get());
-                               }
-                               // SPIP 2.x
-                               else if (typeof triggerAjaxLoad == 'function') {
-                                       triggerAjaxLoad(tous.get());
-                               }
-                       }})
-                       .bind('form-submit-validate',function(form,a, e, options, veto){
-                               if(!veto.veto)
-                               crayon
-                               .find('form')
-                                       .css('opacity', 0.5)
-                                       .after(configCrayons.mkimg('searching')) // icone d'attente
-                                       .find(".crayon-boutons,.resizehandle")
-                                               .hide();
-                       })
-                       // keyup pour les input et textarea ...
-                       .keyup(function(e){
-                               crayon
-                               .find(".crayon-boutons")
-                                       .show();
-                               me
-                               .addClass('crayon-changed');
-                               e.cancelBubble = true; // ne pas remonter l'evenement vers la page
-                       })
-                       // ... change pour les select : ici on submit direct, pourquoi pas
-                       .change(function(e){
-                               crayon
-                               .find(".crayon-boutons")
-                                       .show();
-                               me
-                               .addClass('crayon-changed');
-                               e.cancelBubble = true;
-                       })
-                       .keypress(function(e){
-                               e.cancelBubble = true;
-                       })
-                       // focus par defaut (crayons sans textarea/text, mais uniquement menus ou fichiers)
-                       .find('input:visible:not(:disabled):not([readonly]):first').focus().end()
-                       .find("textarea.crayon-active,input.crayon-active[type=text]")
-                               .each(function(n){
-                                       // focus pour commencer a taper son texte directement dans le champ 
-                                       // sur le premier textarea non readonly ni disabled
-                                       // on essaie de positionner la selection (la saisie) au niveau du clic
-                                       // ne pas le faire sur un input de [type=file]
-                                       if (n==0) {
-                                               if(!$(this).is(':disabled, [readonly]')){
-                                                       this.focus();
-                                                       focus = true;
-                                               }
-                                               // premiere approximation, en fonction de la hauteur du clic
-                                               var position = parseInt(percent * this.textLength);
-                                               this.selectionStart=position;
-                                               this.selectionEnd=position;
-                                       }else if(!focus && !$(this).is(':disabled, [readonly]'))
-                                               this.focus();
-                               })
-                       .end()
-                       .keydown(function(e){
-                               if(!e.charCode && e.keyCode == 119 /* F8, windows */) {
-                                               crayon
-                                               .find("form.formulaire_crayon")
-                                               .submit();
-                               }
-                               if (e.keyCode == 27) { /* esc */
-                                       me
-                                       .cancelcrayon();
-                               }
-                       })
-                       .keypress(function(e){
-                               // Clavier pour sauver
-                               if (
-                               (e.ctrlKey && (
-                                       /* ctrl-s ou ctrl-maj-S, firefox */
-                                       ((e.charCode||e.keyCode) == 115) || ((e.charCode||e.keyCode) == 83))
-                                       /* ctrl-s, safari */
-                                       || (e.charCode==19 && e.keyCode==19)
-                               ) ||
-                               (
-                                       e.shiftKey && (e.keyCode == 13) /* shift-return */
-                               )
-                               ) {
-                                       crayon
-                                       .find("form.formulaire_crayon")
-                                       .submit();
-                               }
-                               var maxh = this.className.match(/\bmaxheight(\d+)?\b/);
-                               if (maxh) {
-                                       maxh = maxh[1] ? parseInt(maxh[1]) : 200;
-                                       maxh = this.scrollHeight < maxh ? this.scrollHeight : maxh;
-                                       if (maxh > this.clientHeight) {
-                                               $(this).css('height', maxh + 'px');
-                                       }
-                               }
-                       })
-                       .find(".crayon-submit")
-                               .click(function(e){
-                                       e.stopPropagation();
-                                       $(this)
-                                       .parents("form:eq(0)")
-                                       .submit();
-                               })
-                       .end()
-                       .find(".crayon-cancel")
-                               .click(function(e){
-                                       e.stopPropagation();
-                                       me
-                                       .cancelcrayon();
-                               })
-                       .end()
-                       // decaler verticalement si la fenetre d'edition n'est pas visible
-                       .each(function(){
-                               var offset = $(this).offset();
-                               var hauteur = parseInt($(this).css('height'));
-                               var scrolltop = $(window).scrollTop();
-                               var h = $(window).height();
-                               if (offset['top'] - 5 <= scrolltop)
-                                       $(window).scrollTop(offset['top'] - 5);
-                               else if (offset['top'] + hauteur - h + 20 > scrolltop)
-                                       $(window).scrollTop(offset['top'] + hauteur - h + 30);
-                               // Si c'est textarea, on essaie de caler verticalement son contenu
-                               // et on lui ajoute un resizehandle
-                               $("textarea", this)
-                               .each(function(){
-                                       if (percent && this.scrollHeight > hauteur) {
-                                               this.scrollTop = this.scrollHeight * percent - hauteur;
-                                       }
-                               })
-                               .resizehandle()
-                                       // decaler les boutons qui suivent un resizer de 16px vers le haut
-                                       .next('.resizehandle')
-                                               .next('.crayon-boutons')
-                                               .addClass('resizehandle_boutons');
-                       })
-               .end();
-               // Declencher le onAjaxLoad normal de SPIP
-               // (apres donc le chargement de la page de saisie (controleur))
-               if (typeof jQuery.spip == 'object' && typeof jQuery.spip.triggerAjaxLoad == 'function') {
-                       jQuery.spip.triggerAjaxLoad(crayon.get());
-               }
-               // SPIP 2.x
-               else if (typeof triggerAjaxLoad == 'function') {
-                       triggerAjaxLoad(crayon.get());
-               }
-       });
-};
-
-// insere les icones et le type de crayon (optionnel) dans l'element
-$.fn.iconecrayon = function(){
-       return this.each(function() {
-               var ctype = this.className.match(/\b[^-]type_(\w+)\b/);
-               type = (ctype) ? ctype[1] : 'crayon';
-               if (ctype) this.type = type; // Affecte son type a l'objet crayon
-               $(this).prepend(configCrayons.iconclick(this.className, type))
-               .find('.crayon-' + type + ', .crayon-img-changed') // le crayon a clicker lui-meme et sa memoire
-                       .click(function(e){
-                               $(this).parents('.crayon:eq(0)').opencrayon(e);
-                       });
-               });
-};
-
-// initialise les crayons
-$.fn.initcrayon = function(){
-       var editme = function(e){
-               timeme=null;
-               $(this).opencrayon(e,
-                       // calcul du "percent" du click par rapport a la hauteur totale du div
-                       ((e.pageY ? e.pageY : e.clientY) - document.body.scrollTop - this.offsetTop)
-                       / this.clientHeight);
-       };
-       var timeme;
-       this
-       .addClass('crayon-autorise')
-       .dblclick(editme)
-       .bind("touchstart",function(e){var me=this;timeme=setTimeout(function(){editme.apply(me,[e]);},800);})
-       .bind("touchend",function(e){if (timeme) {clearTimeout(timeme);timeme=null;}})
-       .iconecrayon()
-       .hover( // :hover pour MSIE
-               function(){
-                       $(this)
-                       .addClass('crayon-hover')
-                       .find('>span.crayon-icones')
-                               .find('>span>em.crayon-' + (this.type||'crayon') + ',>span>em.crayon-edit')
-                                       .show();//'visibility','visible');
-               },function(){
-                       $(this)
-                       .removeClass('crayon-hover')
-                       .find('>span.crayon-icones')
-                               .find('>span>em.crayon-' + (this.type||'crayon') + ',>span>em.crayon-edit')
-                                       .hide();//('visibility','hidden');
-               }
-       );
-       return this;
-};
-
-// demarrage
-$.fn.crayonsstart = function() {
-       if (!configCrayons.droits) return;
-       id_crayon = 0; // global
-
-       // sortie, demander pour sauvegarde si oubli
-       if (configCrayons.txt.sauvegarder) {
-               $(window).unload(function(e) {
-                       var chg = $(".crayon-changed");
-                       if (chg.length && uniConfirm(configCrayons.txt.sauvegarder)) {
-                               chg.crayon().find('form').submit();
-                       }
-               });
-       }
-
-       // demarrer les crayons
-       if ((typeof crayons_init_dynamique == 'undefined') || (crayons_init_dynamique==false)) {
-
-               // compat jQuery 1.9
-               if (typeof $.fn.live == 'undefined') {
-                       $.fn.live = function( types, data, fn ) {
-                               $( this.context ).on( types, this.selector, data, fn );
-                               return this;
-                       };
-               }
-               $('.crayon:not(.crayon-init)')
-               .live('mouseover touchstart', function(e) {
-                       $(this)
-                       .addClass('crayon-init')
-                       .filter(configCrayons.droits)
-                       .initcrayon()
-                       .trigger('mouseover');
-                       if (e.type=='touchstart')
-                               $(this).trigger('touchstart');
-               });
-       }
-
-       // un clic en dehors ferme tous les crayons ouverts ?
-       if (configCrayons.cfg.clickhide)
-       $("html")
-       .click(function(){
-               $('.crayon-has')
-               .hidecrayon();
-       });
-};
-
-})(jQuery);
diff --git a/www/plugins/crayons/js/jquery.form.js b/www/plugins/crayons/js/jquery.form.js
deleted file mode 100644 (file)
index 591ad6f..0000000
+++ /dev/null
@@ -1,1277 +0,0 @@
-/*!
- * jQuery Form Plugin
- * version: 3.51.0-2014.06.20
- * Requires jQuery v1.5 or later
- * Copyright (c) 2014 M. Alsup
- * Examples and documentation at: http://malsup.com/jquery/form/
- * Project repository: https://github.com/malsup/form
- * Dual licensed under the MIT and GPL licenses.
- * https://github.com/malsup/form#copyright-and-license
- */
-/*global ActiveXObject */
-
-// AMD support
-(function (factory) {
-    "use strict";
-    if (typeof define === 'function' && define.amd) {
-        // using AMD; register as anon module
-        define(['jquery'], factory);
-    } else {
-        // no AMD; invoke directly
-        factory( (typeof(jQuery) != 'undefined') ? jQuery : window.Zepto );
-    }
-}
-
-(function($) {
-"use strict";
-
-/*
-    Usage Note:
-    -----------
-    Do not use both ajaxSubmit and ajaxForm on the same form.  These
-    functions are mutually exclusive.  Use ajaxSubmit if you want
-    to bind your own submit handler to the form.  For example,
-
-    $(document).ready(function() {
-        $('#myForm').on('submit', function(e) {
-            e.preventDefault(); // <-- important
-            $(this).ajaxSubmit({
-                target: '#output'
-            });
-        });
-    });
-
-    Use ajaxForm when you want the plugin to manage all the event binding
-    for you.  For example,
-
-    $(document).ready(function() {
-        $('#myForm').ajaxForm({
-            target: '#output'
-        });
-    });
-
-    You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
-    form does not have to exist when you invoke ajaxForm:
-
-    $('#myForm').ajaxForm({
-        delegation: true,
-        target: '#output'
-    });
-
-    When using ajaxForm, the ajaxSubmit function will be invoked for you
-    at the appropriate time.
-*/
-
-/**
- * Feature detection
- */
-var feature = {};
-feature.fileapi = $("<input type='file'/>").get(0).files !== undefined;
-feature.formdata = window.FormData !== undefined;
-
-var hasProp = !!$.fn.prop;
-
-// attr2 uses prop when it can but checks the return type for
-// an expected string.  this accounts for the case where a form 
-// contains inputs with names like "action" or "method"; in those
-// cases "prop" returns the element
-$.fn.attr2 = function() {
-    if ( ! hasProp ) {
-        return this.attr.apply(this, arguments);
-    }
-    var val = this.prop.apply(this, arguments);
-    if ( ( val && val.jquery ) || typeof val === 'string' ) {
-        return val;
-    }
-    return this.attr.apply(this, arguments);
-};
-
-/**
- * ajaxSubmit() provides a mechanism for immediately submitting
- * an HTML form using AJAX.
- */
-$.fn.ajaxSubmit = function(options) {
-    /*jshint scripturl:true */
-
-    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
-    if (!this.length) {
-        log('ajaxSubmit: skipping submit process - no element selected');
-        return this;
-    }
-
-    var method, action, url, $form = this;
-
-    if (typeof options == 'function') {
-        options = { success: options };
-    }
-    else if ( options === undefined ) {
-        options = {};
-    }
-
-    method = options.type || this.attr2('method');
-    action = options.url  || this.attr2('action');
-
-    url = (typeof action === 'string') ? $.trim(action) : '';
-    url = url || window.location.href || '';
-    if (url) {
-        // clean url (don't include hash vaue)
-        url = (url.match(/^([^#]+)/)||[])[1];
-    }
-
-    options = $.extend(true, {
-        url:  url,
-        success: $.ajaxSettings.success,
-        type: method || $.ajaxSettings.type,
-        iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
-    }, options);
-
-    // hook for manipulating the form data before it is extracted;
-    // convenient for use with rich editors like tinyMCE or FCKEditor
-    var veto = {};
-    this.trigger('form-pre-serialize', [this, options, veto]);
-    if (veto.veto) {
-        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
-        return this;
-    }
-
-    // provide opportunity to alter form data before it is serialized
-    if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
-        log('ajaxSubmit: submit aborted via beforeSerialize callback');
-        return this;
-    }
-
-    var traditional = options.traditional;
-    if ( traditional === undefined ) {
-        traditional = $.ajaxSettings.traditional;
-    }
-
-    var elements = [];
-    var qx, a = this.formToArray(options.semantic, elements);
-    if (options.data) {
-        options.extraData = options.data;
-        qx = $.param(options.data, traditional);
-    }
-
-    // give pre-submit callback an opportunity to abort the submit
-    if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
-        log('ajaxSubmit: submit aborted via beforeSubmit callback');
-        return this;
-    }
-
-    // fire vetoable 'validate' event
-    this.trigger('form-submit-validate', [a, this, options, veto]);
-    if (veto.veto) {
-        log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
-        return this;
-    }
-
-    var q = $.param(a, traditional);
-    if (qx) {
-        q = ( q ? (q + '&' + qx) : qx );
-    }
-    if (options.type.toUpperCase() == 'GET') {
-        options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
-        options.data = null;  // data is null for 'get'
-    }
-    else {
-        options.data = q; // data is the query string for 'post'
-    }
-
-    var callbacks = [];
-    if (options.resetForm) {
-        callbacks.push(function() { $form.resetForm(); });
-    }
-    if (options.clearForm) {
-        callbacks.push(function() { $form.clearForm(options.includeHidden); });
-    }
-
-    // perform a load on the target only if dataType is not provided
-    if (!options.dataType && options.target) {
-        var oldSuccess = options.success || function(){};
-        callbacks.push(function(data) {
-            var fn = options.replaceTarget ? 'replaceWith' : 'html';
-            $(options.target)[fn](data).each(oldSuccess, arguments);
-        });
-    }
-    else if (options.success) {
-        callbacks.push(options.success);
-    }
-
-    options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
-        var context = options.context || this ;    // jQuery 1.4+ supports scope context
-        for (var i=0, max=callbacks.length; i < max; i++) {
-            callbacks[i].apply(context, [data, status, xhr || $form, $form]);
-        }
-    };
-
-    if (options.error) {
-        var oldError = options.error;
-        options.error = function(xhr, status, error) {
-            var context = options.context || this;
-            oldError.apply(context, [xhr, status, error, $form]);
-        };
-    }
-
-     if (options.complete) {
-        var oldComplete = options.complete;
-        options.complete = function(xhr, status) {
-            var context = options.context || this;
-            oldComplete.apply(context, [xhr, status, $form]);
-        };
-    }
-
-    // are there files to upload?
-
-    // [value] (issue #113), also see comment:
-    // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219
-    var fileInputs = $('input[type=file]:enabled', this).filter(function() { return $(this).val() !== ''; });
-
-    var hasFileInputs = fileInputs.length > 0;
-    var mp = 'multipart/form-data';
-    var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
-
-    var fileAPI = feature.fileapi && feature.formdata;
-    log("fileAPI :" + fileAPI);
-    var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
-
-    var jqxhr;
-
-    // options.iframe allows user to force iframe mode
-    // 06-NOV-09: now defaulting to iframe mode if file input is detected
-    if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
-        // hack to fix Safari hang (thanks to Tim Molendijk for this)
-        // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
-        if (options.closeKeepAlive) {
-            $.get(options.closeKeepAlive, function() {
-                jqxhr = fileUploadIframe(a);
-            });
-        }
-        else {
-            jqxhr = fileUploadIframe(a);
-        }
-    }
-    else if ((hasFileInputs || multipart) && fileAPI) {
-        jqxhr = fileUploadXhr(a);
-    }
-    else {
-        jqxhr = $.ajax(options);
-    }
-
-    $form.removeData('jqxhr').data('jqxhr', jqxhr);
-
-    // clear element array
-    for (var k=0; k < elements.length; k++) {
-        elements[k] = null;
-    }
-
-    // fire 'notify' event
-    this.trigger('form-submit-notify', [this, options]);
-    return this;
-
-    // utility fn for deep serialization
-    function deepSerialize(extraData){
-        var serialized = $.param(extraData, options.traditional).split('&');
-        var len = serialized.length;
-        var result = [];
-        var i, part;
-        for (i=0; i < len; i++) {
-            // #252; undo param space replacement
-            serialized[i] = serialized[i].replace(/\+/g,' ');
-            part = serialized[i].split('=');
-            // #278; use array instead of object storage, favoring array serializations
-            result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]);
-        }
-        return result;
-    }
-
-     // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
-    function fileUploadXhr(a) {
-        var formdata = new FormData();
-
-        for (var i=0; i < a.length; i++) {
-            formdata.append(a[i].name, a[i].value);
-        }
-
-        if (options.extraData) {
-            var serializedData = deepSerialize(options.extraData);
-            for (i=0; i < serializedData.length; i++) {
-                if (serializedData[i]) {
-                    formdata.append(serializedData[i][0], serializedData[i][1]);
-                }
-            }
-        }
-
-        options.data = null;
-
-        var s = $.extend(true, {}, $.ajaxSettings, options, {
-            contentType: false,
-            processData: false,
-            cache: false,
-            type: method || 'POST'
-        });
-
-        if (options.uploadProgress) {
-            // workaround because jqXHR does not expose upload property
-            s.xhr = function() {
-                var xhr = $.ajaxSettings.xhr();
-                if (xhr.upload) {
-                    xhr.upload.addEventListener('progress', function(event) {
-                        var percent = 0;
-                        var position = event.loaded || event.position; /*event.position is deprecated*/
-                        var total = event.total;
-                        if (event.lengthComputable) {
-                            percent = Math.ceil(position / total * 100);
-                        }
-                        options.uploadProgress(event, position, total, percent);
-                    }, false);
-                }
-                return xhr;
-            };
-        }
-
-        s.data = null;
-        var beforeSend = s.beforeSend;
-        s.beforeSend = function(xhr, o) {
-            //Send FormData() provided by user
-            if (options.formData) {
-                o.data = options.formData;
-            }
-            else {
-                o.data = formdata;
-            }
-            if(beforeSend) {
-                beforeSend.call(this, xhr, o);
-            }
-        };
-        return $.ajax(s);
-    }
-
-    // private function for handling file uploads (hat tip to YAHOO!)
-    function fileUploadIframe(a) {
-        var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
-        var deferred = $.Deferred();
-
-        // #341
-        deferred.abort = function(status) {
-            xhr.abort(status);
-        };
-
-        if (a) {
-            // ensure that every serialized input is still enabled
-            for (i=0; i < elements.length; i++) {
-                el = $(elements[i]);
-                if ( hasProp ) {
-                    el.prop('disabled', false);
-                }
-                else {
-                    el.removeAttr('disabled');
-                }
-            }
-        }
-
-        s = $.extend(true, {}, $.ajaxSettings, options);
-        s.context = s.context || s;
-        id = 'jqFormIO' + (new Date().getTime());
-        if (s.iframeTarget) {
-            $io = $(s.iframeTarget);
-            n = $io.attr2('name');
-            if (!n) {
-                $io.attr2('name', id);
-            }
-            else {
-                id = n;
-            }
-        }
-        else {
-            $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
-            $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
-        }
-        io = $io[0];
-
-
-        xhr = { // mock object
-            aborted: 0,
-            responseText: null,
-            responseXML: null,
-            status: 0,
-            statusText: 'n/a',
-            getAllResponseHeaders: function() {},
-            getResponseHeader: function() {},
-            setRequestHeader: function() {},
-            abort: function(status) {
-                var e = (status === 'timeout' ? 'timeout' : 'aborted');
-                log('aborting upload... ' + e);
-                this.aborted = 1;
-
-                try { // #214, #257
-                    if (io.contentWindow.document.execCommand) {
-                        io.contentWindow.document.execCommand('Stop');
-                    }
-                }
-                catch(ignore) {}
-
-                $io.attr('src', s.iframeSrc); // abort op in progress
-                xhr.error = e;
-                if (s.error) {
-                    s.error.call(s.context, xhr, e, status);
-                }
-                if (g) {
-                    $.event.trigger("ajaxError", [xhr, s, e]);
-                }
-                if (s.complete) {
-                    s.complete.call(s.context, xhr, e);
-                }
-            }
-        };
-
-        g = s.global;
-        // trigger ajax global events so that activity/block indicators work like normal
-        if (g && 0 === $.active++) {
-            $.event.trigger("ajaxStart");
-        }
-        if (g) {
-            $.event.trigger("ajaxSend", [xhr, s]);
-        }
-
-        if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
-            if (s.global) {
-                $.active--;
-            }
-            deferred.reject();
-            return deferred;
-        }
-        if (xhr.aborted) {
-            deferred.reject();
-            return deferred;
-        }
-
-        // add submitting element to data if we know it
-        sub = form.clk;
-        if (sub) {
-            n = sub.name;
-            if (n && !sub.disabled) {
-                s.extraData = s.extraData || {};
-                s.extraData[n] = sub.value;
-                if (sub.type == "image") {
-                    s.extraData[n+'.x'] = form.clk_x;
-                    s.extraData[n+'.y'] = form.clk_y;
-                }
-            }
-        }
-
-        var CLIENT_TIMEOUT_ABORT = 1;
-        var SERVER_ABORT = 2;
-                
-        function getDoc(frame) {
-            /* it looks like contentWindow or contentDocument do not
-             * carry the protocol property in ie8, when running under ssl
-             * frame.document is the only valid response document, since
-             * the protocol is know but not on the other two objects. strange?
-             * "Same origin policy" http://en.wikipedia.org/wiki/Same_origin_policy
-             */
-            
-            var doc = null;
-            
-            // IE8 cascading access check
-            try {
-                if (frame.contentWindow) {
-                    doc = frame.contentWindow.document;
-                }
-            } catch(err) {
-                // IE8 access denied under ssl & missing protocol
-                log('cannot get iframe.contentWindow document: ' + err);
-            }
-
-            if (doc) { // successful getting content
-                return doc;
-            }
-
-            try { // simply checking may throw in ie8 under ssl or mismatched protocol
-                doc = frame.contentDocument ? frame.contentDocument : frame.document;
-            } catch(err) {
-                // last attempt
-                log('cannot get iframe.contentDocument: ' + err);
-                doc = frame.document;
-            }
-            return doc;
-        }
-
-        // Rails CSRF hack (thanks to Yvan Barthelemy)
-        var csrf_token = $('meta[name=csrf-token]').attr('content');
-        var csrf_param = $('meta[name=csrf-param]').attr('content');
-        if (csrf_param && csrf_token) {
-            s.extraData = s.extraData || {};
-            s.extraData[csrf_param] = csrf_token;
-        }
-
-        // take a breath so that pending repaints get some cpu time before the upload starts
-        function doSubmit() {
-            // make sure form attrs are set
-            var t = $form.attr2('target'), 
-                a = $form.attr2('action'), 
-                mp = 'multipart/form-data',
-                et = $form.attr('enctype') || $form.attr('encoding') || mp;
-
-            // update form attrs in IE friendly way
-            form.setAttribute('target',id);
-            if (!method || /post/i.test(method) ) {
-                form.setAttribute('method', 'POST');
-            }
-            if (a != s.url) {
-                form.setAttribute('action', s.url);
-            }
-
-            // ie borks in some cases when setting encoding
-            if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
-                $form.attr({
-                    encoding: 'multipart/form-data',
-                    enctype:  'multipart/form-data'
-                });
-            }
-
-            // support timout
-            if (s.timeout) {
-                timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
-            }
-
-            // look for server aborts
-            function checkState() {
-                try {
-                    var state = getDoc(io).readyState;
-                    log('state = ' + state);
-                    if (state && state.toLowerCase() == 'uninitialized') {
-                        setTimeout(checkState,50);
-                    }
-                }
-                catch(e) {
-                    log('Server abort: ' , e, ' (', e.name, ')');
-                    cb(SERVER_ABORT);
-                    if (timeoutHandle) {
-                        clearTimeout(timeoutHandle);
-                    }
-                    timeoutHandle = undefined;
-                }
-            }
-
-            // add "extra" data to form if provided in options
-            var extraInputs = [];
-            try {
-                if (s.extraData) {
-                    for (var n in s.extraData) {
-                        if (s.extraData.hasOwnProperty(n)) {
-                           // if using the $.param format that allows for multiple values with the same name
-                           if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
-                               extraInputs.push(
-                               $('<input type="hidden" name="'+s.extraData[n].name+'">').val(s.extraData[n].value)
-                                   .appendTo(form)[0]);
-                           } else {
-                               extraInputs.push(
-                               $('<input type="hidden" name="'+n+'">').val(s.extraData[n])
-                                   .appendTo(form)[0]);
-                           }
-                        }
-                    }
-                }
-
-                if (!s.iframeTarget) {
-                    // add iframe to doc and submit the form
-                    $io.appendTo('body');
-                }
-                if (io.attachEvent) {
-                    io.attachEvent('onload', cb);
-                }
-                else {
-                    io.addEventListener('load', cb, false);
-                }
-                setTimeout(checkState,15);
-
-                try {
-                    form.submit();
-                } catch(err) {
-                    // just in case form has element with name/id of 'submit'
-                    var submitFn = document.createElement('form').submit;
-                    submitFn.apply(form);
-                }
-            }
-            finally {
-                // reset attrs and remove "extra" input elements
-                form.setAttribute('action',a);
-                form.setAttribute('enctype', et); // #380
-                if(t) {
-                    form.setAttribute('target', t);
-                } else {
-                    $form.removeAttr('target');
-                }
-                $(extraInputs).remove();
-            }
-        }
-
-        if (s.forceSync) {
-            doSubmit();
-        }
-        else {
-            setTimeout(doSubmit, 10); // this lets dom updates render
-        }
-
-        var data, doc, domCheckCount = 50, callbackProcessed;
-
-        function cb(e) {
-            if (xhr.aborted || callbackProcessed) {
-                return;
-            }
-            
-            doc = getDoc(io);
-            if(!doc) {
-                log('cannot access response document');
-                e = SERVER_ABORT;
-            }
-            if (e === CLIENT_TIMEOUT_ABORT && xhr) {
-                xhr.abort('timeout');
-                deferred.reject(xhr, 'timeout');
-                return;
-            }
-            else if (e == SERVER_ABORT && xhr) {
-                xhr.abort('server abort');
-                deferred.reject(xhr, 'error', 'server abort');
-                return;
-            }
-
-            if (!doc || doc.location.href == s.iframeSrc) {
-                // response not received yet
-                if (!timedOut) {
-                    return;
-                }
-            }
-            if (io.detachEvent) {
-                io.detachEvent('onload', cb);
-            }
-            else {
-                io.removeEventListener('load', cb, false);
-            }
-
-            var status = 'success', errMsg;
-            try {
-                if (timedOut) {
-                    throw 'timeout';
-                }
-
-                var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
-                log('isXml='+isXml);
-                if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
-                    if (--domCheckCount) {
-                        // in some browsers (Opera) the iframe DOM is not always traversable when
-                        // the onload callback fires, so we loop a bit to accommodate
-                        log('requeing onLoad callback, DOM not available');
-                        setTimeout(cb, 250);
-                        return;
-                    }
-                    // let this fall through because server response could be an empty document
-                    //log('Could not access iframe DOM after mutiple tries.');
-                    //throw 'DOMException: not available';
-                }
-
-                //log('response detected');
-                var docRoot = doc.body ? doc.body : doc.documentElement;
-                xhr.responseText = docRoot ? docRoot.innerHTML : null;
-                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
-                if (isXml) {
-                    s.dataType = 'xml';
-                }
-                xhr.getResponseHeader = function(header){
-                    var headers = {'content-type': s.dataType};
-                    return headers[header.toLowerCase()];
-                };
-                // support for XHR 'status' & 'statusText' emulation :
-                if (docRoot) {
-                    xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
-                    xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
-                }
-
-                var dt = (s.dataType || '').toLowerCase();
-                var scr = /(json|script|text)/.test(dt);
-                if (scr || s.textarea) {
-                    // see if user embedded response in textarea
-                    var ta = doc.getElementsByTagName('textarea')[0];
-                    if (ta) {
-                        xhr.responseText = ta.value;
-                        // support for XHR 'status' & 'statusText' emulation :
-                        xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
-                        xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
-                    }
-                    else if (scr) {
-                        // account for browsers injecting pre around json response
-                        var pre = doc.getElementsByTagName('pre')[0];
-                        var b = doc.getElementsByTagName('body')[0];
-                        if (pre) {
-                            xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
-                        }
-                        else if (b) {
-                            xhr.responseText = b.textContent ? b.textContent : b.innerText;
-                        }
-                    }
-                }
-                else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {
-                    xhr.responseXML = toXml(xhr.responseText);
-                }
-
-                try {
-                    data = httpData(xhr, dt, s);
-                }
-                catch (err) {
-                    status = 'parsererror';
-                    xhr.error = errMsg = (err || status);
-                }
-            }
-            catch (err) {
-                log('error caught: ',err);
-                status = 'error';
-                xhr.error = errMsg = (err || status);
-            }
-
-            if (xhr.aborted) {
-                log('upload aborted');
-                status = null;
-            }
-
-            if (xhr.status) { // we've set xhr.status
-                status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
-            }
-
-            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
-            if (status === 'success') {
-                if (s.success) {
-                    s.success.call(s.context, data, 'success', xhr);
-                }
-                deferred.resolve(xhr.responseText, 'success', xhr);
-                if (g) {
-                    $.event.trigger("ajaxSuccess", [xhr, s]);
-                }
-            }
-            else if (status) {
-                if (errMsg === undefined) {
-                    errMsg = xhr.statusText;
-                }
-                if (s.error) {
-                    s.error.call(s.context, xhr, status, errMsg);
-                }
-                deferred.reject(xhr, 'error', errMsg);
-                if (g) {
-                    $.event.trigger("ajaxError", [xhr, s, errMsg]);
-                }
-            }
-
-            if (g) {
-                $.event.trigger("ajaxComplete", [xhr, s]);
-            }
-
-            if (g && ! --$.active) {
-                $.event.trigger("ajaxStop");
-            }
-
-            if (s.complete) {
-                s.complete.call(s.context, xhr, status);
-            }
-
-            callbackProcessed = true;
-            if (s.timeout) {
-                clearTimeout(timeoutHandle);
-            }
-
-            // clean up
-            setTimeout(function() {
-                if (!s.iframeTarget) {
-                    $io.remove();
-                }
-                else { //adding else to clean up existing iframe response.
-                    $io.attr('src', s.iframeSrc);
-                }
-                xhr.responseXML = null;
-            }, 100);
-        }
-
-        var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
-            if (window.ActiveXObject) {
-                doc = new ActiveXObject('Microsoft.XMLDOM');
-                doc.async = 'false';
-                doc.loadXML(s);
-            }
-            else {
-                doc = (new DOMParser()).parseFromString(s, 'text/xml');
-            }
-            return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
-        };
-        var parseJSON = $.parseJSON || function(s) {
-            /*jslint evil:true */
-            return window['eval']('(' + s + ')');
-        };
-
-        var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
-
-            var ct = xhr.getResponseHeader('content-type') || '',
-                xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
-                data = xml ? xhr.responseXML : xhr.responseText;
-
-            if (xml && data.documentElement.nodeName === 'parsererror') {
-                if ($.error) {
-                    $.error('parsererror');
-                }
-            }
-            if (s && s.dataFilter) {
-                data = s.dataFilter(data, type);
-            }
-            if (typeof data === 'string') {
-                if (type === 'json' || !type && ct.indexOf('json') >= 0) {
-                    data = parseJSON(data);
-                } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
-                    $.globalEval(data);
-                }
-            }
-            return data;
-        };
-
-        return deferred;
-    }
-};
-
-/**
- * ajaxForm() provides a mechanism for fully automating form submission.
- *
- * The advantages of using this method instead of ajaxSubmit() are:
- *
- * 1: This method will include coordinates for <input type="image" /> elements (if the element
- *    is used to submit the form).
- * 2. This method will include the submit element's name/value data (for the element that was
- *    used to submit the form).
- * 3. This method binds the submit() method to the form for you.
- *
- * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
- * passes the options argument along after properly binding events for submit elements and
- * the form itself.
- */
-$.fn.ajaxForm = function(options) {
-    options = options || {};
-    options.delegation = options.delegation && $.isFunction($.fn.on);
-
-    // in jQuery 1.3+ we can fix mistakes with the ready state
-    if (!options.delegation && this.length === 0) {
-        var o = { s: this.selector, c: this.context };
-        if (!$.isReady && o.s) {
-            log('DOM not ready, queuing ajaxForm');
-            $(function() {
-                $(o.s,o.c).ajaxForm(options);
-            });
-            return this;
-        }
-        // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
-        log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
-        return this;
-    }
-
-    if ( options.delegation ) {
-        $(document)
-            .off('submit.form-plugin', this.selector, doAjaxSubmit)
-            .off('click.form-plugin', this.selector, captureSubmittingElement)
-            .on('submit.form-plugin', this.selector, options, doAjaxSubmit)
-            .on('click.form-plugin', this.selector, options, captureSubmittingElement);
-        return this;
-    }
-
-    return this.ajaxFormUnbind()
-        .bind('submit.form-plugin', options, doAjaxSubmit)
-        .bind('click.form-plugin', options, captureSubmittingElement);
-};
-
-// private event handlers
-function doAjaxSubmit(e) {
-    /*jshint validthis:true */
-    var options = e.data;
-    if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
-        e.preventDefault();
-        $(e.target).ajaxSubmit(options); // #365
-    }
-}
-
-function captureSubmittingElement(e) {
-    /*jshint validthis:true */
-    var target = e.target;
-    var $el = $(target);
-    if (!($el.is("[type=submit],[type=image]"))) {
-        // is this a child element of the submit el?  (ex: a span within a button)
-        var t = $el.closest('[type=submit]');
-        if (t.length === 0) {
-            return;
-        }
-        target = t[0];
-    }
-    var form = this;
-    form.clk = target;
-    if (target.type == 'image') {
-        if (e.offsetX !== undefined) {
-            form.clk_x = e.offsetX;
-            form.clk_y = e.offsetY;
-        } else if (typeof $.fn.offset == 'function') {
-            var offset = $el.offset();
-            form.clk_x = e.pageX - offset.left;
-            form.clk_y = e.pageY - offset.top;
-        } else {
-            form.clk_x = e.pageX - target.offsetLeft;
-            form.clk_y = e.pageY - target.offsetTop;
-        }
-    }
-    // clear form vars
-    setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
-}
-
-
-// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
-$.fn.ajaxFormUnbind = function() {
-    return this.unbind('submit.form-plugin click.form-plugin');
-};
-
-/**
- * formToArray() gathers form element data into an array of objects that can
- * be passed to any of the following ajax functions: $.get, $.post, or load.
- * Each object in the array has both a 'name' and 'value' property.  An example of
- * an array for a simple login form might be:
- *
- * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * It is this array that is passed to pre-submit callback functions provided to the
- * ajaxSubmit() and ajaxForm() methods.
- */
-$.fn.formToArray = function(semantic, elements) {
-    var a = [];
-    if (this.length === 0) {
-        return a;
-    }
-
-    var form = this[0];
-    var formId = this.attr('id');
-    var els = semantic ? form.getElementsByTagName('*') : form.elements;
-    var els2;
-
-    if (els && !/MSIE [678]/.test(navigator.userAgent)) { // #390
-        els = $(els).get();  // convert to standard array
-    }
-
-    // #386; account for inputs outside the form which use the 'form' attribute
-    if ( formId ) {
-        els2 = $(':input[form="' + formId + '"]').get(); // hat tip @thet
-        if ( els2.length ) {
-            els = (els || []).concat(els2);
-        }
-    }
-
-    if (!els || !els.length) {
-        return a;
-    }
-
-    var i,j,n,v,el,max,jmax;
-    for(i=0, max=els.length; i < max; i++) {
-        el = els[i];
-        n = el.name;
-        if (!n || el.disabled) {
-            continue;
-        }
-
-        if (semantic && form.clk && el.type == "image") {
-            // handle image inputs on the fly when semantic == true
-            if(form.clk == el) {
-                a.push({name: n, value: $(el).val(), type: el.type });
-                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-            }
-            continue;
-        }
-
-        v = $.fieldValue(el, true);
-        if (v && v.constructor == Array) {
-            if (elements) {
-                elements.push(el);
-            }
-            for(j=0, jmax=v.length; j < jmax; j++) {
-                a.push({name: n, value: v[j]});
-            }
-        }
-        else if (feature.fileapi && el.type == 'file') {
-            if (elements) {
-                elements.push(el);
-            }
-            var files = el.files;
-            if (files.length) {
-                for (j=0; j < files.length; j++) {
-                    a.push({name: n, value: files[j], type: el.type});
-                }
-            }
-            else {
-                // #180
-                a.push({ name: n, value: '', type: el.type });
-            }
-        }
-        else if (v !== null && typeof v != 'undefined') {
-            if (elements) {
-                elements.push(el);
-            }
-            a.push({name: n, value: v, type: el.type, required: el.required});
-        }
-    }
-
-    if (!semantic && form.clk) {
-        // input type=='image' are not found in elements array! handle it here
-        var $input = $(form.clk), input = $input[0];
-        n = input.name;
-        if (n && !input.disabled && input.type == 'image') {
-            a.push({name: n, value: $input.val()});
-            a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-        }
-    }
-    return a;
-};
-
-/**
- * Serializes form data into a 'submittable' string. This method will return a string
- * in the format: name1=value1&amp;name2=value2
- */
-$.fn.formSerialize = function(semantic) {
-    //hand off to jQuery.param for proper encoding
-    return $.param(this.formToArray(semantic));
-};
-
-/**
- * Serializes all field elements in the jQuery object into a query string.
- * This method will return a string in the format: name1=value1&amp;name2=value2
- */
-$.fn.fieldSerialize = function(successful) {
-    var a = [];
-    this.each(function() {
-        var n = this.name;
-        if (!n) {
-            return;
-        }
-        var v = $.fieldValue(this, successful);
-        if (v && v.constructor == Array) {
-            for (var i=0,max=v.length; i < max; i++) {
-                a.push({name: n, value: v[i]});
-            }
-        }
-        else if (v !== null && typeof v != 'undefined') {
-            a.push({name: this.name, value: v});
-        }
-    });
-    //hand off to jQuery.param for proper encoding
-    return $.param(a);
-};
-
-/**
- * Returns the value(s) of the element in the matched set.  For example, consider the following form:
- *
- *  <form><fieldset>
- *      <input name="A" type="text" />
- *      <input name="A" type="text" />
- *      <input name="B" type="checkbox" value="B1" />
- *      <input name="B" type="checkbox" value="B2"/>
- *      <input name="C" type="radio" value="C1" />
- *      <input name="C" type="radio" value="C2" />
- *  </fieldset></form>
- *
- *  var v = $('input[type=text]').fieldValue();
- *  // if no values are entered into the text inputs
- *  v == ['','']
- *  // if values entered into the text inputs are 'foo' and 'bar'
- *  v == ['foo','bar']
- *
- *  var v = $('input[type=checkbox]').fieldValue();
- *  // if neither checkbox is checked
- *  v === undefined
- *  // if both checkboxes are checked
- *  v == ['B1', 'B2']
- *
- *  var v = $('input[type=radio]').fieldValue();
- *  // if neither radio is checked
- *  v === undefined
- *  // if first radio is checked
- *  v == ['C1']
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true.  If this value is false the value(s)
- * for each element is returned.
- *
- * Note: This method *always* returns an array.  If no valid value can be determined the
- *    array will be empty, otherwise it will contain one or more values.
- */
-$.fn.fieldValue = function(successful) {
-    for (var val=[], i=0, max=this.length; i < max; i++) {
-        var el = this[i];
-        var v = $.fieldValue(el, successful);
-        if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
-            continue;
-        }
-        if (v.constructor == Array) {
-            $.merge(val, v);
-        }
-        else {
-            val.push(v);
-        }
-    }
-    return val;
-};
-
-/**
- * Returns the value of the field element.
- */
-$.fieldValue = function(el, successful) {
-    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
-    if (successful === undefined) {
-        successful = true;
-    }
-
-    if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
-        (t == 'checkbox' || t == 'radio') && !el.checked ||
-        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
-        tag == 'select' && el.selectedIndex == -1)) {
-            return null;
-    }
-
-    if (tag == 'select') {
-        var index = el.selectedIndex;
-        if (index < 0) {
-            return null;
-        }
-        var a = [], ops = el.options;
-        var one = (t == 'select-one');
-        var max = (one ? index+1 : ops.length);
-        for(var i=(one ? index : 0); i < max; i++) {
-            var op = ops[i];
-            if (op.selected) {
-                var v = op.value;
-                if (!v) { // extra pain for IE...
-                    v = (op.attributes && op.attributes.value && !(op.attributes.value.specified)) ? op.text : op.value;
-                }
-                if (one) {
-                    return v;
-                }
-                a.push(v);
-            }
-        }
-        return a;
-    }
-    return $(el).val();
-};
-
-/**
- * Clears the form data.  Takes the following actions on the form's input fields:
- *  - input text fields will have their 'value' property set to the empty string
- *  - select elements will have their 'selectedIndex' property set to -1
- *  - checkbox and radio inputs will have their 'checked' property set to false
- *  - inputs of type submit, button, reset, and hidden will *not* be effected
- *  - button elements will *not* be effected
- */
-$.fn.clearForm = function(includeHidden) {
-    return this.each(function() {
-        $('input,select,textarea', this).clearFields(includeHidden);
-    });
-};
-
-/**
- * Clears the selected form elements.
- */
-$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
-    var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
-    return this.each(function() {
-        var t = this.type, tag = this.tagName.toLowerCase();
-        if (re.test(t) || tag == 'textarea') {
-            this.value = '';
-        }
-        else if (t == 'checkbox' || t == 'radio') {
-            this.checked = false;
-        }
-        else if (tag == 'select') {
-            this.selectedIndex = -1;
-        }
-        else if (t == "file") {
-            if (/MSIE/.test(navigator.userAgent)) {
-                $(this).replaceWith($(this).clone(true));
-            } else {
-                $(this).val('');
-            }
-        }
-        else if (includeHidden) {
-            // includeHidden can be the value true, or it can be a selector string
-            // indicating a special test; for example:
-            //  $('#myForm').clearForm('.special:hidden')
-            // the above would clean hidden inputs that have the class of 'special'
-            if ( (includeHidden === true && /hidden/.test(t)) ||
-                 (typeof includeHidden == 'string' && $(this).is(includeHidden)) ) {
-                this.value = '';
-            }
-        }
-    });
-};
-
-/**
- * Resets the form data.  Causes all form elements to be reset to their original value.
- */
-$.fn.resetForm = function() {
-    return this.each(function() {
-        // guard against an input with the name of 'reset'
-        // note that IE reports the reset function as an 'object'
-        if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
-            this.reset();
-        }
-    });
-};
-
-/**
- * Enables or disables any matching elements.
- */
-$.fn.enable = function(b) {
-    if (b === undefined) {
-        b = true;
-    }
-    return this.each(function() {
-        this.disabled = !b;
-    });
-};
-
-/**
- * Checks/unchecks any matching checkboxes or radio buttons and
- * selects/deselects and matching option elements.
- */
-$.fn.selected = function(select) {
-    if (select === undefined) {
-        select = true;
-    }
-    return this.each(function() {
-        var t = this.type;
-        if (t == 'checkbox' || t == 'radio') {
-            this.checked = select;
-        }
-        else if (this.tagName.toLowerCase() == 'option') {
-            var $sel = $(this).parent('select');
-            if (select && $sel[0] && $sel[0].type == 'select-one') {
-                // deselect all other options
-                $sel.find('option').selected(false);
-            }
-            this.selected = select;
-        }
-    });
-};
-
-// expose debug var
-$.fn.ajaxSubmit.debug = false;
-
-// helper fn for console logging
-function log() {
-    if (!$.fn.ajaxSubmit.debug) {
-        return;
-    }
-    var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
-    if (window.console && window.console.log) {
-        window.console.log(msg);
-    }
-    else if (window.opera && window.opera.postError) {
-        window.opera.postError(msg);
-    }
-}
-
-}));
diff --git a/www/plugins/crayons/js/jquery.html5uploader.js b/www/plugins/crayons/js/jquery.html5uploader.js
deleted file mode 100644 (file)
index ac1fad8..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-(function ($) {\r
-\r
-    $.fn.html5Uploader = function (options) {\r
-\r
-        var crlf = '\r\n';\r
-        var boundary = "iloveigloo";\r
-        var dashes = "--";\r
-\r
-        var settings = {\r
-            "name": "uploadedFile",\r
-            "postUrl": "Upload.aspx",\r
-            "onClientAbort": null,\r
-            "onClientError": null,\r
-            "onClientLoad": null,\r
-            "onClientLoadEnd": null,\r
-            "onClientLoadStart": null,\r
-            "onClientProgress": null,\r
-            "onServerAbort": null,\r
-            "onServerError": null,\r
-            "onServerLoad": null,\r
-            "onServerLoadStart": null,\r
-            "onServerProgress": null,\r
-            "onServerReadyStateChange": null,\r
-            "onSuccess": null\r
-        };\r
-\r
-        if (options) {\r
-            $.extend(settings, options);\r
-        }\r
-\r
-        return this.each(function (options) {\r
-            var $this = $(this);\r
-            if ($this.is("[type='file']")) {\r
-                $this\r
-                .bind("change", function () {\r
-                    var files = this.files;\r
-                    for (var i = 0; i < files.length; i++) {\r
-                        fileHandler(files[i]);\r
-                    }\r
-                });\r
-            } else {\r
-                $this\r
-                .bind("dragenter dragover", function () {\r
-                    $(this).addClass("hover");\r
-                    return false;\r
-                })\r
-                .bind("dragleave", function () {\r
-                    $(this).removeClass("hover");\r
-                    return false;\r
-                })\r
-                .bind("drop", function (e) {\r
-                    $(this).removeClass("hover");\r
-                    var files = e.originalEvent.dataTransfer.files;\r
-                    for (var i = 0; i < files.length; i++) {\r
-                        fileHandler(files[i]);\r
-                    }\r
-                    return false;\r
-                });\r
-            }\r
-        });\r
-\r
-        function fileHandler(file) {\r
-            var fileReader = new FileReader();\r
-            fileReader.onabort = function (e) {\r
-                if (settings.onClientAbort) {\r
-                    settings.onClientAbort(e, file);\r
-                }\r
-            };\r
-            fileReader.onerror = function (e) {\r
-                if (settings.onClientError) {\r
-                    settings.onClientError(e, file);\r
-                }\r
-            };\r
-            fileReader.onload = function (e) {\r
-                if (settings.onClientLoad) {\r
-                    settings.onClientLoad(e, file);\r
-                }\r
-            };\r
-            fileReader.onloadend = function (e) {\r
-                if (settings.onClientLoadEnd) {\r
-                    settings.onClientLoadEnd(e, file);\r
-                }\r
-            };\r
-            fileReader.onloadstart = function (e) {\r
-                if (settings.onClientLoadStart) {\r
-                    settings.onClientLoadStart(e, file);\r
-                }\r
-            };\r
-            fileReader.onprogress = function (e) {\r
-                if (settings.onClientProgress) {\r
-                    settings.onClientProgress(e, file);\r
-                }\r
-            };\r
-            fileReader.readAsDataURL(file);\r
-\r
-            var xmlHttpRequest = new XMLHttpRequest();\r
-            xmlHttpRequest.upload.onabort = function (e) {\r
-                if (settings.onServerAbort) {\r
-                    settings.onServerAbort(e, file);\r
-                }\r
-            };\r
-            xmlHttpRequest.upload.onerror = function (e) {\r
-                if (settings.onServerError) {\r
-                    settings.onServerError(e, file);\r
-                }\r
-            };\r
-            xmlHttpRequest.upload.onload = function (e) {\r
-                if (settings.onServerLoad) {\r
-                    settings.onServerLoad(e, file);\r
-                }\r
-            };\r
-            xmlHttpRequest.upload.onloadstart = function (e) {\r
-                if (settings.onServerLoadStart) {\r
-                    settings.onServerLoadStart(e, file);\r
-                }\r
-            };\r
-            xmlHttpRequest.upload.onprogress = function (e) {\r
-                if (settings.onServerProgress) {\r
-                    settings.onServerProgress(e, file);\r
-                }\r
-            };\r
-            xmlHttpRequest.onreadystatechange = function (e) {\r
-                if (settings.onServerReadyStateChange) {\r
-                    settings.onServerReadyStateChange(e, file, xmlHttpRequest.readyState);\r
-                }\r
-                if (settings.onSuccess && xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {\r
-                    settings.onSuccess(e, file, xmlHttpRequest.responseText);\r
-                }\r
-            };\r
-            xmlHttpRequest.open("POST", settings.postUrl, true);\r
-\r
-            if (file.getAsBinary) { // Firefox\r
-\r
-                var data = dashes + boundary + crlf +\r
-                    "Content-Disposition: form-data;" +\r
-                    "name=\"" + settings.name + "\";" +\r
-                    "filename=\"" + unescape(encodeURIComponent(file.name)) + "\"" + crlf +\r
-                    "Content-Type: application/octet-stream" + crlf + crlf +\r
-                    file.getAsBinary() + crlf +\r
-                    dashes + boundary + dashes;\r
-\r
-                xmlHttpRequest.setRequestHeader("Content-Type", "multipart/form-data;boundary=" + boundary);\r
-                xmlHttpRequest.sendAsBinary(data);\r
-\r
-            } else if (window.FormData) { // Chrome\r
-\r
-                var formData = new FormData();\r
-                formData.append(settings.name, file);\r
-\r
-                xmlHttpRequest.send(formData);\r
-\r
-            }\r
-        }\r
-\r
-    };\r
-\r
-})(jQuery);
\ No newline at end of file
diff --git a/www/plugins/crayons/js/jquery.js b/www/plugins/crayons/js/jquery.js
deleted file mode 100644 (file)
index 6feb110..0000000
+++ /dev/null
@@ -1,10351 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.11.3
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-04-28T16:19Z
- */
-
-(function( global, factory ) {
-
-       if ( typeof module === "object" && typeof module.exports === "object" ) {
-               // For CommonJS and CommonJS-like environments where a proper window is present,
-               // execute the factory and get jQuery
-               // For environments that do not inherently posses a window with a document
-               // (such as Node.js), expose a jQuery-making factory as module.exports
-               // This accentuates the need for the creation of a real window
-               // e.g. var jQuery = require("jquery")(window);
-               // See ticket #14549 for more info
-               module.exports = global.document ?
-                       factory( global, true ) :
-                       function( w ) {
-                               if ( !w.document ) {
-                                       throw new Error( "jQuery requires a window with a document" );
-                               }
-                               return factory( w );
-                       };
-       } else {
-               factory( global );
-       }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//
-
-var deletedIds = [];
-
-var slice = deletedIds.slice;
-
-var concat = deletedIds.concat;
-
-var push = deletedIds.push;
-
-var indexOf = deletedIds.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
-       version = "1.11.3",
-
-       // Define a local copy of jQuery
-       jQuery = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 'enhanced'
-               // Need init if jQuery is called (just allow error to be thrown if not included)
-               return new jQuery.fn.init( selector, context );
-       },
-
-       // Support: Android<4.1, IE<9
-       // Make sure we trim BOM and NBSP
-       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
-       // Matches dashed string for camelizing
-       rmsPrefix = /^-ms-/,
-       rdashAlpha = /-([\da-z])/gi,
-
-       // Used by jQuery.camelCase as callback to replace()
-       fcamelCase = function( all, letter ) {
-               return letter.toUpperCase();
-       };
-
-jQuery.fn = jQuery.prototype = {
-       // The current version of jQuery being used
-       jquery: version,
-
-       constructor: jQuery,
-
-       // Start with an empty selector
-       selector: "",
-
-       // The default length of a jQuery object is 0
-       length: 0,
-
-       toArray: function() {
-               return slice.call( this );
-       },
-
-       // Get the Nth element in the matched element set OR
-       // Get the whole matched element set as a clean array
-       get: function( num ) {
-               return num != null ?
-
-                       // Return just the one element from the set
-                       ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
-                       // Return all the elements in a clean array
-                       slice.call( this );
-       },
-
-       // Take an array of elements and push it onto the stack
-       // (returning the new matched element set)
-       pushStack: function( elems ) {
-
-               // Build a new jQuery matched element set
-               var ret = jQuery.merge( this.constructor(), elems );
-
-               // Add the old object onto the stack (as a reference)
-               ret.prevObject = this;
-               ret.context = this.context;
-
-               // Return the newly-formed element set
-               return ret;
-       },
-
-       // Execute a callback for every element in the matched set.
-       // (You can seed the arguments with an array of args, but this is
-       // only used internally.)
-       each: function( callback, args ) {
-               return jQuery.each( this, callback, args );
-       },
-
-       map: function( callback ) {
-               return this.pushStack( jQuery.map(this, function( elem, i ) {
-                       return callback.call( elem, i, elem );
-               }));
-       },
-
-       slice: function() {
-               return this.pushStack( slice.apply( this, arguments ) );
-       },
-
-       first: function() {
-               return this.eq( 0 );
-       },
-
-       last: function() {
-               return this.eq( -1 );
-       },
-
-       eq: function( i ) {
-               var len = this.length,
-                       j = +i + ( i < 0 ? len : 0 );
-               return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
-       },
-
-       end: function() {
-               return this.prevObject || this.constructor(null);
-       },
-
-       // For internal use only.
-       // Behaves like an Array's method, not like a jQuery method.
-       push: push,
-       sort: deletedIds.sort,
-       splice: deletedIds.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-       var src, copyIsArray, copy, name, options, clone,
-               target = arguments[0] || {},
-               i = 1,
-               length = arguments.length,
-               deep = false;
-
-       // Handle a deep copy situation
-       if ( typeof target === "boolean" ) {
-               deep = target;
-
-               // skip the boolean and the target
-               target = arguments[ i ] || {};
-               i++;
-       }
-
-       // Handle case when target is a string or something (possible in deep copy)
-       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-               target = {};
-       }
-
-       // extend jQuery itself if only one argument is passed
-       if ( i === length ) {
-               target = this;
-               i--;
-       }
-
-       for ( ; i < length; i++ ) {
-               // Only deal with non-null/undefined values
-               if ( (options = arguments[ i ]) != null ) {
-                       // Extend the base object
-                       for ( name in options ) {
-                               src = target[ name ];
-                               copy = options[ name ];
-
-                               // Prevent never-ending loop
-                               if ( target === copy ) {
-                                       continue;
-                               }
-
-                               // Recurse if we're merging plain objects or arrays
-                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-                                       if ( copyIsArray ) {
-                                               copyIsArray = false;
-                                               clone = src && jQuery.isArray(src) ? src : [];
-
-                                       } else {
-                                               clone = src && jQuery.isPlainObject(src) ? src : {};
-                                       }
-
-                                       // Never move original objects, clone them
-                                       target[ name ] = jQuery.extend( deep, clone, copy );
-
-                               // Don't bring in undefined values
-                               } else if ( copy !== undefined ) {
-                                       target[ name ] = copy;
-                               }
-                       }
-               }
-       }
-
-       // Return the modified object
-       return target;
-};
-
-jQuery.extend({
-       // Unique for each copy of jQuery on the page
-       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
-       // Assume jQuery is ready without the ready module
-       isReady: true,
-
-       error: function( msg ) {
-               throw new Error( msg );
-       },
-
-       noop: function() {},
-
-       // See test/unit/core.js for details concerning isFunction.
-       // Since version 1.3, DOM methods and functions like alert
-       // aren't supported. They return false on IE (#2968).
-       isFunction: function( obj ) {
-               return jQuery.type(obj) === "function";
-       },
-
-       isArray: Array.isArray || function( obj ) {
-               return jQuery.type(obj) === "array";
-       },
-
-       isWindow: function( obj ) {
-               /* jshint eqeqeq: false */
-               return obj != null && obj == obj.window;
-       },
-
-       isNumeric: function( obj ) {
-               // parseFloat NaNs numeric-cast false positives (null|true|false|"")
-               // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
-               // subtraction forces infinities to NaN
-               // adding 1 corrects loss of precision from parseFloat (#15100)
-               return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
-       },
-
-       isEmptyObject: function( obj ) {
-               var name;
-               for ( name in obj ) {
-                       return false;
-               }
-               return true;
-       },
-
-       isPlainObject: function( obj ) {
-               var key;
-
-               // Must be an Object.
-               // Because of IE, we also have to check the presence of the constructor property.
-               // Make sure that DOM nodes and window objects don't pass through, as well
-               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-                       return false;
-               }
-
-               try {
-                       // Not own constructor property must be Object
-                       if ( obj.constructor &&
-                               !hasOwn.call(obj, "constructor") &&
-                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-                               return false;
-                       }
-               } catch ( e ) {
-                       // IE8,9 Will throw exceptions on certain host objects #9897
-                       return false;
-               }
-
-               // Support: IE<9
-               // Handle iteration over inherited properties before own properties.
-               if ( support.ownLast ) {
-                       for ( key in obj ) {
-                               return hasOwn.call( obj, key );
-                       }
-               }
-
-               // Own properties are enumerated firstly, so to speed up,
-               // if last one is own, then all properties are own.
-               for ( key in obj ) {}
-
-               return key === undefined || hasOwn.call( obj, key );
-       },
-
-       type: function( obj ) {
-               if ( obj == null ) {
-                       return obj + "";
-               }
-               return typeof obj === "object" || typeof obj === "function" ?
-                       class2type[ toString.call(obj) ] || "object" :
-                       typeof obj;
-       },
-
-       // Evaluates a script in a global context
-       // Workarounds based on findings by Jim Driscoll
-       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-       globalEval: function( data ) {
-               if ( data && jQuery.trim( data ) ) {
-                       // We use execScript on Internet Explorer
-                       // We use an anonymous function so that context is window
-                       // rather than jQuery in Firefox
-                       ( window.execScript || function( data ) {
-                               window[ "eval" ].call( window, data );
-                       } )( data );
-               }
-       },
-
-       // Convert dashed to camelCase; used by the css and data modules
-       // Microsoft forgot to hump their vendor prefix (#9572)
-       camelCase: function( string ) {
-               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-       },
-
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-       },
-
-       // args is for internal usage only
-       each: function( obj, callback, args ) {
-               var value,
-                       i = 0,
-                       length = obj.length,
-                       isArray = isArraylike( obj );
-
-               if ( args ) {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.apply( obj[ i ], args );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.apply( obj[ i ], args );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-
-               // A special, fast, case for the most common use of each
-               } else {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.call( obj[ i ], i, obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.call( obj[ i ], i, obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               return obj;
-       },
-
-       // Support: Android<4.1, IE<9
-       trim: function( text ) {
-               return text == null ?
-                       "" :
-                       ( text + "" ).replace( rtrim, "" );
-       },
-
-       // results is for internal usage only
-       makeArray: function( arr, results ) {
-               var ret = results || [];
-
-               if ( arr != null ) {
-                       if ( isArraylike( Object(arr) ) ) {
-                               jQuery.merge( ret,
-                                       typeof arr === "string" ?
-                                       [ arr ] : arr
-                               );
-                       } else {
-                               push.call( ret, arr );
-                       }
-               }
-
-               return ret;
-       },
-
-       inArray: function( elem, arr, i ) {
-               var len;
-
-               if ( arr ) {
-                       if ( indexOf ) {
-                               return indexOf.call( arr, elem, i );
-                       }
-
-                       len = arr.length;
-                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-                       for ( ; i < len; i++ ) {
-                               // Skip accessing in sparse arrays
-                               if ( i in arr && arr[ i ] === elem ) {
-                                       return i;
-                               }
-                       }
-               }
-
-               return -1;
-       },
-
-       merge: function( first, second ) {
-               var len = +second.length,
-                       j = 0,
-                       i = first.length;
-
-               while ( j < len ) {
-                       first[ i++ ] = second[ j++ ];
-               }
-
-               // Support: IE<9
-               // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
-               if ( len !== len ) {
-                       while ( second[j] !== undefined ) {
-                               first[ i++ ] = second[ j++ ];
-                       }
-               }
-
-               first.length = i;
-
-               return first;
-       },
-
-       grep: function( elems, callback, invert ) {
-               var callbackInverse,
-                       matches = [],
-                       i = 0,
-                       length = elems.length,
-                       callbackExpect = !invert;
-
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( ; i < length; i++ ) {
-                       callbackInverse = !callback( elems[ i ], i );
-                       if ( callbackInverse !== callbackExpect ) {
-                               matches.push( elems[ i ] );
-                       }
-               }
-
-               return matches;
-       },
-
-       // arg is for internal usage only
-       map: function( elems, callback, arg ) {
-               var value,
-                       i = 0,
-                       length = elems.length,
-                       isArray = isArraylike( elems ),
-                       ret = [];
-
-               // Go through the array, translating each of the items to their new values
-               if ( isArray ) {
-                       for ( ; i < length; i++ ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret.push( value );
-                               }
-                       }
-
-               // Go through every key on the object,
-               } else {
-                       for ( i in elems ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret.push( value );
-                               }
-                       }
-               }
-
-               // Flatten any nested arrays
-               return concat.apply( [], ret );
-       },
-
-       // A global GUID counter for objects
-       guid: 1,
-
-       // Bind a function to a context, optionally partially applying any
-       // arguments.
-       proxy: function( fn, context ) {
-               var args, proxy, tmp;
-
-               if ( typeof context === "string" ) {
-                       tmp = fn[ context ];
-                       context = fn;
-                       fn = tmp;
-               }
-
-               // Quick check to determine if target is callable, in the spec
-               // this throws a TypeError, but we will just return undefined.
-               if ( !jQuery.isFunction( fn ) ) {
-                       return undefined;
-               }
-
-               // Simulated bind
-               args = slice.call( arguments, 2 );
-               proxy = function() {
-                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
-               };
-
-               // Set the guid of unique handler to the same of original handler, so it can be removed
-               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
-               return proxy;
-       },
-
-       now: function() {
-               return +( new Date() );
-       },
-
-       // jQuery.support is not used in Core but other projects attach their
-       // properties to it so it needs to exist.
-       support: support
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
-       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
-
-       // Support: iOS 8.2 (not reproducible in simulator)
-       // `in` check used to prevent JIT error (gh-2145)
-       // hasOwn isn't used here due to false negatives
-       // regarding Nodelist length in IE
-       var length = "length" in obj && obj.length,
-               type = jQuery.type( obj );
-
-       if ( type === "function" || jQuery.isWindow( obj ) ) {
-               return false;
-       }
-
-       if ( obj.nodeType === 1 && length ) {
-               return true;
-       }
-
-       return type === "array" || length === 0 ||
-               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.2.0-pre
- * http://sizzlejs.com/
- *
- * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-12-16
- */
-(function( window ) {
-
-var i,
-       support,
-       Expr,
-       getText,
-       isXML,
-       tokenize,
-       compile,
-       select,
-       outermostContext,
-       sortInput,
-       hasDuplicate,
-
-       // Local document vars
-       setDocument,
-       document,
-       docElem,
-       documentIsHTML,
-       rbuggyQSA,
-       rbuggyMatches,
-       matches,
-       contains,
-
-       // Instance-specific data
-       expando = "sizzle" + 1 * new Date(),
-       preferredDoc = window.document,
-       dirruns = 0,
-       done = 0,
-       classCache = createCache(),
-       tokenCache = createCache(),
-       compilerCache = createCache(),
-       sortOrder = function( a, b ) {
-               if ( a === b ) {
-                       hasDuplicate = true;
-               }
-               return 0;
-       },
-
-       // General-purpose constants
-       MAX_NEGATIVE = 1 << 31,
-
-       // Instance methods
-       hasOwn = ({}).hasOwnProperty,
-       arr = [],
-       pop = arr.pop,
-       push_native = arr.push,
-       push = arr.push,
-       slice = arr.slice,
-       // Use a stripped-down indexOf as it's faster than native
-       // http://jsperf.com/thor-indexof-vs-for/5
-       indexOf = function( list, elem ) {
-               var i = 0,
-                       len = list.length;
-               for ( ; i < len; i++ ) {
-                       if ( list[i] === elem ) {
-                               return i;
-                       }
-               }
-               return -1;
-       },
-
-       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-       // Regular expressions
-
-       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
-       whitespace = "[\\x20\\t\\r\\n\\f]",
-       // http://www.w3.org/TR/css3-syntax/#characters
-       characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
-       // Loosely modeled on CSS identifier characters
-       // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
-       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-       identifier = characterEncoding.replace( "w", "w#" ),
-
-       // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
-       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
-               // Operator (capture 2)
-               "*([*^$|!~]?=)" + whitespace +
-               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
-               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
-               "*\\]",
-
-       pseudos = ":(" + characterEncoding + ")(?:\\((" +
-               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
-               // 1. quoted (capture 3; capture 4 or capture 5)
-               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-               // 2. simple (capture 6)
-               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-               // 3. anything else (capture 2)
-               ".*" +
-               ")\\)|)",
-
-       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
-       rwhitespace = new RegExp( whitespace + "+", "g" ),
-       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
-       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
-       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
-       rpseudo = new RegExp( pseudos ),
-       ridentifier = new RegExp( "^" + identifier + "$" ),
-
-       matchExpr = {
-               "ID": new RegExp( "^#(" + characterEncoding + ")" ),
-               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
-               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
-               "ATTR": new RegExp( "^" + attributes ),
-               "PSEUDO": new RegExp( "^" + pseudos ),
-               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
-                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
-               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-               // For use in libraries implementing .is()
-               // We use this for POS matching in `select`
-               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
-       },
-
-       rinputs = /^(?:input|select|textarea|button)$/i,
-       rheader = /^h\d$/i,
-
-       rnative = /^[^{]+\{\s*\[native \w/,
-
-       // Easily-parseable/retrievable ID or TAG or CLASS selectors
-       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-       rsibling = /[+~]/,
-       rescape = /'|\\/g,
-
-       // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
-       funescape = function( _, escaped, escapedWhitespace ) {
-               var high = "0x" + escaped - 0x10000;
-               // NaN means non-codepoint
-               // Support: Firefox<24
-               // Workaround erroneous numeric interpretation of +"0x"
-               return high !== high || escapedWhitespace ?
-                       escaped :
-                       high < 0 ?
-                               // BMP codepoint
-                               String.fromCharCode( high + 0x10000 ) :
-                               // Supplemental Plane codepoint (surrogate pair)
-                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
-       },
-
-       // Used for iframes
-       // See setDocument()
-       // Removing the function wrapper causes a "Permission Denied"
-       // error in IE
-       unloadHandler = function() {
-               setDocument();
-       };
-
-// Optimize for push.apply( _, NodeList )
-try {
-       push.apply(
-               (arr = slice.call( preferredDoc.childNodes )),
-               preferredDoc.childNodes
-       );
-       // Support: Android<4.0
-       // Detect silently failing push.apply
-       arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
-       push = { apply: arr.length ?
-
-               // Leverage slice if possible
-               function( target, els ) {
-                       push_native.apply( target, slice.call(els) );
-               } :
-
-               // Support: IE<9
-               // Otherwise append directly
-               function( target, els ) {
-                       var j = target.length,
-                               i = 0;
-                       // Can't trust NodeList.length
-                       while ( (target[j++] = els[i++]) ) {}
-                       target.length = j - 1;
-               }
-       };
-}
-
-function Sizzle( selector, context, results, seed ) {
-       var match, elem, m, nodeType,
-               // QSA vars
-               i, groups, old, nid, newContext, newSelector;
-
-       if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-               setDocument( context );
-       }
-
-       context = context || document;
-       results = results || [];
-       nodeType = context.nodeType;
-
-       if ( typeof selector !== "string" || !selector ||
-               nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
-               return results;
-       }
-
-       if ( !seed && documentIsHTML ) {
-
-               // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
-               if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-                       // Speed-up: Sizzle("#ID")
-                       if ( (m = match[1]) ) {
-                               if ( nodeType === 9 ) {
-                                       elem = context.getElementById( m );
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document (jQuery #6963)
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE, Opera, and Webkit return items
-                                               // by name instead of ID
-                                               if ( elem.id === m ) {
-                                                       results.push( elem );
-                                                       return results;
-                                               }
-                                       } else {
-                                               return results;
-                                       }
-                               } else {
-                                       // Context is not a document
-                                       if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
-                                               contains( context, elem ) && elem.id === m ) {
-                                               results.push( elem );
-                                               return results;
-                                       }
-                               }
-
-                       // Speed-up: Sizzle("TAG")
-                       } else if ( match[2] ) {
-                               push.apply( results, context.getElementsByTagName( selector ) );
-                               return results;
-
-                       // Speed-up: Sizzle(".CLASS")
-                       } else if ( (m = match[3]) && support.getElementsByClassName ) {
-                               push.apply( results, context.getElementsByClassName( m ) );
-                               return results;
-                       }
-               }
-
-               // QSA path
-               if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-                       nid = old = expando;
-                       newContext = context;
-                       newSelector = nodeType !== 1 && selector;
-
-                       // qSA works strangely on Element-rooted queries
-                       // We can work around this by specifying an extra ID on the root
-                       // and working up from there (Thanks to Andrew Dupont for the technique)
-                       // IE 8 doesn't work on object elements
-                       if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-                               groups = tokenize( selector );
-
-                               if ( (old = context.getAttribute("id")) ) {
-                                       nid = old.replace( rescape, "\\$&" );
-                               } else {
-                                       context.setAttribute( "id", nid );
-                               }
-                               nid = "[id='" + nid + "'] ";
-
-                               i = groups.length;
-                               while ( i-- ) {
-                                       groups[i] = nid + toSelector( groups[i] );
-                               }
-                               newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
-                               newSelector = groups.join(",");
-                       }
-
-                       if ( newSelector ) {
-                               try {
-                                       push.apply( results,
-                                               newContext.querySelectorAll( newSelector )
-                                       );
-                                       return results;
-                               } catch(qsaError) {
-                               } finally {
-                                       if ( !old ) {
-                                               context.removeAttribute("id");
-                                       }
-                               }
-                       }
-               }
-       }
-
-       // All others
-       return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- *     deleting the oldest entry
- */
-function createCache() {
-       var keys = [];
-
-       function cache( key, value ) {
-               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
-               if ( keys.push( key + " " ) > Expr.cacheLength ) {
-                       // Only keep the most recent entries
-                       delete cache[ keys.shift() ];
-               }
-               return (cache[ key + " " ] = value);
-       }
-       return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-       fn[ expando ] = true;
-       return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
-       var div = document.createElement("div");
-
-       try {
-               return !!fn( div );
-       } catch (e) {
-               return false;
-       } finally {
-               // Remove from its parent by default
-               if ( div.parentNode ) {
-                       div.parentNode.removeChild( div );
-               }
-               // release memory in IE
-               div = null;
-       }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
-       var arr = attrs.split("|"),
-               i = attrs.length;
-
-       while ( i-- ) {
-               Expr.attrHandle[ arr[i] ] = handler;
-       }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
-       var cur = b && a,
-               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-                       ( ~b.sourceIndex || MAX_NEGATIVE ) -
-                       ( ~a.sourceIndex || MAX_NEGATIVE );
-
-       // Use IE sourceIndex if available on both nodes
-       if ( diff ) {
-               return diff;
-       }
-
-       // Check if b follows a
-       if ( cur ) {
-               while ( (cur = cur.nextSibling) ) {
-                       if ( cur === b ) {
-                               return -1;
-                       }
-               }
-       }
-
-       return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return name === "input" && elem.type === type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return (name === "input" || name === "button") && elem.type === type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
-       return markFunction(function( argument ) {
-               argument = +argument;
-               return markFunction(function( seed, matches ) {
-                       var j,
-                               matchIndexes = fn( [], seed.length, argument ),
-                               i = matchIndexes.length;
-
-                       // Match elements found at the specified indexes
-                       while ( i-- ) {
-                               if ( seed[ (j = matchIndexes[i]) ] ) {
-                                       seed[j] = !(matches[j] = seed[j]);
-                               }
-                       }
-               });
-       });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
-       return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833)
-       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
-       var hasCompare, parent,
-               doc = node ? node.ownerDocument || node : preferredDoc;
-
-       // If no document and documentElement is available, return
-       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
-               return document;
-       }
-
-       // Set our document
-       document = doc;
-       docElem = doc.documentElement;
-       parent = doc.defaultView;
-
-       // Support: IE>8
-       // If iframe document is assigned to "document" variable and if iframe has been reloaded,
-       // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
-       // IE6-8 do not support the defaultView property so parent will be undefined
-       if ( parent && parent !== parent.top ) {
-               // IE11 does not have attachEvent, so all must suffer
-               if ( parent.addEventListener ) {
-                       parent.addEventListener( "unload", unloadHandler, false );
-               } else if ( parent.attachEvent ) {
-                       parent.attachEvent( "onunload", unloadHandler );
-               }
-       }
-
-       /* Support tests
-       ---------------------------------------------------------------------- */
-       documentIsHTML = !isXML( doc );
-
-       /* Attributes
-       ---------------------------------------------------------------------- */
-
-       // Support: IE<8
-       // Verify that getAttribute really returns attributes and not properties
-       // (excepting IE8 booleans)
-       support.attributes = assert(function( div ) {
-               div.className = "i";
-               return !div.getAttribute("className");
-       });
-
-       /* getElement(s)By*
-       ---------------------------------------------------------------------- */
-
-       // Check if getElementsByTagName("*") returns only elements
-       support.getElementsByTagName = assert(function( div ) {
-               div.appendChild( doc.createComment("") );
-               return !div.getElementsByTagName("*").length;
-       });
-
-       // Support: IE<9
-       support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
-
-       // Support: IE<10
-       // Check if getElementById returns elements by name
-       // The broken getElementById methods don't pick up programatically-set names,
-       // so use a roundabout getElementsByName test
-       support.getById = assert(function( div ) {
-               docElem.appendChild( div ).id = expando;
-               return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
-       });
-
-       // ID find and filter
-       if ( support.getById ) {
-               Expr.find["ID"] = function( id, context ) {
-                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
-                               var m = context.getElementById( id );
-                               // Check parentNode to catch when Blackberry 4.6 returns
-                               // nodes that are no longer in the document #6963
-                               return m && m.parentNode ? [ m ] : [];
-                       }
-               };
-               Expr.filter["ID"] = function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               return elem.getAttribute("id") === attrId;
-                       };
-               };
-       } else {
-               // Support: IE6/7
-               // getElementById is not reliable as a find shortcut
-               delete Expr.find["ID"];
-
-               Expr.filter["ID"] =  function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-                               return node && node.value === attrId;
-                       };
-               };
-       }
-
-       // Tag
-       Expr.find["TAG"] = support.getElementsByTagName ?
-               function( tag, context ) {
-                       if ( typeof context.getElementsByTagName !== "undefined" ) {
-                               return context.getElementsByTagName( tag );
-
-                       // DocumentFragment nodes don't have gEBTN
-                       } else if ( support.qsa ) {
-                               return context.querySelectorAll( tag );
-                       }
-               } :
-
-               function( tag, context ) {
-                       var elem,
-                               tmp = [],
-                               i = 0,
-                               // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
-                               results = context.getElementsByTagName( tag );
-
-                       // Filter out possible comments
-                       if ( tag === "*" ) {
-                               while ( (elem = results[i++]) ) {
-                                       if ( elem.nodeType === 1 ) {
-                                               tmp.push( elem );
-                                       }
-                               }
-
-                               return tmp;
-                       }
-                       return results;
-               };
-
-       // Class
-       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-               if ( documentIsHTML ) {
-                       return context.getElementsByClassName( className );
-               }
-       };
-
-       /* QSA/matchesSelector
-       ---------------------------------------------------------------------- */
-
-       // QSA and matchesSelector support
-
-       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
-       rbuggyMatches = [];
-
-       // qSa(:focus) reports false when true (Chrome 21)
-       // We allow this because of a bug in IE8/9 that throws an error
-       // whenever `document.activeElement` is accessed on an iframe
-       // So, we allow :focus to pass through QSA all the time to avoid the IE error
-       // See http://bugs.jquery.com/ticket/13378
-       rbuggyQSA = [];
-
-       if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
-               // Build QSA regex
-               // Regex strategy adopted from Diego Perini
-               assert(function( div ) {
-                       // Select is set to empty string on purpose
-                       // This is to test IE's treatment of not explicitly
-                       // setting a boolean content attribute,
-                       // since its presence should be enough
-                       // http://bugs.jquery.com/ticket/12359
-                       docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
-                               "<select id='" + expando + "-\f]' msallowcapture=''>" +
-                               "<option selected=''></option></select>";
-
-                       // Support: IE8, Opera 11-12.16
-                       // Nothing should be selected when empty strings follow ^= or $= or *=
-                       // The test attribute must be unknown in Opera but "safe" for WinRT
-                       // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-                       if ( div.querySelectorAll("[msallowcapture^='']").length ) {
-                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
-                       }
-
-                       // Support: IE8
-                       // Boolean attributes and "value" are not treated correctly
-                       if ( !div.querySelectorAll("[selected]").length ) {
-                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
-                       }
-
-                       // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
-                       if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
-                               rbuggyQSA.push("~=");
-                       }
-
-                       // Webkit/Opera - :checked should return selected option elements
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":checked").length ) {
-                               rbuggyQSA.push(":checked");
-                       }
-
-                       // Support: Safari 8+, iOS 8+
-                       // https://bugs.webkit.org/show_bug.cgi?id=136851
-                       // In-page `selector#id sibing-combinator selector` fails
-                       if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
-                               rbuggyQSA.push(".#.+[+~]");
-                       }
-               });
-
-               assert(function( div ) {
-                       // Support: Windows 8 Native Apps
-                       // The type and name attributes are restricted during .innerHTML assignment
-                       var input = doc.createElement("input");
-                       input.setAttribute( "type", "hidden" );
-                       div.appendChild( input ).setAttribute( "name", "D" );
-
-                       // Support: IE8
-                       // Enforce case-sensitivity of name attribute
-                       if ( div.querySelectorAll("[name=d]").length ) {
-                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
-                       }
-
-                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
-                       // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":enabled").length ) {
-                               rbuggyQSA.push( ":enabled", ":disabled" );
-                       }
-
-                       // Opera 10-11 does not throw on post-comma invalid pseudos
-                       div.querySelectorAll("*,:x");
-                       rbuggyQSA.push(",.*:");
-               });
-       }
-
-       if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
-               docElem.webkitMatchesSelector ||
-               docElem.mozMatchesSelector ||
-               docElem.oMatchesSelector ||
-               docElem.msMatchesSelector) )) ) {
-
-               assert(function( div ) {
-                       // Check to see if it's possible to do matchesSelector
-                       // on a disconnected node (IE 9)
-                       support.disconnectedMatch = matches.call( div, "div" );
-
-                       // This should fail with an exception
-                       // Gecko does not error, returns false instead
-                       matches.call( div, "[s!='']:x" );
-                       rbuggyMatches.push( "!=", pseudos );
-               });
-       }
-
-       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
-       /* Contains
-       ---------------------------------------------------------------------- */
-       hasCompare = rnative.test( docElem.compareDocumentPosition );
-
-       // Element contains another
-       // Purposefully does not implement inclusive descendent
-       // As in, an element does not contain itself
-       contains = hasCompare || rnative.test( docElem.contains ) ?
-               function( a, b ) {
-                       var adown = a.nodeType === 9 ? a.documentElement : a,
-                               bup = b && b.parentNode;
-                       return a === bup || !!( bup && bup.nodeType === 1 && (
-                               adown.contains ?
-                                       adown.contains( bup ) :
-                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
-                       ));
-               } :
-               function( a, b ) {
-                       if ( b ) {
-                               while ( (b = b.parentNode) ) {
-                                       if ( b === a ) {
-                                               return true;
-                                       }
-                               }
-                       }
-                       return false;
-               };
-
-       /* Sorting
-       ---------------------------------------------------------------------- */
-
-       // Document order sorting
-       sortOrder = hasCompare ?
-       function( a, b ) {
-
-               // Flag for duplicate removal
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               // Sort on method existence if only one input has compareDocumentPosition
-               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
-               if ( compare ) {
-                       return compare;
-               }
-
-               // Calculate position if both inputs belong to the same document
-               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
-                       a.compareDocumentPosition( b ) :
-
-                       // Otherwise we know they are disconnected
-                       1;
-
-               // Disconnected nodes
-               if ( compare & 1 ||
-                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
-                       // Choose the first element that is related to our preferred document
-                       if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
-                               return -1;
-                       }
-                       if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
-                               return 1;
-                       }
-
-                       // Maintain original order
-                       return sortInput ?
-                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-                               0;
-               }
-
-               return compare & 4 ? -1 : 1;
-       } :
-       function( a, b ) {
-               // Exit early if the nodes are identical
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               var cur,
-                       i = 0,
-                       aup = a.parentNode,
-                       bup = b.parentNode,
-                       ap = [ a ],
-                       bp = [ b ];
-
-               // Parentless nodes are either documents or disconnected
-               if ( !aup || !bup ) {
-                       return a === doc ? -1 :
-                               b === doc ? 1 :
-                               aup ? -1 :
-                               bup ? 1 :
-                               sortInput ?
-                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-                               0;
-
-               // If the nodes are siblings, we can do a quick check
-               } else if ( aup === bup ) {
-                       return siblingCheck( a, b );
-               }
-
-               // Otherwise we need full lists of their ancestors for comparison
-               cur = a;
-               while ( (cur = cur.parentNode) ) {
-                       ap.unshift( cur );
-               }
-               cur = b;
-               while ( (cur = cur.parentNode) ) {
-                       bp.unshift( cur );
-               }
-
-               // Walk down the tree looking for a discrepancy
-               while ( ap[i] === bp[i] ) {
-                       i++;
-               }
-
-               return i ?
-                       // Do a sibling check if the nodes have a common ancestor
-                       siblingCheck( ap[i], bp[i] ) :
-
-                       // Otherwise nodes in our document sort first
-                       ap[i] === preferredDoc ? -1 :
-                       bp[i] === preferredDoc ? 1 :
-                       0;
-       };
-
-       return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
-       return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       // Make sure that attribute selectors are quoted
-       expr = expr.replace( rattributeQuotes, "='$1']" );
-
-       if ( support.matchesSelector && documentIsHTML &&
-               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
-               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
-
-               try {
-                       var ret = matches.call( elem, expr );
-
-                       // IE 9's matchesSelector returns false on disconnected nodes
-                       if ( ret || support.disconnectedMatch ||
-                                       // As well, disconnected nodes are said to be in a document
-                                       // fragment in IE 9
-                                       elem.document && elem.document.nodeType !== 11 ) {
-                               return ret;
-                       }
-               } catch (e) {}
-       }
-
-       return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-       // Set document vars if needed
-       if ( ( context.ownerDocument || context ) !== document ) {
-               setDocument( context );
-       }
-       return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       var fn = Expr.attrHandle[ name.toLowerCase() ],
-               // Don't get fooled by Object.prototype properties (jQuery #13807)
-               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
-                       fn( elem, name, !documentIsHTML ) :
-                       undefined;
-
-       return val !== undefined ?
-               val :
-               support.attributes || !documentIsHTML ?
-                       elem.getAttribute( name ) :
-                       (val = elem.getAttributeNode(name)) && val.specified ?
-                               val.value :
-                               null;
-};
-
-Sizzle.error = function( msg ) {
-       throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
-       var elem,
-               duplicates = [],
-               j = 0,
-               i = 0;
-
-       // Unless we *know* we can detect duplicates, assume their presence
-       hasDuplicate = !support.detectDuplicates;
-       sortInput = !support.sortStable && results.slice( 0 );
-       results.sort( sortOrder );
-
-       if ( hasDuplicate ) {
-               while ( (elem = results[i++]) ) {
-                       if ( elem === results[ i ] ) {
-                               j = duplicates.push( i );
-                       }
-               }
-               while ( j-- ) {
-                       results.splice( duplicates[ j ], 1 );
-               }
-       }
-
-       // Clear input after sorting to release objects
-       // See https://github.com/jquery/sizzle/pull/225
-       sortInput = null;
-
-       return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
-       var node,
-               ret = "",
-               i = 0,
-               nodeType = elem.nodeType;
-
-       if ( !nodeType ) {
-               // If no nodeType, this is expected to be an array
-               while ( (node = elem[i++]) ) {
-                       // Do not traverse comment nodes
-                       ret += getText( node );
-               }
-       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-               // Use textContent for elements
-               // innerText usage removed for consistency of new lines (jQuery #11153)
-               if ( typeof elem.textContent === "string" ) {
-                       return elem.textContent;
-               } else {
-                       // Traverse its children
-                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-                               ret += getText( elem );
-                       }
-               }
-       } else if ( nodeType === 3 || nodeType === 4 ) {
-               return elem.nodeValue;
-       }
-       // Do not include comment or processing instruction nodes
-
-       return ret;
-};
-
-Expr = Sizzle.selectors = {
-
-       // Can be adjusted by the user
-       cacheLength: 50,
-
-       createPseudo: markFunction,
-
-       match: matchExpr,
-
-       attrHandle: {},
-
-       find: {},
-
-       relative: {
-               ">": { dir: "parentNode", first: true },
-               " ": { dir: "parentNode" },
-               "+": { dir: "previousSibling", first: true },
-               "~": { dir: "previousSibling" }
-       },
-
-       preFilter: {
-               "ATTR": function( match ) {
-                       match[1] = match[1].replace( runescape, funescape );
-
-                       // Move the given value to match[3] whether quoted or unquoted
-                       match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
-                       if ( match[2] === "~=" ) {
-                               match[3] = " " + match[3] + " ";
-                       }
-
-                       return match.slice( 0, 4 );
-               },
-
-               "CHILD": function( match ) {
-                       /* matches from matchExpr["CHILD"]
-                               1 type (only|nth|...)
-                               2 what (child|of-type)
-                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
-                               4 xn-component of xn+y argument ([+-]?\d*n|)
-                               5 sign of xn-component
-                               6 x of xn-component
-                               7 sign of y-component
-                               8 y of y-component
-                       */
-                       match[1] = match[1].toLowerCase();
-
-                       if ( match[1].slice( 0, 3 ) === "nth" ) {
-                               // nth-* requires argument
-                               if ( !match[3] ) {
-                                       Sizzle.error( match[0] );
-                               }
-
-                               // numeric x and y parameters for Expr.filter.CHILD
-                               // remember that false/true cast respectively to 0/1
-                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
-                       // other types prohibit arguments
-                       } else if ( match[3] ) {
-                               Sizzle.error( match[0] );
-                       }
-
-                       return match;
-               },
-
-               "PSEUDO": function( match ) {
-                       var excess,
-                               unquoted = !match[6] && match[2];
-
-                       if ( matchExpr["CHILD"].test( match[0] ) ) {
-                               return null;
-                       }
-
-                       // Accept quoted arguments as-is
-                       if ( match[3] ) {
-                               match[2] = match[4] || match[5] || "";
-
-                       // Strip excess characters from unquoted arguments
-                       } else if ( unquoted && rpseudo.test( unquoted ) &&
-                               // Get excess from tokenize (recursively)
-                               (excess = tokenize( unquoted, true )) &&
-                               // advance to the next closing parenthesis
-                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
-                               // excess is a negative index
-                               match[0] = match[0].slice( 0, excess );
-                               match[2] = unquoted.slice( 0, excess );
-                       }
-
-                       // Return only captures needed by the pseudo filter method (type and argument)
-                       return match.slice( 0, 3 );
-               }
-       },
-
-       filter: {
-
-               "TAG": function( nodeNameSelector ) {
-                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
-                       return nodeNameSelector === "*" ?
-                               function() { return true; } :
-                               function( elem ) {
-                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-                               };
-               },
-
-               "CLASS": function( className ) {
-                       var pattern = classCache[ className + " " ];
-
-                       return pattern ||
-                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
-                               classCache( className, function( elem ) {
-                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
-                               });
-               },
-
-               "ATTR": function( name, operator, check ) {
-                       return function( elem ) {
-                               var result = Sizzle.attr( elem, name );
-
-                               if ( result == null ) {
-                                       return operator === "!=";
-                               }
-                               if ( !operator ) {
-                                       return true;
-                               }
-
-                               result += "";
-
-                               return operator === "=" ? result === check :
-                                       operator === "!=" ? result !== check :
-                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
-                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
-                                       operator === "$=" ? check && result.slice( -check.length ) === check :
-                                       operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
-                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
-                                       false;
-                       };
-               },
-
-               "CHILD": function( type, what, argument, first, last ) {
-                       var simple = type.slice( 0, 3 ) !== "nth",
-                               forward = type.slice( -4 ) !== "last",
-                               ofType = what === "of-type";
-
-                       return first === 1 && last === 0 ?
-
-                               // Shortcut for :nth-*(n)
-                               function( elem ) {
-                                       return !!elem.parentNode;
-                               } :
-
-                               function( elem, context, xml ) {
-                                       var cache, outerCache, node, diff, nodeIndex, start,
-                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
-                                               parent = elem.parentNode,
-                                               name = ofType && elem.nodeName.toLowerCase(),
-                                               useCache = !xml && !ofType;
-
-                                       if ( parent ) {
-
-                                               // :(first|last|only)-(child|of-type)
-                                               if ( simple ) {
-                                                       while ( dir ) {
-                                                               node = elem;
-                                                               while ( (node = node[ dir ]) ) {
-                                                                       if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
-                                                                               return false;
-                                                                       }
-                                                               }
-                                                               // Reverse direction for :only-* (if we haven't yet done so)
-                                                               start = dir = type === "only" && !start && "nextSibling";
-                                                       }
-                                                       return true;
-                                               }
-
-                                               start = [ forward ? parent.firstChild : parent.lastChild ];
-
-                                               // non-xml :nth-child(...) stores cache data on `parent`
-                                               if ( forward && useCache ) {
-                                                       // Seek `elem` from a previously-cached index
-                                                       outerCache = parent[ expando ] || (parent[ expando ] = {});
-                                                       cache = outerCache[ type ] || [];
-                                                       nodeIndex = cache[0] === dirruns && cache[1];
-                                                       diff = cache[0] === dirruns && cache[2];
-                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
-
-                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
-
-                                                               // Fallback to seeking `elem` from the start
-                                                               (diff = nodeIndex = 0) || start.pop()) ) {
-
-                                                               // When found, cache indexes on `parent` and break
-                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
-                                                                       outerCache[ type ] = [ dirruns, nodeIndex, diff ];
-                                                                       break;
-                                                               }
-                                                       }
-
-                                               // Use previously-cached element index if available
-                                               } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
-                                                       diff = cache[1];
-
-                                               // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
-                                               } else {
-                                                       // Use the same loop as above to seek `elem` from the start
-                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
-                                                               (diff = nodeIndex = 0) || start.pop()) ) {
-
-                                                               if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
-                                                                       // Cache the index of each encountered element
-                                                                       if ( useCache ) {
-                                                                               (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
-                                                                       }
-
-                                                                       if ( node === elem ) {
-                                                                               break;
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-
-                                               // Incorporate the offset, then check against cycle size
-                                               diff -= last;
-                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
-                                       }
-                               };
-               },
-
-               "PSEUDO": function( pseudo, argument ) {
-                       // pseudo-class names are case-insensitive
-                       // http://www.w3.org/TR/selectors/#pseudo-classes
-                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
-                       // Remember that setFilters inherits from pseudos
-                       var args,
-                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
-                                       Sizzle.error( "unsupported pseudo: " + pseudo );
-
-                       // The user may use createPseudo to indicate that
-                       // arguments are needed to create the filter function
-                       // just as Sizzle does
-                       if ( fn[ expando ] ) {
-                               return fn( argument );
-                       }
-
-                       // But maintain support for old signatures
-                       if ( fn.length > 1 ) {
-                               args = [ pseudo, pseudo, "", argument ];
-                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
-                                       markFunction(function( seed, matches ) {
-                                               var idx,
-                                                       matched = fn( seed, argument ),
-                                                       i = matched.length;
-                                               while ( i-- ) {
-                                                       idx = indexOf( seed, matched[i] );
-                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
-                                               }
-                                       }) :
-                                       function( elem ) {
-                                               return fn( elem, 0, args );
-                                       };
-                       }
-
-                       return fn;
-               }
-       },
-
-       pseudos: {
-               // Potentially complex pseudos
-               "not": markFunction(function( selector ) {
-                       // Trim the selector passed to compile
-                       // to avoid treating leading and trailing
-                       // spaces as combinators
-                       var input = [],
-                               results = [],
-                               matcher = compile( selector.replace( rtrim, "$1" ) );
-
-                       return matcher[ expando ] ?
-                               markFunction(function( seed, matches, context, xml ) {
-                                       var elem,
-                                               unmatched = matcher( seed, null, xml, [] ),
-                                               i = seed.length;
-
-                                       // Match elements unmatched by `matcher`
-                                       while ( i-- ) {
-                                               if ( (elem = unmatched[i]) ) {
-                                                       seed[i] = !(matches[i] = elem);
-                                               }
-                                       }
-                               }) :
-                               function( elem, context, xml ) {
-                                       input[0] = elem;
-                                       matcher( input, null, xml, results );
-                                       // Don't keep the element (issue #299)
-                                       input[0] = null;
-                                       return !results.pop();
-                               };
-               }),
-
-               "has": markFunction(function( selector ) {
-                       return function( elem ) {
-                               return Sizzle( selector, elem ).length > 0;
-                       };
-               }),
-
-               "contains": markFunction(function( text ) {
-                       text = text.replace( runescape, funescape );
-                       return function( elem ) {
-                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
-                       };
-               }),
-
-               // "Whether an element is represented by a :lang() selector
-               // is based solely on the element's language value
-               // being equal to the identifier C,
-               // or beginning with the identifier C immediately followed by "-".
-               // The matching of C against the element's language value is performed case-insensitively.
-               // The identifier C does not have to be a valid language name."
-               // http://www.w3.org/TR/selectors/#lang-pseudo
-               "lang": markFunction( function( lang ) {
-                       // lang value must be a valid identifier
-                       if ( !ridentifier.test(lang || "") ) {
-                               Sizzle.error( "unsupported lang: " + lang );
-                       }
-                       lang = lang.replace( runescape, funescape ).toLowerCase();
-                       return function( elem ) {
-                               var elemLang;
-                               do {
-                                       if ( (elemLang = documentIsHTML ?
-                                               elem.lang :
-                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
-                                               elemLang = elemLang.toLowerCase();
-                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
-                                       }
-                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
-                               return false;
-                       };
-               }),
-
-               // Miscellaneous
-               "target": function( elem ) {
-                       var hash = window.location && window.location.hash;
-                       return hash && hash.slice( 1 ) === elem.id;
-               },
-
-               "root": function( elem ) {
-                       return elem === docElem;
-               },
-
-               "focus": function( elem ) {
-                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-               },
-
-               // Boolean properties
-               "enabled": function( elem ) {
-                       return elem.disabled === false;
-               },
-
-               "disabled": function( elem ) {
-                       return elem.disabled === true;
-               },
-
-               "checked": function( elem ) {
-                       // In CSS3, :checked should return both checked and selected elements
-                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       var nodeName = elem.nodeName.toLowerCase();
-                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
-               },
-
-               "selected": function( elem ) {
-                       // Accessing this property makes selected-by-default
-                       // options in Safari work properly
-                       if ( elem.parentNode ) {
-                               elem.parentNode.selectedIndex;
-                       }
-
-                       return elem.selected === true;
-               },
-
-               // Contents
-               "empty": function( elem ) {
-                       // http://www.w3.org/TR/selectors/#empty-pseudo
-                       // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
-                       //   but not by others (comment: 8; processing instruction: 7; etc.)
-                       // nodeType < 6 works because attributes (2) do not appear as children
-                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-                               if ( elem.nodeType < 6 ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               },
-
-               "parent": function( elem ) {
-                       return !Expr.pseudos["empty"]( elem );
-               },
-
-               // Element/input types
-               "header": function( elem ) {
-                       return rheader.test( elem.nodeName );
-               },
-
-               "input": function( elem ) {
-                       return rinputs.test( elem.nodeName );
-               },
-
-               "button": function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return name === "input" && elem.type === "button" || name === "button";
-               },
-
-               "text": function( elem ) {
-                       var attr;
-                       return elem.nodeName.toLowerCase() === "input" &&
-                               elem.type === "text" &&
-
-                               // Support: IE<8
-                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
-                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
-               },
-
-               // Position-in-collection
-               "first": createPositionalPseudo(function() {
-                       return [ 0 ];
-               }),
-
-               "last": createPositionalPseudo(function( matchIndexes, length ) {
-                       return [ length - 1 ];
-               }),
-
-               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       return [ argument < 0 ? argument + length : argument ];
-               }),
-
-               "even": createPositionalPseudo(function( matchIndexes, length ) {
-                       var i = 0;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "odd": createPositionalPseudo(function( matchIndexes, length ) {
-                       var i = 1;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; --i >= 0; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; ++i < length; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               })
-       }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
-       Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
-       Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
-       var matched, match, tokens, type,
-               soFar, groups, preFilters,
-               cached = tokenCache[ selector + " " ];
-
-       if ( cached ) {
-               return parseOnly ? 0 : cached.slice( 0 );
-       }
-
-       soFar = selector;
-       groups = [];
-       preFilters = Expr.preFilter;
-
-       while ( soFar ) {
-
-               // Comma and first run
-               if ( !matched || (match = rcomma.exec( soFar )) ) {
-                       if ( match ) {
-                               // Don't consume trailing commas as valid
-                               soFar = soFar.slice( match[0].length ) || soFar;
-                       }
-                       groups.push( (tokens = []) );
-               }
-
-               matched = false;
-
-               // Combinators
-               if ( (match = rcombinators.exec( soFar )) ) {
-                       matched = match.shift();
-                       tokens.push({
-                               value: matched,
-                               // Cast descendant combinators to space
-                               type: match[0].replace( rtrim, " " )
-                       });
-                       soFar = soFar.slice( matched.length );
-               }
-
-               // Filters
-               for ( type in Expr.filter ) {
-                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
-                               (match = preFilters[ type ]( match ))) ) {
-                               matched = match.shift();
-                               tokens.push({
-                                       value: matched,
-                                       type: type,
-                                       matches: match
-                               });
-                               soFar = soFar.slice( matched.length );
-                       }
-               }
-
-               if ( !matched ) {
-                       break;
-               }
-       }
-
-       // Return the length of the invalid excess
-       // if we're just parsing
-       // Otherwise, throw an error or return tokens
-       return parseOnly ?
-               soFar.length :
-               soFar ?
-                       Sizzle.error( selector ) :
-                       // Cache the tokens
-                       tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
-       var i = 0,
-               len = tokens.length,
-               selector = "";
-       for ( ; i < len; i++ ) {
-               selector += tokens[i].value;
-       }
-       return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
-       var dir = combinator.dir,
-               checkNonElements = base && dir === "parentNode",
-               doneName = done++;
-
-       return combinator.first ?
-               // Check against closest ancestor/preceding element
-               function( elem, context, xml ) {
-                       while ( (elem = elem[ dir ]) ) {
-                               if ( elem.nodeType === 1 || checkNonElements ) {
-                                       return matcher( elem, context, xml );
-                               }
-                       }
-               } :
-
-               // Check against all ancestor/preceding elements
-               function( elem, context, xml ) {
-                       var oldCache, outerCache,
-                               newCache = [ dirruns, doneName ];
-
-                       // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
-                       if ( xml ) {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || checkNonElements ) {
-                                               if ( matcher( elem, context, xml ) ) {
-                                                       return true;
-                                               }
-                                       }
-                               }
-                       } else {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || checkNonElements ) {
-                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
-                                               if ( (oldCache = outerCache[ dir ]) &&
-                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
-                                                       // Assign to newCache so results back-propagate to previous elements
-                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
-                                               } else {
-                                                       // Reuse newcache so results back-propagate to previous elements
-                                                       outerCache[ dir ] = newCache;
-
-                                                       // A match means we're done; a fail means we have to keep checking
-                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
-                                                               return true;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               };
-}
-
-function elementMatcher( matchers ) {
-       return matchers.length > 1 ?
-               function( elem, context, xml ) {
-                       var i = matchers.length;
-                       while ( i-- ) {
-                               if ( !matchers[i]( elem, context, xml ) ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               } :
-               matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
-       var i = 0,
-               len = contexts.length;
-       for ( ; i < len; i++ ) {
-               Sizzle( selector, contexts[i], results );
-       }
-       return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
-       var elem,
-               newUnmatched = [],
-               i = 0,
-               len = unmatched.length,
-               mapped = map != null;
-
-       for ( ; i < len; i++ ) {
-               if ( (elem = unmatched[i]) ) {
-                       if ( !filter || filter( elem, context, xml ) ) {
-                               newUnmatched.push( elem );
-                               if ( mapped ) {
-                                       map.push( i );
-                               }
-                       }
-               }
-       }
-
-       return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
-       if ( postFilter && !postFilter[ expando ] ) {
-               postFilter = setMatcher( postFilter );
-       }
-       if ( postFinder && !postFinder[ expando ] ) {
-               postFinder = setMatcher( postFinder, postSelector );
-       }
-       return markFunction(function( seed, results, context, xml ) {
-               var temp, i, elem,
-                       preMap = [],
-                       postMap = [],
-                       preexisting = results.length,
-
-                       // Get initial elements from seed or context
-                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
-                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
-                       matcherIn = preFilter && ( seed || !selector ) ?
-                               condense( elems, preMap, preFilter, context, xml ) :
-                               elems,
-
-                       matcherOut = matcher ?
-                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
-                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
-                                       // ...intermediate processing is necessary
-                                       [] :
-
-                                       // ...otherwise use results directly
-                                       results :
-                               matcherIn;
-
-               // Find primary matches
-               if ( matcher ) {
-                       matcher( matcherIn, matcherOut, context, xml );
-               }
-
-               // Apply postFilter
-               if ( postFilter ) {
-                       temp = condense( matcherOut, postMap );
-                       postFilter( temp, [], context, xml );
-
-                       // Un-match failing elements by moving them back to matcherIn
-                       i = temp.length;
-                       while ( i-- ) {
-                               if ( (elem = temp[i]) ) {
-                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
-                               }
-                       }
-               }
-
-               if ( seed ) {
-                       if ( postFinder || preFilter ) {
-                               if ( postFinder ) {
-                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
-                                       temp = [];
-                                       i = matcherOut.length;
-                                       while ( i-- ) {
-                                               if ( (elem = matcherOut[i]) ) {
-                                                       // Restore matcherIn since elem is not yet a final match
-                                                       temp.push( (matcherIn[i] = elem) );
-                                               }
-                                       }
-                                       postFinder( null, (matcherOut = []), temp, xml );
-                               }
-
-                               // Move matched elements from seed to results to keep them synchronized
-                               i = matcherOut.length;
-                               while ( i-- ) {
-                                       if ( (elem = matcherOut[i]) &&
-                                               (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
-                                               seed[temp] = !(results[temp] = elem);
-                                       }
-                               }
-                       }
-
-               // Add elements to results, through postFinder if defined
-               } else {
-                       matcherOut = condense(
-                               matcherOut === results ?
-                                       matcherOut.splice( preexisting, matcherOut.length ) :
-                                       matcherOut
-                       );
-                       if ( postFinder ) {
-                               postFinder( null, results, matcherOut, xml );
-                       } else {
-                               push.apply( results, matcherOut );
-                       }
-               }
-       });
-}
-
-function matcherFromTokens( tokens ) {
-       var checkContext, matcher, j,
-               len = tokens.length,
-               leadingRelative = Expr.relative[ tokens[0].type ],
-               implicitRelative = leadingRelative || Expr.relative[" "],
-               i = leadingRelative ? 1 : 0,
-
-               // The foundational matcher ensures that elements are reachable from top-level context(s)
-               matchContext = addCombinator( function( elem ) {
-                       return elem === checkContext;
-               }, implicitRelative, true ),
-               matchAnyContext = addCombinator( function( elem ) {
-                       return indexOf( checkContext, elem ) > -1;
-               }, implicitRelative, true ),
-               matchers = [ function( elem, context, xml ) {
-                       var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-                               (checkContext = context).nodeType ?
-                                       matchContext( elem, context, xml ) :
-                                       matchAnyContext( elem, context, xml ) );
-                       // Avoid hanging onto element (issue #299)
-                       checkContext = null;
-                       return ret;
-               } ];
-
-       for ( ; i < len; i++ ) {
-               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
-               } else {
-                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
-                       // Return special upon seeing a positional matcher
-                       if ( matcher[ expando ] ) {
-                               // Find the next relative operator (if any) for proper handling
-                               j = ++i;
-                               for ( ; j < len; j++ ) {
-                                       if ( Expr.relative[ tokens[j].type ] ) {
-                                               break;
-                                       }
-                               }
-                               return setMatcher(
-                                       i > 1 && elementMatcher( matchers ),
-                                       i > 1 && toSelector(
-                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
-                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
-                                       ).replace( rtrim, "$1" ),
-                                       matcher,
-                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
-                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
-                                       j < len && toSelector( tokens )
-                               );
-                       }
-                       matchers.push( matcher );
-               }
-       }
-
-       return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
-       var bySet = setMatchers.length > 0,
-               byElement = elementMatchers.length > 0,
-               superMatcher = function( seed, context, xml, results, outermost ) {
-                       var elem, j, matcher,
-                               matchedCount = 0,
-                               i = "0",
-                               unmatched = seed && [],
-                               setMatched = [],
-                               contextBackup = outermostContext,
-                               // We must always have either seed elements or outermost context
-                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
-                               // Use integer dirruns iff this is the outermost matcher
-                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
-                               len = elems.length;
-
-                       if ( outermost ) {
-                               outermostContext = context !== document && context;
-                       }
-
-                       // Add elements passing elementMatchers directly to results
-                       // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
-                       // Support: IE<9, Safari
-                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
-                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
-                               if ( byElement && elem ) {
-                                       j = 0;
-                                       while ( (matcher = elementMatchers[j++]) ) {
-                                               if ( matcher( elem, context, xml ) ) {
-                                                       results.push( elem );
-                                                       break;
-                                               }
-                                       }
-                                       if ( outermost ) {
-                                               dirruns = dirrunsUnique;
-                                       }
-                               }
-
-                               // Track unmatched elements for set filters
-                               if ( bySet ) {
-                                       // They will have gone through all possible matchers
-                                       if ( (elem = !matcher && elem) ) {
-                                               matchedCount--;
-                                       }
-
-                                       // Lengthen the array for every element, matched or not
-                                       if ( seed ) {
-                                               unmatched.push( elem );
-                                       }
-                               }
-                       }
-
-                       // Apply set filters to unmatched elements
-                       matchedCount += i;
-                       if ( bySet && i !== matchedCount ) {
-                               j = 0;
-                               while ( (matcher = setMatchers[j++]) ) {
-                                       matcher( unmatched, setMatched, context, xml );
-                               }
-
-                               if ( seed ) {
-                                       // Reintegrate element matches to eliminate the need for sorting
-                                       if ( matchedCount > 0 ) {
-                                               while ( i-- ) {
-                                                       if ( !(unmatched[i] || setMatched[i]) ) {
-                                                               setMatched[i] = pop.call( results );
-                                                       }
-                                               }
-                                       }
-
-                                       // Discard index placeholder values to get only actual matches
-                                       setMatched = condense( setMatched );
-                               }
-
-                               // Add matches to results
-                               push.apply( results, setMatched );
-
-                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
-                               if ( outermost && !seed && setMatched.length > 0 &&
-                                       ( matchedCount + setMatchers.length ) > 1 ) {
-
-                                       Sizzle.uniqueSort( results );
-                               }
-                       }
-
-                       // Override manipulation of globals by nested matchers
-                       if ( outermost ) {
-                               dirruns = dirrunsUnique;
-                               outermostContext = contextBackup;
-                       }
-
-                       return unmatched;
-               };
-
-       return bySet ?
-               markFunction( superMatcher ) :
-               superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
-       var i,
-               setMatchers = [],
-               elementMatchers = [],
-               cached = compilerCache[ selector + " " ];
-
-       if ( !cached ) {
-               // Generate a function of recursive functions that can be used to check each element
-               if ( !match ) {
-                       match = tokenize( selector );
-               }
-               i = match.length;
-               while ( i-- ) {
-                       cached = matcherFromTokens( match[i] );
-                       if ( cached[ expando ] ) {
-                               setMatchers.push( cached );
-                       } else {
-                               elementMatchers.push( cached );
-                       }
-               }
-
-               // Cache the compiled function
-               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
-               // Save selector and tokenization
-               cached.selector = selector;
-       }
-       return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- *  selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- *  selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
-       var i, tokens, token, type, find,
-               compiled = typeof selector === "function" && selector,
-               match = !seed && tokenize( (selector = compiled.selector || selector) );
-
-       results = results || [];
-
-       // Try to minimize operations if there is no seed and only one group
-       if ( match.length === 1 ) {
-
-               // Take a shortcut and set the context if the root selector is an ID
-               tokens = match[0] = match[0].slice( 0 );
-               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-                               support.getById && context.nodeType === 9 && documentIsHTML &&
-                               Expr.relative[ tokens[1].type ] ) {
-
-                       context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-                       if ( !context ) {
-                               return results;
-
-                       // Precompiled matchers will still verify ancestry, so step up a level
-                       } else if ( compiled ) {
-                               context = context.parentNode;
-                       }
-
-                       selector = selector.slice( tokens.shift().value.length );
-               }
-
-               // Fetch a seed set for right-to-left matching
-               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
-               while ( i-- ) {
-                       token = tokens[i];
-
-                       // Abort if we hit a combinator
-                       if ( Expr.relative[ (type = token.type) ] ) {
-                               break;
-                       }
-                       if ( (find = Expr.find[ type ]) ) {
-                               // Search, expanding context for leading sibling combinators
-                               if ( (seed = find(
-                                       token.matches[0].replace( runescape, funescape ),
-                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
-                               )) ) {
-
-                                       // If seed is empty or no tokens remain, we can return early
-                                       tokens.splice( i, 1 );
-                                       selector = seed.length && toSelector( tokens );
-                                       if ( !selector ) {
-                                               push.apply( results, seed );
-                                               return results;
-                                       }
-
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       // Compile and execute a filtering function if one is not provided
-       // Provide `match` to avoid retokenization if we modified the selector above
-       ( compiled || compile( selector, match ) )(
-               seed,
-               context,
-               !documentIsHTML,
-               results,
-               rsibling.test( selector ) && testContext( context.parentNode ) || context
-       );
-       return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
-       // Should return 1, but returns 4 (following)
-       return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
-       div.innerHTML = "<a href='#'></a>";
-       return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
-       addHandle( "type|href|height|width", function( elem, name, isXML ) {
-               if ( !isXML ) {
-                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
-               }
-       });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
-       div.innerHTML = "<input/>";
-       div.firstChild.setAttribute( "value", "" );
-       return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
-       addHandle( "value", function( elem, name, isXML ) {
-               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
-                       return elem.defaultValue;
-               }
-       });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
-       return div.getAttribute("disabled") == null;
-}) ) {
-       addHandle( booleans, function( elem, name, isXML ) {
-               var val;
-               if ( !isXML ) {
-                       return elem[ name ] === true ? name.toLowerCase() :
-                                       (val = elem.getAttributeNode( name )) && val.specified ?
-                                       val.value :
-                               null;
-               }
-       });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep( elements, function( elem, i ) {
-                       /* jshint -W018 */
-                       return !!qualifier.call( elem, i, elem ) !== not;
-               });
-
-       }
-
-       if ( qualifier.nodeType ) {
-               return jQuery.grep( elements, function( elem ) {
-                       return ( elem === qualifier ) !== not;
-               });
-
-       }
-
-       if ( typeof qualifier === "string" ) {
-               if ( risSimple.test( qualifier ) ) {
-                       return jQuery.filter( qualifier, elements, not );
-               }
-
-               qualifier = jQuery.filter( qualifier, elements );
-       }
-
-       return jQuery.grep( elements, function( elem ) {
-               return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
-       });
-}
-
-jQuery.filter = function( expr, elems, not ) {
-       var elem = elems[ 0 ];
-
-       if ( not ) {
-               expr = ":not(" + expr + ")";
-       }
-
-       return elems.length === 1 && elem.nodeType === 1 ?
-               jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
-               jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
-                       return elem.nodeType === 1;
-               }));
-};
-
-jQuery.fn.extend({
-       find: function( selector ) {
-               var i,
-                       ret = [],
-                       self = this,
-                       len = self.length;
-
-               if ( typeof selector !== "string" ) {
-                       return this.pushStack( jQuery( selector ).filter(function() {
-                               for ( i = 0; i < len; i++ ) {
-                                       if ( jQuery.contains( self[ i ], this ) ) {
-                                               return true;
-                                       }
-                               }
-                       }) );
-               }
-
-               for ( i = 0; i < len; i++ ) {
-                       jQuery.find( selector, self[ i ], ret );
-               }
-
-               // Needed because $( selector, context ) becomes $( context ).find( selector )
-               ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
-               ret.selector = this.selector ? this.selector + " " + selector : selector;
-               return ret;
-       },
-       filter: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], false) );
-       },
-       not: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], true) );
-       },
-       is: function( selector ) {
-               return !!winnow(
-                       this,
-
-                       // If this is a positional/relative selector, check membership in the returned set
-                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
-                       typeof selector === "string" && rneedsContext.test( selector ) ?
-                               jQuery( selector ) :
-                               selector || [],
-                       false
-               ).length;
-       }
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
-       // Use the correct document accordingly with window argument (sandbox)
-       document = window.document,
-
-       // A simple way to check for HTML strings
-       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-       // Strict HTML recognition (#11290: must start with <)
-       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
-       init = jQuery.fn.init = function( selector, context ) {
-               var match, elem;
-
-               // HANDLE: $(""), $(null), $(undefined), $(false)
-               if ( !selector ) {
-                       return this;
-               }
-
-               // Handle HTML strings
-               if ( typeof selector === "string" ) {
-                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-                               // Assume that strings that start and end with <> are HTML and skip the regex check
-                               match = [ null, selector, null ];
-
-                       } else {
-                               match = rquickExpr.exec( selector );
-                       }
-
-                       // Match html or make sure no context is specified for #id
-                       if ( match && (match[1] || !context) ) {
-
-                               // HANDLE: $(html) -> $(array)
-                               if ( match[1] ) {
-                                       context = context instanceof jQuery ? context[0] : context;
-
-                                       // scripts is true for back-compat
-                                       // Intentionally let the error be thrown if parseHTML is not present
-                                       jQuery.merge( this, jQuery.parseHTML(
-                                               match[1],
-                                               context && context.nodeType ? context.ownerDocument || context : document,
-                                               true
-                                       ) );
-
-                                       // HANDLE: $(html, props)
-                                       if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
-                                               for ( match in context ) {
-                                                       // Properties of context are called as methods if possible
-                                                       if ( jQuery.isFunction( this[ match ] ) ) {
-                                                               this[ match ]( context[ match ] );
-
-                                                       // ...and otherwise set as attributes
-                                                       } else {
-                                                               this.attr( match, context[ match ] );
-                                                       }
-                                               }
-                                       }
-
-                                       return this;
-
-                               // HANDLE: $(#id)
-                               } else {
-                                       elem = document.getElementById( match[2] );
-
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document #6963
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE and Opera return items
-                                               // by name instead of ID
-                                               if ( elem.id !== match[2] ) {
-                                                       return rootjQuery.find( selector );
-                                               }
-
-                                               // Otherwise, we inject the element directly into the jQuery object
-                                               this.length = 1;
-                                               this[0] = elem;
-                                       }
-
-                                       this.context = document;
-                                       this.selector = selector;
-                                       return this;
-                               }
-
-                       // HANDLE: $(expr, $(...))
-                       } else if ( !context || context.jquery ) {
-                               return ( context || rootjQuery ).find( selector );
-
-                       // HANDLE: $(expr, context)
-                       // (which is just equivalent to: $(context).find(expr)
-                       } else {
-                               return this.constructor( context ).find( selector );
-                       }
-
-               // HANDLE: $(DOMElement)
-               } else if ( selector.nodeType ) {
-                       this.context = this[0] = selector;
-                       this.length = 1;
-                       return this;
-
-               // HANDLE: $(function)
-               // Shortcut for document ready
-               } else if ( jQuery.isFunction( selector ) ) {
-                       return typeof rootjQuery.ready !== "undefined" ?
-                               rootjQuery.ready( selector ) :
-                               // Execute immediately if ready is not present
-                               selector( jQuery );
-               }
-
-               if ( selector.selector !== undefined ) {
-                       this.selector = selector.selector;
-                       this.context = selector.context;
-               }
-
-               return jQuery.makeArray( selector, this );
-       };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-       // methods guaranteed to produce a unique set when starting from a unique set
-       guaranteedUnique = {
-               children: true,
-               contents: true,
-               next: true,
-               prev: true
-       };
-
-jQuery.extend({
-       dir: function( elem, dir, until ) {
-               var matched = [],
-                       cur = elem[ dir ];
-
-               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-                       if ( cur.nodeType === 1 ) {
-                               matched.push( cur );
-                       }
-                       cur = cur[dir];
-               }
-               return matched;
-       },
-
-       sibling: function( n, elem ) {
-               var r = [];
-
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType === 1 && n !== elem ) {
-                               r.push( n );
-                       }
-               }
-
-               return r;
-       }
-});
-
-jQuery.fn.extend({
-       has: function( target ) {
-               var i,
-                       targets = jQuery( target, this ),
-                       len = targets.length;
-
-               return this.filter(function() {
-                       for ( i = 0; i < len; i++ ) {
-                               if ( jQuery.contains( this, targets[i] ) ) {
-                                       return true;
-                               }
-                       }
-               });
-       },
-
-       closest: function( selectors, context ) {
-               var cur,
-                       i = 0,
-                       l = this.length,
-                       matched = [],
-                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
-
-               for ( ; i < l; i++ ) {
-                       for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
-                               // Always skip document fragments
-                               if ( cur.nodeType < 11 && (pos ?
-                                       pos.index(cur) > -1 :
-
-                                       // Don't pass non-elements to Sizzle
-                                       cur.nodeType === 1 &&
-                                               jQuery.find.matchesSelector(cur, selectors)) ) {
-
-                                       matched.push( cur );
-                                       break;
-                               }
-                       }
-               }
-
-               return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
-       },
-
-       // Determine the position of an element within
-       // the matched set of elements
-       index: function( elem ) {
-
-               // No argument, return index in parent
-               if ( !elem ) {
-                       return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
-               }
-
-               // index in selector
-               if ( typeof elem === "string" ) {
-                       return jQuery.inArray( this[0], jQuery( elem ) );
-               }
-
-               // Locate the position of the desired element
-               return jQuery.inArray(
-                       // If it receives a jQuery object, the first element is used
-                       elem.jquery ? elem[0] : elem, this );
-       },
-
-       add: function( selector, context ) {
-               return this.pushStack(
-                       jQuery.unique(
-                               jQuery.merge( this.get(), jQuery( selector, context ) )
-                       )
-               );
-       },
-
-       addBack: function( selector ) {
-               return this.add( selector == null ?
-                       this.prevObject : this.prevObject.filter(selector)
-               );
-       }
-});
-
-function sibling( cur, dir ) {
-       do {
-               cur = cur[ dir ];
-       } while ( cur && cur.nodeType !== 1 );
-
-       return cur;
-}
-
-jQuery.each({
-       parent: function( elem ) {
-               var parent = elem.parentNode;
-               return parent && parent.nodeType !== 11 ? parent : null;
-       },
-       parents: function( elem ) {
-               return jQuery.dir( elem, "parentNode" );
-       },
-       parentsUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "parentNode", until );
-       },
-       next: function( elem ) {
-               return sibling( elem, "nextSibling" );
-       },
-       prev: function( elem ) {
-               return sibling( elem, "previousSibling" );
-       },
-       nextAll: function( elem ) {
-               return jQuery.dir( elem, "nextSibling" );
-       },
-       prevAll: function( elem ) {
-               return jQuery.dir( elem, "previousSibling" );
-       },
-       nextUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "nextSibling", until );
-       },
-       prevUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "previousSibling", until );
-       },
-       siblings: function( elem ) {
-               return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
-       },
-       children: function( elem ) {
-               return jQuery.sibling( elem.firstChild );
-       },
-       contents: function( elem ) {
-               return jQuery.nodeName( elem, "iframe" ) ?
-                       elem.contentDocument || elem.contentWindow.document :
-                       jQuery.merge( [], elem.childNodes );
-       }
-}, function( name, fn ) {
-       jQuery.fn[ name ] = function( until, selector ) {
-               var ret = jQuery.map( this, fn, until );
-
-               if ( name.slice( -5 ) !== "Until" ) {
-                       selector = until;
-               }
-
-               if ( selector && typeof selector === "string" ) {
-                       ret = jQuery.filter( selector, ret );
-               }
-
-               if ( this.length > 1 ) {
-                       // Remove duplicates
-                       if ( !guaranteedUnique[ name ] ) {
-                               ret = jQuery.unique( ret );
-                       }
-
-                       // Reverse order for parents* and prev-derivatives
-                       if ( rparentsprev.test( name ) ) {
-                               ret = ret.reverse();
-                       }
-               }
-
-               return this.pushStack( ret );
-       };
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
-       var object = optionsCache[ options ] = {};
-       jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
-               object[ flag ] = true;
-       });
-       return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *     options: an optional list of space-separated options that will change how
- *                     the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *     once:                   will ensure the callback list can only be fired once (like a Deferred)
- *
- *     memory:                 will keep track of previous values and will call any callback added
- *                                     after the list has been fired right away with the latest "memorized"
- *                                     values (like a Deferred)
- *
- *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
- *
- *     stopOnFalse:    interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
-       // Convert options from String-formatted to Object-formatted if needed
-       // (we check in cache first)
-       options = typeof options === "string" ?
-               ( optionsCache[ options ] || createOptions( options ) ) :
-               jQuery.extend( {}, options );
-
-       var // Flag to know if list is currently firing
-               firing,
-               // Last fire value (for non-forgettable lists)
-               memory,
-               // Flag to know if list was already fired
-               fired,
-               // End of the loop when firing
-               firingLength,
-               // Index of currently firing callback (modified by remove if needed)
-               firingIndex,
-               // First callback to fire (used internally by add and fireWith)
-               firingStart,
-               // Actual callback list
-               list = [],
-               // Stack of fire calls for repeatable lists
-               stack = !options.once && [],
-               // Fire callbacks
-               fire = function( data ) {
-                       memory = options.memory && data;
-                       fired = true;
-                       firingIndex = firingStart || 0;
-                       firingStart = 0;
-                       firingLength = list.length;
-                       firing = true;
-                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-                               if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
-                                       memory = false; // To prevent further calls using add
-                                       break;
-                               }
-                       }
-                       firing = false;
-                       if ( list ) {
-                               if ( stack ) {
-                                       if ( stack.length ) {
-                                               fire( stack.shift() );
-                                       }
-                               } else if ( memory ) {
-                                       list = [];
-                               } else {
-                                       self.disable();
-                               }
-                       }
-               },
-               // Actual Callbacks object
-               self = {
-                       // Add a callback or a collection of callbacks to the list
-                       add: function() {
-                               if ( list ) {
-                                       // First, we save the current length
-                                       var start = list.length;
-                                       (function add( args ) {
-                                               jQuery.each( args, function( _, arg ) {
-                                                       var type = jQuery.type( arg );
-                                                       if ( type === "function" ) {
-                                                               if ( !options.unique || !self.has( arg ) ) {
-                                                                       list.push( arg );
-                                                               }
-                                                       } else if ( arg && arg.length && type !== "string" ) {
-                                                               // Inspect recursively
-                                                               add( arg );
-                                                       }
-                                               });
-                                       })( arguments );
-                                       // Do we need to add the callbacks to the
-                                       // current firing batch?
-                                       if ( firing ) {
-                                               firingLength = list.length;
-                                       // With memory, if we're not firing then
-                                       // we should call right away
-                                       } else if ( memory ) {
-                                               firingStart = start;
-                                               fire( memory );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Remove a callback from the list
-                       remove: function() {
-                               if ( list ) {
-                                       jQuery.each( arguments, function( _, arg ) {
-                                               var index;
-                                               while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-                                                       list.splice( index, 1 );
-                                                       // Handle firing indexes
-                                                       if ( firing ) {
-                                                               if ( index <= firingLength ) {
-                                                                       firingLength--;
-                                                               }
-                                                               if ( index <= firingIndex ) {
-                                                                       firingIndex--;
-                                                               }
-                                                       }
-                                               }
-                                       });
-                               }
-                               return this;
-                       },
-                       // Check if a given callback is in the list.
-                       // If no argument is given, return whether or not list has callbacks attached.
-                       has: function( fn ) {
-                               return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
-                       },
-                       // Remove all callbacks from the list
-                       empty: function() {
-                               list = [];
-                               firingLength = 0;
-                               return this;
-                       },
-                       // Have the list do nothing anymore
-                       disable: function() {
-                               list = stack = memory = undefined;
-                               return this;
-                       },
-                       // Is it disabled?
-                       disabled: function() {
-                               return !list;
-                       },
-                       // Lock the list in its current state
-                       lock: function() {
-                               stack = undefined;
-                               if ( !memory ) {
-                                       self.disable();
-                               }
-                               return this;
-                       },
-                       // Is it locked?
-                       locked: function() {
-                               return !stack;
-                       },
-                       // Call all callbacks with the given context and arguments
-                       fireWith: function( context, args ) {
-                               if ( list && ( !fired || stack ) ) {
-                                       args = args || [];
-                                       args = [ context, args.slice ? args.slice() : args ];
-                                       if ( firing ) {
-                                               stack.push( args );
-                                       } else {
-                                               fire( args );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Call all the callbacks with the given arguments
-                       fire: function() {
-                               self.fireWith( this, arguments );
-                               return this;
-                       },
-                       // To know if the callbacks have already been called at least once
-                       fired: function() {
-                               return !!fired;
-                       }
-               };
-
-       return self;
-};
-
-
-jQuery.extend({
-
-       Deferred: function( func ) {
-               var tuples = [
-                               // action, add listener, listener list, final state
-                               [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
-                               [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
-                               [ "notify", "progress", jQuery.Callbacks("memory") ]
-                       ],
-                       state = "pending",
-                       promise = {
-                               state: function() {
-                                       return state;
-                               },
-                               always: function() {
-                                       deferred.done( arguments ).fail( arguments );
-                                       return this;
-                               },
-                               then: function( /* fnDone, fnFail, fnProgress */ ) {
-                                       var fns = arguments;
-                                       return jQuery.Deferred(function( newDefer ) {
-                                               jQuery.each( tuples, function( i, tuple ) {
-                                                       var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
-                                                       deferred[ tuple[1] ](function() {
-                                                               var returned = fn && fn.apply( this, arguments );
-                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
-                                                                       returned.promise()
-                                                                               .done( newDefer.resolve )
-                                                                               .fail( newDefer.reject )
-                                                                               .progress( newDefer.notify );
-                                                               } else {
-                                                                       newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
-                                                               }
-                                                       });
-                                               });
-                                               fns = null;
-                                       }).promise();
-                               },
-                               // Get a promise for this deferred
-                               // If obj is provided, the promise aspect is added to the object
-                               promise: function( obj ) {
-                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
-                               }
-                       },
-                       deferred = {};
-
-               // Keep pipe for back-compat
-               promise.pipe = promise.then;
-
-               // Add list-specific methods
-               jQuery.each( tuples, function( i, tuple ) {
-                       var list = tuple[ 2 ],
-                               stateString = tuple[ 3 ];
-
-                       // promise[ done | fail | progress ] = list.add
-                       promise[ tuple[1] ] = list.add;
-
-                       // Handle state
-                       if ( stateString ) {
-                               list.add(function() {
-                                       // state = [ resolved | rejected ]
-                                       state = stateString;
-
-                               // [ reject_list | resolve_list ].disable; progress_list.lock
-                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
-                       }
-
-                       // deferred[ resolve | reject | notify ]
-                       deferred[ tuple[0] ] = function() {
-                               deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
-                               return this;
-                       };
-                       deferred[ tuple[0] + "With" ] = list.fireWith;
-               });
-
-               // Make the deferred a promise
-               promise.promise( deferred );
-
-               // Call given func if any
-               if ( func ) {
-                       func.call( deferred, deferred );
-               }
-
-               // All done!
-               return deferred;
-       },
-
-       // Deferred helper
-       when: function( subordinate /* , ..., subordinateN */ ) {
-               var i = 0,
-                       resolveValues = slice.call( arguments ),
-                       length = resolveValues.length,
-
-                       // the count of uncompleted subordinates
-                       remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
-                       // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
-                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
-                       // Update function for both resolve and progress values
-                       updateFunc = function( i, contexts, values ) {
-                               return function( value ) {
-                                       contexts[ i ] = this;
-                                       values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
-                                       if ( values === progressValues ) {
-                                               deferred.notifyWith( contexts, values );
-
-                                       } else if ( !(--remaining) ) {
-                                               deferred.resolveWith( contexts, values );
-                                       }
-                               };
-                       },
-
-                       progressValues, progressContexts, resolveContexts;
-
-               // add listeners to Deferred subordinates; treat others as resolved
-               if ( length > 1 ) {
-                       progressValues = new Array( length );
-                       progressContexts = new Array( length );
-                       resolveContexts = new Array( length );
-                       for ( ; i < length; i++ ) {
-                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
-                                       resolveValues[ i ].promise()
-                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
-                                               .fail( deferred.reject )
-                                               .progress( updateFunc( i, progressContexts, progressValues ) );
-                               } else {
-                                       --remaining;
-                               }
-                       }
-               }
-
-               // if we're not waiting on anything, resolve the master
-               if ( !remaining ) {
-                       deferred.resolveWith( resolveContexts, resolveValues );
-               }
-
-               return deferred.promise();
-       }
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
-       // Add the callback
-       jQuery.ready.promise().done( fn );
-
-       return this;
-};
-
-jQuery.extend({
-       // Is the DOM ready to be used? Set to true once it occurs.
-       isReady: false,
-
-       // A counter to track how many items to wait for before
-       // the ready event fires. See #6781
-       readyWait: 1,
-
-       // Hold (or release) the ready event
-       holdReady: function( hold ) {
-               if ( hold ) {
-                       jQuery.readyWait++;
-               } else {
-                       jQuery.ready( true );
-               }
-       },
-
-       // Handle when the DOM is ready
-       ready: function( wait ) {
-
-               // Abort if there are pending holds or we're already ready
-               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-                       return;
-               }
-
-               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-               if ( !document.body ) {
-                       return setTimeout( jQuery.ready );
-               }
-
-               // Remember that the DOM is ready
-               jQuery.isReady = true;
-
-               // If a normal DOM Ready event fired, decrement, and wait if need be
-               if ( wait !== true && --jQuery.readyWait > 0 ) {
-                       return;
-               }
-
-               // If there are functions bound, to execute
-               readyList.resolveWith( document, [ jQuery ] );
-
-               // Trigger any bound ready events
-               if ( jQuery.fn.triggerHandler ) {
-                       jQuery( document ).triggerHandler( "ready" );
-                       jQuery( document ).off( "ready" );
-               }
-       }
-});
-
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
-       if ( document.addEventListener ) {
-               document.removeEventListener( "DOMContentLoaded", completed, false );
-               window.removeEventListener( "load", completed, false );
-
-       } else {
-               document.detachEvent( "onreadystatechange", completed );
-               window.detachEvent( "onload", completed );
-       }
-}
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
-       // readyState === "complete" is good enough for us to call the dom ready in oldIE
-       if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
-               detach();
-               jQuery.ready();
-       }
-}
-
-jQuery.ready.promise = function( obj ) {
-       if ( !readyList ) {
-
-               readyList = jQuery.Deferred();
-
-               // Catch cases where $(document).ready() is called after the browser event has already occurred.
-               // we once tried to use readyState "interactive" here, but it caused issues like the one
-               // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
-               if ( document.readyState === "complete" ) {
-                       // Handle it asynchronously to allow scripts the opportunity to delay ready
-                       setTimeout( jQuery.ready );
-
-               // Standards-based browsers support DOMContentLoaded
-               } else if ( document.addEventListener ) {
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", completed, false );
-
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", completed, false );
-
-               // If IE event model is used
-               } else {
-                       // Ensure firing before onload, maybe late but safe also for iframes
-                       document.attachEvent( "onreadystatechange", completed );
-
-                       // A fallback to window.onload, that will always work
-                       window.attachEvent( "onload", completed );
-
-                       // If IE and not a frame
-                       // continually check to see if the document is ready
-                       var top = false;
-
-                       try {
-                               top = window.frameElement == null && document.documentElement;
-                       } catch(e) {}
-
-                       if ( top && top.doScroll ) {
-                               (function doScrollCheck() {
-                                       if ( !jQuery.isReady ) {
-
-                                               try {
-                                                       // Use the trick by Diego Perini
-                                                       // http://javascript.nwbox.com/IEContentLoaded/
-                                                       top.doScroll("left");
-                                               } catch(e) {
-                                                       return setTimeout( doScrollCheck, 50 );
-                                               }
-
-                                               // detach all dom ready events
-                                               detach();
-
-                                               // and execute any waiting functions
-                                               jQuery.ready();
-                                       }
-                               })();
-                       }
-               }
-       }
-       return readyList.promise( obj );
-};
-
-
-var strundefined = typeof undefined;
-
-
-
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
-       break;
-}
-support.ownLast = i !== "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery(function() {
-       // Minified: var a,b,c,d
-       var val, div, body, container;
-
-       body = document.getElementsByTagName( "body" )[ 0 ];
-       if ( !body || !body.style ) {
-               // Return for frameset docs that don't have a body
-               return;
-       }
-
-       // Setup
-       div = document.createElement( "div" );
-       container = document.createElement( "div" );
-       container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-       body.appendChild( container ).appendChild( div );
-
-       if ( typeof div.style.zoom !== strundefined ) {
-               // Support: IE<8
-               // Check if natively block-level elements act like inline-block
-               // elements when setting their display to 'inline' and giving
-               // them layout
-               div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
-
-               support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
-               if ( val ) {
-                       // Prevent IE 6 from affecting layout for positioned elements #11048
-                       // Prevent IE from shrinking the body in IE 7 mode #12869
-                       // Support: IE<8
-                       body.style.zoom = 1;
-               }
-       }
-
-       body.removeChild( container );
-});
-
-
-
-
-(function() {
-       var div = document.createElement( "div" );
-
-       // Execute the test only if not already executed in another module.
-       if (support.deleteExpando == null) {
-               // Support: IE<9
-               support.deleteExpando = true;
-               try {
-                       delete div.test;
-               } catch( e ) {
-                       support.deleteExpando = false;
-               }
-       }
-
-       // Null elements to avoid leaks in IE.
-       div = null;
-})();
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( elem ) {
-       var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
-               nodeType = +elem.nodeType || 1;
-
-       // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
-       return nodeType !== 1 && nodeType !== 9 ?
-               false :
-
-               // Nodes accept data unless otherwise specified; rejection can be conditional
-               !noData || noData !== true && elem.getAttribute("classid") === noData;
-};
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
-       rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
-       // If nothing was found internally, try to fetch any
-       // data from the HTML5 data-* attribute
-       if ( data === undefined && elem.nodeType === 1 ) {
-
-               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-               data = elem.getAttribute( name );
-
-               if ( typeof data === "string" ) {
-                       try {
-                               data = data === "true" ? true :
-                                       data === "false" ? false :
-                                       data === "null" ? null :
-                                       // Only convert to a number if it doesn't change the string
-                                       +data + "" === data ? +data :
-                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
-                                       data;
-                       } catch( e ) {}
-
-                       // Make sure we set the data so it isn't changed later
-                       jQuery.data( elem, key, data );
-
-               } else {
-                       data = undefined;
-               }
-       }
-
-       return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-       var name;
-       for ( name in obj ) {
-
-               // if the public data object is empty, the private is still empty
-               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-                       continue;
-               }
-               if ( name !== "toJSON" ) {
-                       return false;
-               }
-       }
-
-       return true;
-}
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
-       if ( !jQuery.acceptData( elem ) ) {
-               return;
-       }
-
-       var ret, thisCache,
-               internalKey = jQuery.expando,
-
-               // We have to handle DOM nodes and JS objects differently because IE6-7
-               // can't GC object references properly across the DOM-JS boundary
-               isNode = elem.nodeType,
-
-               // Only DOM nodes need the global jQuery cache; JS object data is
-               // attached directly to the object so GC can occur automatically
-               cache = isNode ? jQuery.cache : elem,
-
-               // Only defining an ID for JS objects if its cache already exists allows
-               // the code to shortcut on the same path as a DOM node with no cache
-               id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
-       // Avoid doing any more work than we need to when trying to get data on an
-       // object that has no data at all
-       if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
-               return;
-       }
-
-       if ( !id ) {
-               // Only DOM nodes need a new unique ID for each element since their data
-               // ends up in the global cache
-               if ( isNode ) {
-                       id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
-               } else {
-                       id = internalKey;
-               }
-       }
-
-       if ( !cache[ id ] ) {
-               // Avoid exposing jQuery metadata on plain JS objects when the object
-               // is serialized using JSON.stringify
-               cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
-       }
-
-       // An object can be passed to jQuery.data instead of a key/value pair; this gets
-       // shallow copied over onto the existing cache
-       if ( typeof name === "object" || typeof name === "function" ) {
-               if ( pvt ) {
-                       cache[ id ] = jQuery.extend( cache[ id ], name );
-               } else {
-                       cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-               }
-       }
-
-       thisCache = cache[ id ];
-
-       // jQuery data() is stored in a separate object inside the object's internal data
-       // cache in order to avoid key collisions between internal data and user-defined
-       // data.
-       if ( !pvt ) {
-               if ( !thisCache.data ) {
-                       thisCache.data = {};
-               }
-
-               thisCache = thisCache.data;
-       }
-
-       if ( data !== undefined ) {
-               thisCache[ jQuery.camelCase( name ) ] = data;
-       }
-
-       // Check for both converted-to-camel and non-converted data property names
-       // If a data property was specified
-       if ( typeof name === "string" ) {
-
-               // First Try to find as-is property data
-               ret = thisCache[ name ];
-
-               // Test for null|undefined property data
-               if ( ret == null ) {
-
-                       // Try to find the camelCased property
-                       ret = thisCache[ jQuery.camelCase( name ) ];
-               }
-       } else {
-               ret = thisCache;
-       }
-
-       return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
-       if ( !jQuery.acceptData( elem ) ) {
-               return;
-       }
-
-       var thisCache, i,
-               isNode = elem.nodeType,
-
-               // See jQuery.data for more information
-               cache = isNode ? jQuery.cache : elem,
-               id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-       // If there is already no cache entry for this object, there is no
-       // purpose in continuing
-       if ( !cache[ id ] ) {
-               return;
-       }
-
-       if ( name ) {
-
-               thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-               if ( thisCache ) {
-
-                       // Support array or space separated string names for data keys
-                       if ( !jQuery.isArray( name ) ) {
-
-                               // try the string as a key before any manipulation
-                               if ( name in thisCache ) {
-                                       name = [ name ];
-                               } else {
-
-                                       // split the camel cased version by spaces unless a key with the spaces exists
-                                       name = jQuery.camelCase( name );
-                                       if ( name in thisCache ) {
-                                               name = [ name ];
-                                       } else {
-                                               name = name.split(" ");
-                                       }
-                               }
-                       } else {
-                               // If "name" is an array of keys...
-                               // When data is initially created, via ("key", "val") signature,
-                               // keys will be converted to camelCase.
-                               // Since there is no way to tell _how_ a key was added, remove
-                               // both plain key and camelCase key. #12786
-                               // This will only penalize the array argument path.
-                               name = name.concat( jQuery.map( name, jQuery.camelCase ) );
-                       }
-
-                       i = name.length;
-                       while ( i-- ) {
-                               delete thisCache[ name[i] ];
-                       }
-
-                       // If there is no data left in the cache, we want to continue
-                       // and let the cache object itself get destroyed
-                       if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
-                               return;
-                       }
-               }
-       }
-
-       // See jQuery.data for more information
-       if ( !pvt ) {
-               delete cache[ id ].data;
-
-               // Don't destroy the parent cache unless the internal data object
-               // had been the only thing left in it
-               if ( !isEmptyDataObject( cache[ id ] ) ) {
-                       return;
-               }
-       }
-
-       // Destroy the cache
-       if ( isNode ) {
-               jQuery.cleanData( [ elem ], true );
-
-       // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
-       /* jshint eqeqeq: false */
-       } else if ( support.deleteExpando || cache != cache.window ) {
-               /* jshint eqeqeq: true */
-               delete cache[ id ];
-
-       // When all else fails, null
-       } else {
-               cache[ id ] = null;
-       }
-}
-
-jQuery.extend({
-       cache: {},
-
-       // The following elements (space-suffixed to avoid Object.prototype collisions)
-       // throw uncatchable exceptions if you attempt to set expando properties
-       noData: {
-               "applet ": true,
-               "embed ": true,
-               // ...but Flash objects (which have this classid) *can* handle expandos
-               "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
-       },
-
-       hasData: function( elem ) {
-               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-               return !!elem && !isEmptyDataObject( elem );
-       },
-
-       data: function( elem, name, data ) {
-               return internalData( elem, name, data );
-       },
-
-       removeData: function( elem, name ) {
-               return internalRemoveData( elem, name );
-       },
-
-       // For internal use only.
-       _data: function( elem, name, data ) {
-               return internalData( elem, name, data, true );
-       },
-
-       _removeData: function( elem, name ) {
-               return internalRemoveData( elem, name, true );
-       }
-});
-
-jQuery.fn.extend({
-       data: function( key, value ) {
-               var i, name, data,
-                       elem = this[0],
-                       attrs = elem && elem.attributes;
-
-               // Special expections of .data basically thwart jQuery.access,
-               // so implement the relevant behavior ourselves
-
-               // Gets all values
-               if ( key === undefined ) {
-                       if ( this.length ) {
-                               data = jQuery.data( elem );
-
-                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-                                       i = attrs.length;
-                                       while ( i-- ) {
-
-                                               // Support: IE11+
-                                               // The attrs elements can be null (#14894)
-                                               if ( attrs[ i ] ) {
-                                                       name = attrs[ i ].name;
-                                                       if ( name.indexOf( "data-" ) === 0 ) {
-                                                               name = jQuery.camelCase( name.slice(5) );
-                                                               dataAttr( elem, name, data[ name ] );
-                                                       }
-                                               }
-                                       }
-                                       jQuery._data( elem, "parsedAttrs", true );
-                               }
-                       }
-
-                       return data;
-               }
-
-               // Sets multiple values
-               if ( typeof key === "object" ) {
-                       return this.each(function() {
-                               jQuery.data( this, key );
-                       });
-               }
-
-               return arguments.length > 1 ?
-
-                       // Sets one value
-                       this.each(function() {
-                               jQuery.data( this, key, value );
-                       }) :
-
-                       // Gets one value
-                       // Try to fetch any internally stored data first
-                       elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
-       },
-
-       removeData: function( key ) {
-               return this.each(function() {
-                       jQuery.removeData( this, key );
-               });
-       }
-});
-
-
-jQuery.extend({
-       queue: function( elem, type, data ) {
-               var queue;
-
-               if ( elem ) {
-                       type = ( type || "fx" ) + "queue";
-                       queue = jQuery._data( elem, type );
-
-                       // Speed up dequeue by getting out quickly if this is just a lookup
-                       if ( data ) {
-                               if ( !queue || jQuery.isArray(data) ) {
-                                       queue = jQuery._data( elem, type, jQuery.makeArray(data) );
-                               } else {
-                                       queue.push( data );
-                               }
-                       }
-                       return queue || [];
-               }
-       },
-
-       dequeue: function( elem, type ) {
-               type = type || "fx";
-
-               var queue = jQuery.queue( elem, type ),
-                       startLength = queue.length,
-                       fn = queue.shift(),
-                       hooks = jQuery._queueHooks( elem, type ),
-                       next = function() {
-                               jQuery.dequeue( elem, type );
-                       };
-
-               // If the fx queue is dequeued, always remove the progress sentinel
-               if ( fn === "inprogress" ) {
-                       fn = queue.shift();
-                       startLength--;
-               }
-
-               if ( fn ) {
-
-                       // Add a progress sentinel to prevent the fx queue from being
-                       // automatically dequeued
-                       if ( type === "fx" ) {
-                               queue.unshift( "inprogress" );
-                       }
-
-                       // clear up the last queue stop function
-                       delete hooks.stop;
-                       fn.call( elem, next, hooks );
-               }
-
-               if ( !startLength && hooks ) {
-                       hooks.empty.fire();
-               }
-       },
-
-       // not intended for public consumption - generates a queueHooks object, or returns the current one
-       _queueHooks: function( elem, type ) {
-               var key = type + "queueHooks";
-               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
-                       empty: jQuery.Callbacks("once memory").add(function() {
-                               jQuery._removeData( elem, type + "queue" );
-                               jQuery._removeData( elem, key );
-                       })
-               });
-       }
-});
-
-jQuery.fn.extend({
-       queue: function( type, data ) {
-               var setter = 2;
-
-               if ( typeof type !== "string" ) {
-                       data = type;
-                       type = "fx";
-                       setter--;
-               }
-
-               if ( arguments.length < setter ) {
-                       return jQuery.queue( this[0], type );
-               }
-
-               return data === undefined ?
-                       this :
-                       this.each(function() {
-                               var queue = jQuery.queue( this, type, data );
-
-                               // ensure a hooks for this queue
-                               jQuery._queueHooks( this, type );
-
-                               if ( type === "fx" && queue[0] !== "inprogress" ) {
-                                       jQuery.dequeue( this, type );
-                               }
-                       });
-       },
-       dequeue: function( type ) {
-               return this.each(function() {
-                       jQuery.dequeue( this, type );
-               });
-       },
-       clearQueue: function( type ) {
-               return this.queue( type || "fx", [] );
-       },
-       // Get a promise resolved when queues of a certain type
-       // are emptied (fx is the type by default)
-       promise: function( type, obj ) {
-               var tmp,
-                       count = 1,
-                       defer = jQuery.Deferred(),
-                       elements = this,
-                       i = this.length,
-                       resolve = function() {
-                               if ( !( --count ) ) {
-                                       defer.resolveWith( elements, [ elements ] );
-                               }
-                       };
-
-               if ( typeof type !== "string" ) {
-                       obj = type;
-                       type = undefined;
-               }
-               type = type || "fx";
-
-               while ( i-- ) {
-                       tmp = jQuery._data( elements[ i ], type + "queueHooks" );
-                       if ( tmp && tmp.empty ) {
-                               count++;
-                               tmp.empty.add( resolve );
-                       }
-               }
-               resolve();
-               return defer.promise( obj );
-       }
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
-               // isHidden might be called from jQuery#filter function;
-               // in that case, element will be second argument
-               elem = el || elem;
-               return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-       };
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
-       var i = 0,
-               length = elems.length,
-               bulk = key == null;
-
-       // Sets many values
-       if ( jQuery.type( key ) === "object" ) {
-               chainable = true;
-               for ( i in key ) {
-                       jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
-               }
-
-       // Sets one value
-       } else if ( value !== undefined ) {
-               chainable = true;
-
-               if ( !jQuery.isFunction( value ) ) {
-                       raw = true;
-               }
-
-               if ( bulk ) {
-                       // Bulk operations run against the entire set
-                       if ( raw ) {
-                               fn.call( elems, value );
-                               fn = null;
-
-                       // ...except when executing function values
-                       } else {
-                               bulk = fn;
-                               fn = function( elem, key, value ) {
-                                       return bulk.call( jQuery( elem ), value );
-                               };
-                       }
-               }
-
-               if ( fn ) {
-                       for ( ; i < length; i++ ) {
-                               fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
-                       }
-               }
-       }
-
-       return chainable ?
-               elems :
-
-               // Gets
-               bulk ?
-                       fn.call( elems ) :
-                       length ? fn( elems[0], key ) : emptyGet;
-};
-var rcheckableType = (/^(?:checkbox|radio)$/i);
-
-
-
-(function() {
-       // Minified: var a,b,c
-       var input = document.createElement( "input" ),
-               div = document.createElement( "div" ),
-               fragment = document.createDocumentFragment();
-
-       // Setup
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
-       // IE strips leading whitespace when .innerHTML is used
-       support.leadingWhitespace = div.firstChild.nodeType === 3;
-
-       // Make sure that tbody elements aren't automatically inserted
-       // IE will insert them into empty tables
-       support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
-       // Make sure that link elements get serialized correctly by innerHTML
-       // This requires a wrapper element in IE
-       support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
-       // Makes sure cloning an html5 element does not cause problems
-       // Where outerHTML is undefined, this still works
-       support.html5Clone =
-               document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
-       // Check if a disconnected checkbox will retain its checked
-       // value of true after appended to the DOM (IE6/7)
-       input.type = "checkbox";
-       input.checked = true;
-       fragment.appendChild( input );
-       support.appendChecked = input.checked;
-
-       // Make sure textarea (and checkbox) defaultValue is properly cloned
-       // Support: IE6-IE11+
-       div.innerHTML = "<textarea>x</textarea>";
-       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
-       // #11217 - WebKit loses check when the name is after the checked attribute
-       fragment.appendChild( div );
-       div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
-
-       // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
-       // old WebKit doesn't clone checked state correctly in fragments
-       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-       // Support: IE<9
-       // Opera does not clone events (and typeof div.attachEvent === undefined).
-       // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
-       support.noCloneEvent = true;
-       if ( div.attachEvent ) {
-               div.attachEvent( "onclick", function() {
-                       support.noCloneEvent = false;
-               });
-
-               div.cloneNode( true ).click();
-       }
-
-       // Execute the test only if not already executed in another module.
-       if (support.deleteExpando == null) {
-               // Support: IE<9
-               support.deleteExpando = true;
-               try {
-                       delete div.test;
-               } catch( e ) {
-                       support.deleteExpando = false;
-               }
-       }
-})();
-
-
-(function() {
-       var i, eventName,
-               div = document.createElement( "div" );
-
-       // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
-       for ( i in { submit: true, change: true, focusin: true }) {
-               eventName = "on" + i;
-
-               if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
-                       // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
-                       div.setAttribute( eventName, "t" );
-                       support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
-               }
-       }
-
-       // Null elements to avoid leaks in IE.
-       div = null;
-})();
-
-
-var rformElems = /^(?:input|select|textarea)$/i,
-       rkeyEvent = /^key/,
-       rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
-       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-       rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
-       return true;
-}
-
-function returnFalse() {
-       return false;
-}
-
-function safeActiveElement() {
-       try {
-               return document.activeElement;
-       } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-       global: {},
-
-       add: function( elem, types, handler, data, selector ) {
-               var tmp, events, t, handleObjIn,
-                       special, eventHandle, handleObj,
-                       handlers, type, namespaces, origType,
-                       elemData = jQuery._data( elem );
-
-               // Don't attach events to noData or text/comment nodes (but allow plain objects)
-               if ( !elemData ) {
-                       return;
-               }
-
-               // Caller can pass in an object of custom data in lieu of the handler
-               if ( handler.handler ) {
-                       handleObjIn = handler;
-                       handler = handleObjIn.handler;
-                       selector = handleObjIn.selector;
-               }
-
-               // Make sure that the handler has a unique ID, used to find/remove it later
-               if ( !handler.guid ) {
-                       handler.guid = jQuery.guid++;
-               }
-
-               // Init the element's event structure and main handler, if this is the first
-               if ( !(events = elemData.events) ) {
-                       events = elemData.events = {};
-               }
-               if ( !(eventHandle = elemData.handle) ) {
-                       eventHandle = elemData.handle = function( e ) {
-                               // Discard the second event of a jQuery.event.trigger() and
-                               // when an event is called after a page has unloaded
-                               return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
-                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-                                       undefined;
-                       };
-                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-                       eventHandle.elem = elem;
-               }
-
-               // Handle multiple events separated by a space
-               types = ( types || "" ).match( rnotwhite ) || [ "" ];
-               t = types.length;
-               while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tmp[1];
-                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
-                       // There *must* be a type, no attaching namespace-only handlers
-                       if ( !type ) {
-                               continue;
-                       }
-
-                       // If event changes its type, use the special event handlers for the changed type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // If selector defined, determine special event api type, otherwise given type
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
-
-                       // Update special based on newly reset type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // handleObj is passed to all event handlers
-                       handleObj = jQuery.extend({
-                               type: type,
-                               origType: origType,
-                               data: data,
-                               handler: handler,
-                               guid: handler.guid,
-                               selector: selector,
-                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
-                               namespace: namespaces.join(".")
-                       }, handleObjIn );
-
-                       // Init the event handler queue if we're the first
-                       if ( !(handlers = events[ type ]) ) {
-                               handlers = events[ type ] = [];
-                               handlers.delegateCount = 0;
-
-                               // Only use addEventListener/attachEvent if the special events handler returns false
-                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-                                       // Bind the global event handler to the element
-                                       if ( elem.addEventListener ) {
-                                               elem.addEventListener( type, eventHandle, false );
-
-                                       } else if ( elem.attachEvent ) {
-                                               elem.attachEvent( "on" + type, eventHandle );
-                                       }
-                               }
-                       }
-
-                       if ( special.add ) {
-                               special.add.call( elem, handleObj );
-
-                               if ( !handleObj.handler.guid ) {
-                                       handleObj.handler.guid = handler.guid;
-                               }
-                       }
-
-                       // Add to the element's handler list, delegates in front
-                       if ( selector ) {
-                               handlers.splice( handlers.delegateCount++, 0, handleObj );
-                       } else {
-                               handlers.push( handleObj );
-                       }
-
-                       // Keep track of which events have ever been used, for event optimization
-                       jQuery.event.global[ type ] = true;
-               }
-
-               // Nullify elem to prevent memory leaks in IE
-               elem = null;
-       },
-
-       // Detach an event or set of events from an element
-       remove: function( elem, types, handler, selector, mappedTypes ) {
-               var j, handleObj, tmp,
-                       origCount, t, events,
-                       special, handlers, type,
-                       namespaces, origType,
-                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
-               if ( !elemData || !(events = elemData.events) ) {
-                       return;
-               }
-
-               // Once for each type.namespace in types; type may be omitted
-               types = ( types || "" ).match( rnotwhite ) || [ "" ];
-               t = types.length;
-               while ( t-- ) {
-                       tmp = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tmp[1];
-                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
-                       // Unbind all events (on this namespace, if provided) for the element
-                       if ( !type ) {
-                               for ( type in events ) {
-                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-                               }
-                               continue;
-                       }
-
-                       special = jQuery.event.special[ type ] || {};
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
-                       handlers = events[ type ] || [];
-                       tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
-                       // Remove matching events
-                       origCount = j = handlers.length;
-                       while ( j-- ) {
-                               handleObj = handlers[ j ];
-
-                               if ( ( mappedTypes || origType === handleObj.origType ) &&
-                                       ( !handler || handler.guid === handleObj.guid ) &&
-                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
-                                       ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-                                       handlers.splice( j, 1 );
-
-                                       if ( handleObj.selector ) {
-                                               handlers.delegateCount--;
-                                       }
-                                       if ( special.remove ) {
-                                               special.remove.call( elem, handleObj );
-                                       }
-                               }
-                       }
-
-                       // Remove generic event handler if we removed something and no more handlers exist
-                       // (avoids potential for endless recursion during removal of special event handlers)
-                       if ( origCount && !handlers.length ) {
-                               if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-                                       jQuery.removeEvent( elem, type, elemData.handle );
-                               }
-
-                               delete events[ type ];
-                       }
-               }
-
-               // Remove the expando if it's no longer used
-               if ( jQuery.isEmptyObject( events ) ) {
-                       delete elemData.handle;
-
-                       // removeData also checks for emptiness and clears the expando if empty
-                       // so use it instead of delete
-                       jQuery._removeData( elem, "events" );
-               }
-       },
-
-       trigger: function( event, data, elem, onlyHandlers ) {
-               var handle, ontype, cur,
-                       bubbleType, special, tmp, i,
-                       eventPath = [ elem || document ],
-                       type = hasOwn.call( event, "type" ) ? event.type : event,
-                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
-               cur = tmp = elem = elem || document;
-
-               // Don't do events on text and comment nodes
-               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-                       return;
-               }
-
-               // focus/blur morphs to focusin/out; ensure we're not firing them right now
-               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-                       return;
-               }
-
-               if ( type.indexOf(".") >= 0 ) {
-                       // Namespaced trigger; create a regexp to match event type in handle()
-                       namespaces = type.split(".");
-                       type = namespaces.shift();
-                       namespaces.sort();
-               }
-               ontype = type.indexOf(":") < 0 && "on" + type;
-
-               // Caller can pass in a jQuery.Event object, Object, or just an event type string
-               event = event[ jQuery.expando ] ?
-                       event :
-                       new jQuery.Event( type, typeof event === "object" && event );
-
-               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
-               event.isTrigger = onlyHandlers ? 2 : 3;
-               event.namespace = namespaces.join(".");
-               event.namespace_re = event.namespace ?
-                       new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
-                       null;
-
-               // Clean up the event in case it is being reused
-               event.result = undefined;
-               if ( !event.target ) {
-                       event.target = elem;
-               }
-
-               // Clone any incoming data and prepend the event, creating the handler arg list
-               data = data == null ?
-                       [ event ] :
-                       jQuery.makeArray( data, [ event ] );
-
-               // Allow special events to draw outside the lines
-               special = jQuery.event.special[ type ] || {};
-               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
-                       return;
-               }
-
-               // Determine event propagation path in advance, per W3C events spec (#9951)
-               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-                       bubbleType = special.delegateType || type;
-                       if ( !rfocusMorph.test( bubbleType + type ) ) {
-                               cur = cur.parentNode;
-                       }
-                       for ( ; cur; cur = cur.parentNode ) {
-                               eventPath.push( cur );
-                               tmp = cur;
-                       }
-
-                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( tmp === (elem.ownerDocument || document) ) {
-                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
-                       }
-               }
-
-               // Fire handlers on the event path
-               i = 0;
-               while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
-                       event.type = i > 1 ?
-                               bubbleType :
-                               special.bindType || type;
-
-                       // jQuery handler
-                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-                       if ( handle ) {
-                               handle.apply( cur, data );
-                       }
-
-                       // Native handler
-                       handle = ontype && cur[ ontype ];
-                       if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
-                               event.result = handle.apply( cur, data );
-                               if ( event.result === false ) {
-                                       event.preventDefault();
-                               }
-                       }
-               }
-               event.type = type;
-
-               // If nobody prevented the default action, do it now
-               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-                       if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
-                               jQuery.acceptData( elem ) ) {
-
-                               // Call a native DOM method on the target with the same name name as the event.
-                               // Can't use an .isFunction() check here because IE6/7 fails that test.
-                               // Don't do default actions on window, that's where global variables be (#6170)
-                               if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
-                                       // Don't re-trigger an onFOO event when we call its FOO() method
-                                       tmp = elem[ ontype ];
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = null;
-                                       }
-
-                                       // Prevent re-triggering of the same event, since we already bubbled it above
-                                       jQuery.event.triggered = type;
-                                       try {
-                                               elem[ type ]();
-                                       } catch ( e ) {
-                                               // IE<9 dies on focus/blur to hidden element (#1486,#12518)
-                                               // only reproducible on winXP IE8 native, not IE9 in IE8 mode
-                                       }
-                                       jQuery.event.triggered = undefined;
-
-                                       if ( tmp ) {
-                                               elem[ ontype ] = tmp;
-                                       }
-                               }
-                       }
-               }
-
-               return event.result;
-       },
-
-       dispatch: function( event ) {
-
-               // Make a writable jQuery.Event from the native event object
-               event = jQuery.event.fix( event );
-
-               var i, ret, handleObj, matched, j,
-                       handlerQueue = [],
-                       args = slice.call( arguments ),
-                       handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
-                       special = jQuery.event.special[ event.type ] || {};
-
-               // Use the fix-ed jQuery.Event rather than the (read-only) native event
-               args[0] = event;
-               event.delegateTarget = this;
-
-               // Call the preDispatch hook for the mapped type, and let it bail if desired
-               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-                       return;
-               }
-
-               // Determine handlers
-               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
-               // Run delegates first; they may want to stop propagation beneath us
-               i = 0;
-               while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
-                       event.currentTarget = matched.elem;
-
-                       j = 0;
-                       while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
-                               // Triggered event must either 1) have no namespace, or
-                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-                               if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
-                                       event.handleObj = handleObj;
-                                       event.data = handleObj.data;
-
-                                       ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-                                                       .apply( matched.elem, args );
-
-                                       if ( ret !== undefined ) {
-                                               if ( (event.result = ret) === false ) {
-                                                       event.preventDefault();
-                                                       event.stopPropagation();
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               // Call the postDispatch hook for the mapped type
-               if ( special.postDispatch ) {
-                       special.postDispatch.call( this, event );
-               }
-
-               return event.result;
-       },
-
-       handlers: function( event, handlers ) {
-               var sel, handleObj, matches, i,
-                       handlerQueue = [],
-                       delegateCount = handlers.delegateCount,
-                       cur = event.target;
-
-               // Find delegate handlers
-               // Black-hole SVG <use> instance trees (#13180)
-               // Avoid non-left-click bubbling in Firefox (#3861)
-               if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
-                       /* jshint eqeqeq: false */
-                       for ( ; cur != this; cur = cur.parentNode || this ) {
-                               /* jshint eqeqeq: true */
-
-                               // Don't check non-elements (#13208)
-                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
-                               if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
-                                       matches = [];
-                                       for ( i = 0; i < delegateCount; i++ ) {
-                                               handleObj = handlers[ i ];
-
-                                               // Don't conflict with Object.prototype properties (#13203)
-                                               sel = handleObj.selector + " ";
-
-                                               if ( matches[ sel ] === undefined ) {
-                                                       matches[ sel ] = handleObj.needsContext ?
-                                                               jQuery( sel, this ).index( cur ) >= 0 :
-                                                               jQuery.find( sel, this, null, [ cur ] ).length;
-                                               }
-                                               if ( matches[ sel ] ) {
-                                                       matches.push( handleObj );
-                                               }
-                                       }
-                                       if ( matches.length ) {
-                                               handlerQueue.push({ elem: cur, handlers: matches });
-                                       }
-                               }
-                       }
-               }
-
-               // Add the remaining (directly-bound) handlers
-               if ( delegateCount < handlers.length ) {
-                       handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
-               }
-
-               return handlerQueue;
-       },
-
-       fix: function( event ) {
-               if ( event[ jQuery.expando ] ) {
-                       return event;
-               }
-
-               // Create a writable copy of the event object and normalize some properties
-               var i, prop, copy,
-                       type = event.type,
-                       originalEvent = event,
-                       fixHook = this.fixHooks[ type ];
-
-               if ( !fixHook ) {
-                       this.fixHooks[ type ] = fixHook =
-                               rmouseEvent.test( type ) ? this.mouseHooks :
-                               rkeyEvent.test( type ) ? this.keyHooks :
-                               {};
-               }
-               copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-               event = new jQuery.Event( originalEvent );
-
-               i = copy.length;
-               while ( i-- ) {
-                       prop = copy[ i ];
-                       event[ prop ] = originalEvent[ prop ];
-               }
-
-               // Support: IE<9
-               // Fix target property (#1925)
-               if ( !event.target ) {
-                       event.target = originalEvent.srcElement || document;
-               }
-
-               // Support: Chrome 23+, Safari?
-               // Target should not be a text node (#504, #13143)
-               if ( event.target.nodeType === 3 ) {
-                       event.target = event.target.parentNode;
-               }
-
-               // Support: IE<9
-               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
-               event.metaKey = !!event.metaKey;
-
-               return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
-       },
-
-       // Includes some event props shared by KeyEvent and MouseEvent
-       props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-       fixHooks: {},
-
-       keyHooks: {
-               props: "char charCode key keyCode".split(" "),
-               filter: function( event, original ) {
-
-                       // Add which for key events
-                       if ( event.which == null ) {
-                               event.which = original.charCode != null ? original.charCode : original.keyCode;
-                       }
-
-                       return event;
-               }
-       },
-
-       mouseHooks: {
-               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-               filter: function( event, original ) {
-                       var body, eventDoc, doc,
-                               button = original.button,
-                               fromElement = original.fromElement;
-
-                       // Calculate pageX/Y if missing and clientX/Y available
-                       if ( event.pageX == null && original.clientX != null ) {
-                               eventDoc = event.target.ownerDocument || document;
-                               doc = eventDoc.documentElement;
-                               body = eventDoc.body;
-
-                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-                       }
-
-                       // Add relatedTarget, if necessary
-                       if ( !event.relatedTarget && fromElement ) {
-                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-                       }
-
-                       // Add which for click: 1 === left; 2 === middle; 3 === right
-                       // Note: button is not normalized, so don't use it
-                       if ( !event.which && button !== undefined ) {
-                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-                       }
-
-                       return event;
-               }
-       },
-
-       special: {
-               load: {
-                       // Prevent triggered image.load events from bubbling to window.load
-                       noBubble: true
-               },
-               focus: {
-                       // Fire native event if possible so blur/focus sequence is correct
-                       trigger: function() {
-                               if ( this !== safeActiveElement() && this.focus ) {
-                                       try {
-                                               this.focus();
-                                               return false;
-                                       } catch ( e ) {
-                                               // Support: IE<9
-                                               // If we error on focus to hidden element (#1486, #12518),
-                                               // let .trigger() run the handlers
-                                       }
-                               }
-                       },
-                       delegateType: "focusin"
-               },
-               blur: {
-                       trigger: function() {
-                               if ( this === safeActiveElement() && this.blur ) {
-                                       this.blur();
-                                       return false;
-                               }
-                       },
-                       delegateType: "focusout"
-               },
-               click: {
-                       // For checkbox, fire native event so checked state will be right
-                       trigger: function() {
-                               if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
-                                       this.click();
-                                       return false;
-                               }
-                       },
-
-                       // For cross-browser consistency, don't fire native .click() on links
-                       _default: function( event ) {
-                               return jQuery.nodeName( event.target, "a" );
-                       }
-               },
-
-               beforeunload: {
-                       postDispatch: function( event ) {
-
-                               // Support: Firefox 20+
-                               // Firefox doesn't alert if the returnValue field is not set.
-                               if ( event.result !== undefined && event.originalEvent ) {
-                                       event.originalEvent.returnValue = event.result;
-                               }
-                       }
-               }
-       },
-
-       simulate: function( type, elem, event, bubble ) {
-               // Piggyback on a donor event to simulate a different one.
-               // Fake originalEvent to avoid donor's stopPropagation, but if the
-               // simulated event prevents default then we do the same on the donor.
-               var e = jQuery.extend(
-                       new jQuery.Event(),
-                       event,
-                       {
-                               type: type,
-                               isSimulated: true,
-                               originalEvent: {}
-                       }
-               );
-               if ( bubble ) {
-                       jQuery.event.trigger( e, null, elem );
-               } else {
-                       jQuery.event.dispatch.call( elem, e );
-               }
-               if ( e.isDefaultPrevented() ) {
-                       event.preventDefault();
-               }
-       }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
-       function( elem, type, handle ) {
-               if ( elem.removeEventListener ) {
-                       elem.removeEventListener( type, handle, false );
-               }
-       } :
-       function( elem, type, handle ) {
-               var name = "on" + type;
-
-               if ( elem.detachEvent ) {
-
-                       // #8545, #7054, preventing memory leaks for custom events in IE6-8
-                       // detachEvent needed property on element, by name of that event, to properly expose it to GC
-                       if ( typeof elem[ name ] === strundefined ) {
-                               elem[ name ] = null;
-                       }
-
-                       elem.detachEvent( name, handle );
-               }
-       };
-
-jQuery.Event = function( src, props ) {
-       // Allow instantiation without the 'new' keyword
-       if ( !(this instanceof jQuery.Event) ) {
-               return new jQuery.Event( src, props );
-       }
-
-       // Event object
-       if ( src && src.type ) {
-               this.originalEvent = src;
-               this.type = src.type;
-
-               // Events bubbling up the document may have been marked as prevented
-               // by a handler lower down the tree; reflect the correct value.
-               this.isDefaultPrevented = src.defaultPrevented ||
-                               src.defaultPrevented === undefined &&
-                               // Support: IE < 9, Android < 4.0
-                               src.returnValue === false ?
-                       returnTrue :
-                       returnFalse;
-
-       // Event type
-       } else {
-               this.type = src;
-       }
-
-       // Put explicitly provided properties onto the event object
-       if ( props ) {
-               jQuery.extend( this, props );
-       }
-
-       // Create a timestamp if incoming event doesn't have one
-       this.timeStamp = src && src.timeStamp || jQuery.now();
-
-       // Mark it as fixed
-       this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-       isDefaultPrevented: returnFalse,
-       isPropagationStopped: returnFalse,
-       isImmediatePropagationStopped: returnFalse,
-
-       preventDefault: function() {
-               var e = this.originalEvent;
-
-               this.isDefaultPrevented = returnTrue;
-               if ( !e ) {
-                       return;
-               }
-
-               // If preventDefault exists, run it on the original event
-               if ( e.preventDefault ) {
-                       e.preventDefault();
-
-               // Support: IE
-               // Otherwise set the returnValue property of the original event to false
-               } else {
-                       e.returnValue = false;
-               }
-       },
-       stopPropagation: function() {
-               var e = this.originalEvent;
-
-               this.isPropagationStopped = returnTrue;
-               if ( !e ) {
-                       return;
-               }
-               // If stopPropagation exists, run it on the original event
-               if ( e.stopPropagation ) {
-                       e.stopPropagation();
-               }
-
-               // Support: IE
-               // Set the cancelBubble property of the original event to true
-               e.cancelBubble = true;
-       },
-       stopImmediatePropagation: function() {
-               var e = this.originalEvent;
-
-               this.isImmediatePropagationStopped = returnTrue;
-
-               if ( e && e.stopImmediatePropagation ) {
-                       e.stopImmediatePropagation();
-               }
-
-               this.stopPropagation();
-       }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-       mouseenter: "mouseover",
-       mouseleave: "mouseout",
-       pointerenter: "pointerover",
-       pointerleave: "pointerout"
-}, function( orig, fix ) {
-       jQuery.event.special[ orig ] = {
-               delegateType: fix,
-               bindType: fix,
-
-               handle: function( event ) {
-                       var ret,
-                               target = this,
-                               related = event.relatedTarget,
-                               handleObj = event.handleObj;
-
-                       // For mousenter/leave call the handler if related is outside the target.
-                       // NB: No relatedTarget if the mouse left/entered the browser window
-                       if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-                               event.type = handleObj.origType;
-                               ret = handleObj.handler.apply( this, arguments );
-                               event.type = fix;
-                       }
-                       return ret;
-               }
-       };
-});
-
-// IE submit delegation
-if ( !support.submitBubbles ) {
-
-       jQuery.event.special.submit = {
-               setup: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
-                       }
-
-                       // Lazy-add a submit handler when a descendant form may potentially be submitted
-                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-                               // Node name check avoids a VML-related crash in IE (#9807)
-                               var elem = e.target,
-                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                               if ( form && !jQuery._data( form, "submitBubbles" ) ) {
-                                       jQuery.event.add( form, "submit._submit", function( event ) {
-                                               event._submit_bubble = true;
-                                       });
-                                       jQuery._data( form, "submitBubbles", true );
-                               }
-                       });
-                       // return undefined since we don't need an event listener
-               },
-
-               postDispatch: function( event ) {
-                       // If form was submitted by the user, bubble the event up the tree
-                       if ( event._submit_bubble ) {
-                               delete event._submit_bubble;
-                               if ( this.parentNode && !event.isTrigger ) {
-                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
-                               }
-                       }
-               },
-
-               teardown: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
-                       }
-
-                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-                       jQuery.event.remove( this, "._submit" );
-               }
-       };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !support.changeBubbles ) {
-
-       jQuery.event.special.change = {
-
-               setup: function() {
-
-                       if ( rformElems.test( this.nodeName ) ) {
-                               // IE doesn't fire change on a check/radio until blur; trigger it on click
-                               // after a propertychange. Eat the blur-change in special.change.handle.
-                               // This still fires onchange a second time for check/radio after blur.
-                               if ( this.type === "checkbox" || this.type === "radio" ) {
-                                       jQuery.event.add( this, "propertychange._change", function( event ) {
-                                               if ( event.originalEvent.propertyName === "checked" ) {
-                                                       this._just_changed = true;
-                                               }
-                                       });
-                                       jQuery.event.add( this, "click._change", function( event ) {
-                                               if ( this._just_changed && !event.isTrigger ) {
-                                                       this._just_changed = false;
-                                               }
-                                               // Allow triggered, simulated change events (#11500)
-                                               jQuery.event.simulate( "change", this, event, true );
-                                       });
-                               }
-                               return false;
-                       }
-                       // Delegated event; lazy-add a change handler on descendant inputs
-                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
-                               var elem = e.target;
-
-                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
-                                       jQuery.event.add( elem, "change._change", function( event ) {
-                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
-                                               }
-                                       });
-                                       jQuery._data( elem, "changeBubbles", true );
-                               }
-                       });
-               },
-
-               handle: function( event ) {
-                       var elem = event.target;
-
-                       // Swallow native change events from checkbox/radio, we already triggered them above
-                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-                               return event.handleObj.handler.apply( this, arguments );
-                       }
-               },
-
-               teardown: function() {
-                       jQuery.event.remove( this, "._change" );
-
-                       return !rformElems.test( this.nodeName );
-               }
-       };
-}
-
-// Create "bubbling" focus and blur events
-if ( !support.focusinBubbles ) {
-       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-               // Attach a single capturing handler on the document while someone wants focusin/focusout
-               var handler = function( event ) {
-                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-                       };
-
-               jQuery.event.special[ fix ] = {
-                       setup: function() {
-                               var doc = this.ownerDocument || this,
-                                       attaches = jQuery._data( doc, fix );
-
-                               if ( !attaches ) {
-                                       doc.addEventListener( orig, handler, true );
-                               }
-                               jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
-                       },
-                       teardown: function() {
-                               var doc = this.ownerDocument || this,
-                                       attaches = jQuery._data( doc, fix ) - 1;
-
-                               if ( !attaches ) {
-                                       doc.removeEventListener( orig, handler, true );
-                                       jQuery._removeData( doc, fix );
-                               } else {
-                                       jQuery._data( doc, fix, attaches );
-                               }
-                       }
-               };
-       });
-}
-
-jQuery.fn.extend({
-
-       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-               var type, origFn;
-
-               // Types can be a map of types/handlers
-               if ( typeof types === "object" ) {
-                       // ( types-Object, selector, data )
-                       if ( typeof selector !== "string" ) {
-                               // ( types-Object, data )
-                               data = data || selector;
-                               selector = undefined;
-                       }
-                       for ( type in types ) {
-                               this.on( type, selector, data, types[ type ], one );
-                       }
-                       return this;
-               }
-
-               if ( data == null && fn == null ) {
-                       // ( types, fn )
-                       fn = selector;
-                       data = selector = undefined;
-               } else if ( fn == null ) {
-                       if ( typeof selector === "string" ) {
-                               // ( types, selector, fn )
-                               fn = data;
-                               data = undefined;
-                       } else {
-                               // ( types, data, fn )
-                               fn = data;
-                               data = selector;
-                               selector = undefined;
-                       }
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               } else if ( !fn ) {
-                       return this;
-               }
-
-               if ( one === 1 ) {
-                       origFn = fn;
-                       fn = function( event ) {
-                               // Can use an empty set, since event contains the info
-                               jQuery().off( event );
-                               return origFn.apply( this, arguments );
-                       };
-                       // Use same guid so caller can remove using origFn
-                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-               }
-               return this.each( function() {
-                       jQuery.event.add( this, types, fn, data, selector );
-               });
-       },
-       one: function( types, selector, data, fn ) {
-               return this.on( types, selector, data, fn, 1 );
-       },
-       off: function( types, selector, fn ) {
-               var handleObj, type;
-               if ( types && types.preventDefault && types.handleObj ) {
-                       // ( event )  dispatched jQuery.Event
-                       handleObj = types.handleObj;
-                       jQuery( types.delegateTarget ).off(
-                               handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-                               handleObj.selector,
-                               handleObj.handler
-                       );
-                       return this;
-               }
-               if ( typeof types === "object" ) {
-                       // ( types-object [, selector] )
-                       for ( type in types ) {
-                               this.off( type, selector, types[ type ] );
-                       }
-                       return this;
-               }
-               if ( selector === false || typeof selector === "function" ) {
-                       // ( types [, fn] )
-                       fn = selector;
-                       selector = undefined;
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               }
-               return this.each(function() {
-                       jQuery.event.remove( this, types, fn, selector );
-               });
-       },
-
-       trigger: function( type, data ) {
-               return this.each(function() {
-                       jQuery.event.trigger( type, data, this );
-               });
-       },
-       triggerHandler: function( type, data ) {
-               var elem = this[0];
-               if ( elem ) {
-                       return jQuery.event.trigger( type, data, elem, true );
-               }
-       }
-});
-
-
-function createSafeFragment( document ) {
-       var list = nodeNames.split( "|" ),
-               safeFrag = document.createDocumentFragment();
-
-       if ( safeFrag.createElement ) {
-               while ( list.length ) {
-                       safeFrag.createElement(
-                               list.pop()
-                       );
-               }
-       }
-       return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-               "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-       rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
-       rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-       rleadingWhitespace = /^\s+/,
-       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
-       rtagName = /<([\w:]+)/,
-       rtbody = /<tbody/i,
-       rhtml = /<|&#?\w+;/,
-       rnoInnerhtml = /<(?:script|style|link)/i,
-       // checked="checked" or checked
-       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-       rscriptType = /^$|\/(?:java|ecma)script/i,
-       rscriptTypeMasked = /^true\/(.*)/,
-       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
-       // We have to close these tags to support XHTML (#13200)
-       wrapMap = {
-               option: [ 1, "<select multiple='multiple'>", "</select>" ],
-               legend: [ 1, "<fieldset>", "</fieldset>" ],
-               area: [ 1, "<map>", "</map>" ],
-               param: [ 1, "<object>", "</object>" ],
-               thead: [ 1, "<table>", "</table>" ],
-               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-               // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-               // unless wrapped in a div with non-breaking characters in front of it.
-               _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
-       },
-       safeFragment = createSafeFragment( document ),
-       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-function getAll( context, tag ) {
-       var elems, elem,
-               i = 0,
-               found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
-                       typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
-                       undefined;
-
-       if ( !found ) {
-               for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
-                       if ( !tag || jQuery.nodeName( elem, tag ) ) {
-                               found.push( elem );
-                       } else {
-                               jQuery.merge( found, getAll( elem, tag ) );
-                       }
-               }
-       }
-
-       return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
-               jQuery.merge( [ context ], found ) :
-               found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-       if ( rcheckableType.test( elem.type ) ) {
-               elem.defaultChecked = elem.checked;
-       }
-}
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
-       return jQuery.nodeName( elem, "table" ) &&
-               jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
-               elem.getElementsByTagName("tbody")[0] ||
-                       elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
-               elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
-       elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
-       return elem;
-}
-function restoreScript( elem ) {
-       var match = rscriptTypeMasked.exec( elem.type );
-       if ( match ) {
-               elem.type = match[1];
-       } else {
-               elem.removeAttribute("type");
-       }
-       return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
-       var elem,
-               i = 0;
-       for ( ; (elem = elems[i]) != null; i++ ) {
-               jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
-       }
-}
-
-function cloneCopyEvent( src, dest ) {
-
-       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-               return;
-       }
-
-       var type, i, l,
-               oldData = jQuery._data( src ),
-               curData = jQuery._data( dest, oldData ),
-               events = oldData.events;
-
-       if ( events ) {
-               delete curData.handle;
-               curData.events = {};
-
-               for ( type in events ) {
-                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-                               jQuery.event.add( dest, type, events[ type ][ i ] );
-                       }
-               }
-       }
-
-       // make the cloned public data object a copy from the original
-       if ( curData.data ) {
-               curData.data = jQuery.extend( {}, curData.data );
-       }
-}
-
-function fixCloneNodeIssues( src, dest ) {
-       var nodeName, e, data;
-
-       // We do not need to do anything for non-Elements
-       if ( dest.nodeType !== 1 ) {
-               return;
-       }
-
-       nodeName = dest.nodeName.toLowerCase();
-
-       // IE6-8 copies events bound via attachEvent when using cloneNode.
-       if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
-               data = jQuery._data( dest );
-
-               for ( e in data.events ) {
-                       jQuery.removeEvent( dest, e, data.handle );
-               }
-
-               // Event data gets referenced instead of copied if the expando gets copied too
-               dest.removeAttribute( jQuery.expando );
-       }
-
-       // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
-       if ( nodeName === "script" && dest.text !== src.text ) {
-               disableScript( dest ).text = src.text;
-               restoreScript( dest );
-
-       // IE6-10 improperly clones children of object elements using classid.
-       // IE10 throws NoModificationAllowedError if parent is null, #12132.
-       } else if ( nodeName === "object" ) {
-               if ( dest.parentNode ) {
-                       dest.outerHTML = src.outerHTML;
-               }
-
-               // This path appears unavoidable for IE9. When cloning an object
-               // element in IE9, the outerHTML strategy above is not sufficient.
-               // If the src has innerHTML and the destination does not,
-               // copy the src.innerHTML into the dest.innerHTML. #10324
-               if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
-                       dest.innerHTML = src.innerHTML;
-               }
-
-       } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-               // IE6-8 fails to persist the checked state of a cloned checkbox
-               // or radio button. Worse, IE6-7 fail to give the cloned element
-               // a checked appearance if the defaultChecked value isn't also set
-
-               dest.defaultChecked = dest.checked = src.checked;
-
-               // IE6-7 get confused and end up setting the value of a cloned
-               // checkbox/radio button to an empty string instead of "on"
-               if ( dest.value !== src.value ) {
-                       dest.value = src.value;
-               }
-
-       // IE6-8 fails to return the selected option to the default selected
-       // state when cloning options
-       } else if ( nodeName === "option" ) {
-               dest.defaultSelected = dest.selected = src.defaultSelected;
-
-       // IE6-8 fails to set the defaultValue to the correct value when
-       // cloning other types of input fields
-       } else if ( nodeName === "input" || nodeName === "textarea" ) {
-               dest.defaultValue = src.defaultValue;
-       }
-}
-
-jQuery.extend({
-       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-               var destElements, node, clone, i, srcElements,
-                       inPage = jQuery.contains( elem.ownerDocument, elem );
-
-               if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
-                       clone = elem.cloneNode( true );
-
-               // IE<=8 does not properly clone detached, unknown element nodes
-               } else {
-                       fragmentDiv.innerHTML = elem.outerHTML;
-                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
-               }
-
-               if ( (!support.noCloneEvent || !support.noCloneChecked) &&
-                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
-                       // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
-                       destElements = getAll( clone );
-                       srcElements = getAll( elem );
-
-                       // Fix all IE cloning issues
-                       for ( i = 0; (node = srcElements[i]) != null; ++i ) {
-                               // Ensure that the destination node is not null; Fixes #9587
-                               if ( destElements[i] ) {
-                                       fixCloneNodeIssues( node, destElements[i] );
-                               }
-                       }
-               }
-
-               // Copy the events from the original to the clone
-               if ( dataAndEvents ) {
-                       if ( deepDataAndEvents ) {
-                               srcElements = srcElements || getAll( elem );
-                               destElements = destElements || getAll( clone );
-
-                               for ( i = 0; (node = srcElements[i]) != null; i++ ) {
-                                       cloneCopyEvent( node, destElements[i] );
-                               }
-                       } else {
-                               cloneCopyEvent( elem, clone );
-                       }
-               }
-
-               // Preserve script evaluation history
-               destElements = getAll( clone, "script" );
-               if ( destElements.length > 0 ) {
-                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
-               }
-
-               destElements = srcElements = node = null;
-
-               // Return the cloned set
-               return clone;
-       },
-
-       buildFragment: function( elems, context, scripts, selection ) {
-               var j, elem, contains,
-                       tmp, tag, tbody, wrap,
-                       l = elems.length,
-
-                       // Ensure a safe fragment
-                       safe = createSafeFragment( context ),
-
-                       nodes = [],
-                       i = 0;
-
-               for ( ; i < l; i++ ) {
-                       elem = elems[ i ];
-
-                       if ( elem || elem === 0 ) {
-
-                               // Add nodes directly
-                               if ( jQuery.type( elem ) === "object" ) {
-                                       jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
-                               // Convert non-html into a text node
-                               } else if ( !rhtml.test( elem ) ) {
-                                       nodes.push( context.createTextNode( elem ) );
-
-                               // Convert html into DOM nodes
-                               } else {
-                                       tmp = tmp || safe.appendChild( context.createElement("div") );
-
-                                       // Deserialize a standard representation
-                                       tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
-                                       wrap = wrapMap[ tag ] || wrapMap._default;
-
-                                       tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
-                                       // Descend through wrappers to the right content
-                                       j = wrap[0];
-                                       while ( j-- ) {
-                                               tmp = tmp.lastChild;
-                                       }
-
-                                       // Manually add leading whitespace removed by IE
-                                       if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                               nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
-                                       }
-
-                                       // Remove IE's autoinserted <tbody> from table fragments
-                                       if ( !support.tbody ) {
-
-                                               // String was a <table>, *may* have spurious <tbody>
-                                               elem = tag === "table" && !rtbody.test( elem ) ?
-                                                       tmp.firstChild :
-
-                                                       // String was a bare <thead> or <tfoot>
-                                                       wrap[1] === "<table>" && !rtbody.test( elem ) ?
-                                                               tmp :
-                                                               0;
-
-                                               j = elem && elem.childNodes.length;
-                                               while ( j-- ) {
-                                                       if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
-                                                               elem.removeChild( tbody );
-                                                       }
-                                               }
-                                       }
-
-                                       jQuery.merge( nodes, tmp.childNodes );
-
-                                       // Fix #12392 for WebKit and IE > 9
-                                       tmp.textContent = "";
-
-                                       // Fix #12392 for oldIE
-                                       while ( tmp.firstChild ) {
-                                               tmp.removeChild( tmp.firstChild );
-                                       }
-
-                                       // Remember the top-level container for proper cleanup
-                                       tmp = safe.lastChild;
-                               }
-                       }
-               }
-
-               // Fix #11356: Clear elements from fragment
-               if ( tmp ) {
-                       safe.removeChild( tmp );
-               }
-
-               // Reset defaultChecked for any radios and checkboxes
-               // about to be appended to the DOM in IE 6/7 (#8060)
-               if ( !support.appendChecked ) {
-                       jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
-               }
-
-               i = 0;
-               while ( (elem = nodes[ i++ ]) ) {
-
-                       // #4087 - If origin and destination elements are the same, and this is
-                       // that element, do not do anything
-                       if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
-                               continue;
-                       }
-
-                       contains = jQuery.contains( elem.ownerDocument, elem );
-
-                       // Append to fragment
-                       tmp = getAll( safe.appendChild( elem ), "script" );
-
-                       // Preserve script evaluation history
-                       if ( contains ) {
-                               setGlobalEval( tmp );
-                       }
-
-                       // Capture executables
-                       if ( scripts ) {
-                               j = 0;
-                               while ( (elem = tmp[ j++ ]) ) {
-                                       if ( rscriptType.test( elem.type || "" ) ) {
-                                               scripts.push( elem );
-                                       }
-                               }
-                       }
-               }
-
-               tmp = null;
-
-               return safe;
-       },
-
-       cleanData: function( elems, /* internal */ acceptData ) {
-               var elem, type, id, data,
-                       i = 0,
-                       internalKey = jQuery.expando,
-                       cache = jQuery.cache,
-                       deleteExpando = support.deleteExpando,
-                       special = jQuery.event.special;
-
-               for ( ; (elem = elems[i]) != null; i++ ) {
-                       if ( acceptData || jQuery.acceptData( elem ) ) {
-
-                               id = elem[ internalKey ];
-                               data = id && cache[ id ];
-
-                               if ( data ) {
-                                       if ( data.events ) {
-                                               for ( type in data.events ) {
-                                                       if ( special[ type ] ) {
-                                                               jQuery.event.remove( elem, type );
-
-                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
-                                                       } else {
-                                                               jQuery.removeEvent( elem, type, data.handle );
-                                                       }
-                                               }
-                                       }
-
-                                       // Remove cache only if it was not already removed by jQuery.event.remove
-                                       if ( cache[ id ] ) {
-
-                                               delete cache[ id ];
-
-                                               // IE does not allow us to delete expando properties from nodes,
-                                               // nor does it have a removeAttribute function on Document nodes;
-                                               // we must handle all of these cases
-                                               if ( deleteExpando ) {
-                                                       delete elem[ internalKey ];
-
-                                               } else if ( typeof elem.removeAttribute !== strundefined ) {
-                                                       elem.removeAttribute( internalKey );
-
-                                               } else {
-                                                       elem[ internalKey ] = null;
-                                               }
-
-                                               deletedIds.push( id );
-                                       }
-                               }
-                       }
-               }
-       }
-});
-
-jQuery.fn.extend({
-       text: function( value ) {
-               return access( this, function( value ) {
-                       return value === undefined ?
-                               jQuery.text( this ) :
-                               this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
-               }, null, value, arguments.length );
-       },
-
-       append: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-                               var target = manipulationTarget( this, elem );
-                               target.appendChild( elem );
-                       }
-               });
-       },
-
-       prepend: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-                               var target = manipulationTarget( this, elem );
-                               target.insertBefore( elem, target.firstChild );
-                       }
-               });
-       },
-
-       before: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.parentNode ) {
-                               this.parentNode.insertBefore( elem, this );
-                       }
-               });
-       },
-
-       after: function() {
-               return this.domManip( arguments, function( elem ) {
-                       if ( this.parentNode ) {
-                               this.parentNode.insertBefore( elem, this.nextSibling );
-                       }
-               });
-       },
-
-       remove: function( selector, keepData /* Internal Use Only */ ) {
-               var elem,
-                       elems = selector ? jQuery.filter( selector, this ) : this,
-                       i = 0;
-
-               for ( ; (elem = elems[i]) != null; i++ ) {
-
-                       if ( !keepData && elem.nodeType === 1 ) {
-                               jQuery.cleanData( getAll( elem ) );
-                       }
-
-                       if ( elem.parentNode ) {
-                               if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
-                                       setGlobalEval( getAll( elem, "script" ) );
-                               }
-                               elem.parentNode.removeChild( elem );
-                       }
-               }
-
-               return this;
-       },
-
-       empty: function() {
-               var elem,
-                       i = 0;
-
-               for ( ; (elem = this[i]) != null; i++ ) {
-                       // Remove element nodes and prevent memory leaks
-                       if ( elem.nodeType === 1 ) {
-                               jQuery.cleanData( getAll( elem, false ) );
-                       }
-
-                       // Remove any remaining nodes
-                       while ( elem.firstChild ) {
-                               elem.removeChild( elem.firstChild );
-                       }
-
-                       // If this is a select, ensure that it displays empty (#12336)
-                       // Support: IE<9
-                       if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
-                               elem.options.length = 0;
-                       }
-               }
-
-               return this;
-       },
-
-       clone: function( dataAndEvents, deepDataAndEvents ) {
-               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-               return this.map(function() {
-                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-               });
-       },
-
-       html: function( value ) {
-               return access( this, function( value ) {
-                       var elem = this[ 0 ] || {},
-                               i = 0,
-                               l = this.length;
-
-                       if ( value === undefined ) {
-                               return elem.nodeType === 1 ?
-                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
-                                       undefined;
-                       }
-
-                       // See if we can take a shortcut and just use innerHTML
-                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-                               ( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
-                               ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-                               !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
-
-                               value = value.replace( rxhtmlTag, "<$1></$2>" );
-
-                               try {
-                                       for (; i < l; i++ ) {
-                                               // Remove element nodes and prevent memory leaks
-                                               elem = this[i] || {};
-                                               if ( elem.nodeType === 1 ) {
-                                                       jQuery.cleanData( getAll( elem, false ) );
-                                                       elem.innerHTML = value;
-                                               }
-                                       }
-
-                                       elem = 0;
-
-                               // If using innerHTML throws an exception, use the fallback method
-                               } catch(e) {}
-                       }
-
-                       if ( elem ) {
-                               this.empty().append( value );
-                       }
-               }, null, value, arguments.length );
-       },
-
-       replaceWith: function() {
-               var arg = arguments[ 0 ];
-
-               // Make the changes, replacing each context element with the new content
-               this.domManip( arguments, function( elem ) {
-                       arg = this.parentNode;
-
-                       jQuery.cleanData( getAll( this ) );
-
-                       if ( arg ) {
-                               arg.replaceChild( elem, this );
-                       }
-               });
-
-               // Force removal if there was no new content (e.g., from empty arguments)
-               return arg && (arg.length || arg.nodeType) ? this : this.remove();
-       },
-
-       detach: function( selector ) {
-               return this.remove( selector, true );
-       },
-
-       domManip: function( args, callback ) {
-
-               // Flatten any nested arrays
-               args = concat.apply( [], args );
-
-               var first, node, hasScripts,
-                       scripts, doc, fragment,
-                       i = 0,
-                       l = this.length,
-                       set = this,
-                       iNoClone = l - 1,
-                       value = args[0],
-                       isFunction = jQuery.isFunction( value );
-
-               // We can't cloneNode fragments that contain checked, in WebKit
-               if ( isFunction ||
-                               ( l > 1 && typeof value === "string" &&
-                                       !support.checkClone && rchecked.test( value ) ) ) {
-                       return this.each(function( index ) {
-                               var self = set.eq( index );
-                               if ( isFunction ) {
-                                       args[0] = value.call( this, index, self.html() );
-                               }
-                               self.domManip( args, callback );
-                       });
-               }
-
-               if ( l ) {
-                       fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
-                       first = fragment.firstChild;
-
-                       if ( fragment.childNodes.length === 1 ) {
-                               fragment = first;
-                       }
-
-                       if ( first ) {
-                               scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
-                               hasScripts = scripts.length;
-
-                               // Use the original fragment for the last item instead of the first because it can end up
-                               // being emptied incorrectly in certain situations (#8070).
-                               for ( ; i < l; i++ ) {
-                                       node = fragment;
-
-                                       if ( i !== iNoClone ) {
-                                               node = jQuery.clone( node, true, true );
-
-                                               // Keep references to cloned scripts for later restoration
-                                               if ( hasScripts ) {
-                                                       jQuery.merge( scripts, getAll( node, "script" ) );
-                                               }
-                                       }
-
-                                       callback.call( this[i], node, i );
-                               }
-
-                               if ( hasScripts ) {
-                                       doc = scripts[ scripts.length - 1 ].ownerDocument;
-
-                                       // Reenable scripts
-                                       jQuery.map( scripts, restoreScript );
-
-                                       // Evaluate executable scripts on first document insertion
-                                       for ( i = 0; i < hasScripts; i++ ) {
-                                               node = scripts[ i ];
-                                               if ( rscriptType.test( node.type || "" ) &&
-                                                       !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
-                                                       if ( node.src ) {
-                                                               // Optional AJAX dependency, but won't run scripts if not present
-                                                               if ( jQuery._evalUrl ) {
-                                                                       jQuery._evalUrl( node.src );
-                                                               }
-                                                       } else {
-                                                               jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               // Fix #11809: Avoid leaking memory
-                               fragment = first = null;
-                       }
-               }
-
-               return this;
-       }
-});
-
-jQuery.each({
-       appendTo: "append",
-       prependTo: "prepend",
-       insertBefore: "before",
-       insertAfter: "after",
-       replaceAll: "replaceWith"
-}, function( name, original ) {
-       jQuery.fn[ name ] = function( selector ) {
-               var elems,
-                       i = 0,
-                       ret = [],
-                       insert = jQuery( selector ),
-                       last = insert.length - 1;
-
-               for ( ; i <= last; i++ ) {
-                       elems = i === last ? this : this.clone(true);
-                       jQuery( insert[i] )[ original ]( elems );
-
-                       // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
-                       push.apply( ret, elems.get() );
-               }
-
-               return this.pushStack( ret );
-       };
-});
-
-
-var iframe,
-       elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
-       var style,
-               elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
-               // getDefaultComputedStyle might be reliably used only on attached element
-               display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
-                       // Use of this method is a temporary fix (more like optmization) until something better comes along,
-                       // since it was removed from specification and supported only in FF
-                       style.display : jQuery.css( elem[ 0 ], "display" );
-
-       // We don't have any data stored on the element,
-       // so use "detach" method as fast way to get rid of the element
-       elem.detach();
-
-       return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
-       var doc = document,
-               display = elemdisplay[ nodeName ];
-
-       if ( !display ) {
-               display = actualDisplay( nodeName, doc );
-
-               // If the simple way fails, read from inside an iframe
-               if ( display === "none" || !display ) {
-
-                       // Use the already-created iframe if possible
-                       iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
-
-                       // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
-                       doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
-
-                       // Support: IE
-                       doc.write();
-                       doc.close();
-
-                       display = actualDisplay( nodeName, doc );
-                       iframe.detach();
-               }
-
-               // Store the correct default display
-               elemdisplay[ nodeName ] = display;
-       }
-
-       return display;
-}
-
-
-(function() {
-       var shrinkWrapBlocksVal;
-
-       support.shrinkWrapBlocks = function() {
-               if ( shrinkWrapBlocksVal != null ) {
-                       return shrinkWrapBlocksVal;
-               }
-
-               // Will be changed later if needed.
-               shrinkWrapBlocksVal = false;
-
-               // Minified: var b,c,d
-               var div, body, container;
-
-               body = document.getElementsByTagName( "body" )[ 0 ];
-               if ( !body || !body.style ) {
-                       // Test fired too early or in an unsupported environment, exit.
-                       return;
-               }
-
-               // Setup
-               div = document.createElement( "div" );
-               container = document.createElement( "div" );
-               container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-               body.appendChild( container ).appendChild( div );
-
-               // Support: IE6
-               // Check if elements with layout shrink-wrap their children
-               if ( typeof div.style.zoom !== strundefined ) {
-                       // Reset CSS: box-sizing; display; margin; border
-                       div.style.cssText =
-                               // Support: Firefox<29, Android 2.3
-                               // Vendor-prefix box-sizing
-                               "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-                               "box-sizing:content-box;display:block;margin:0;border:0;" +
-                               "padding:1px;width:1px;zoom:1";
-                       div.appendChild( document.createElement( "div" ) ).style.width = "5px";
-                       shrinkWrapBlocksVal = div.offsetWidth !== 3;
-               }
-
-               body.removeChild( container );
-
-               return shrinkWrapBlocksVal;
-       };
-
-})();
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-
-
-var getStyles, curCSS,
-       rposition = /^(top|right|bottom|left)$/;
-
-if ( window.getComputedStyle ) {
-       getStyles = function( elem ) {
-               // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
-               // IE throws on elements created in popups
-               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
-               if ( elem.ownerDocument.defaultView.opener ) {
-                       return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
-               }
-
-               return window.getComputedStyle( elem, null );
-       };
-
-       curCSS = function( elem, name, computed ) {
-               var width, minWidth, maxWidth, ret,
-                       style = elem.style;
-
-               computed = computed || getStyles( elem );
-
-               // getPropertyValue is only needed for .css('filter') in IE9, see #12537
-               ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
-
-               if ( computed ) {
-
-                       if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
-                               ret = jQuery.style( elem, name );
-                       }
-
-                       // A tribute to the "awesome hack by Dean Edwards"
-                       // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
-                       // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
-                       // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-                       if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
-                               // Remember the original values
-                               width = style.width;
-                               minWidth = style.minWidth;
-                               maxWidth = style.maxWidth;
-
-                               // Put in the new values to get a computed value out
-                               style.minWidth = style.maxWidth = style.width = ret;
-                               ret = computed.width;
-
-                               // Revert the changed values
-                               style.width = width;
-                               style.minWidth = minWidth;
-                               style.maxWidth = maxWidth;
-                       }
-               }
-
-               // Support: IE
-               // IE returns zIndex value as an integer.
-               return ret === undefined ?
-                       ret :
-                       ret + "";
-       };
-} else if ( document.documentElement.currentStyle ) {
-       getStyles = function( elem ) {
-               return elem.currentStyle;
-       };
-
-       curCSS = function( elem, name, computed ) {
-               var left, rs, rsLeft, ret,
-                       style = elem.style;
-
-               computed = computed || getStyles( elem );
-               ret = computed ? computed[ name ] : undefined;
-
-               // Avoid setting ret to empty string here
-               // so we don't default to auto
-               if ( ret == null && style && style[ name ] ) {
-                       ret = style[ name ];
-               }
-
-               // From the awesome hack by Dean Edwards
-               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-               // If we're not dealing with a regular pixel number
-               // but a number that has a weird ending, we need to convert it to pixels
-               // but not position css attributes, as those are proportional to the parent element instead
-               // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
-               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
-                       // Remember the original values
-                       left = style.left;
-                       rs = elem.runtimeStyle;
-                       rsLeft = rs && rs.left;
-
-                       // Put in the new values to get a computed value out
-                       if ( rsLeft ) {
-                               rs.left = elem.currentStyle.left;
-                       }
-                       style.left = name === "fontSize" ? "1em" : ret;
-                       ret = style.pixelLeft + "px";
-
-                       // Revert the changed values
-                       style.left = left;
-                       if ( rsLeft ) {
-                               rs.left = rsLeft;
-                       }
-               }
-
-               // Support: IE
-               // IE returns zIndex value as an integer.
-               return ret === undefined ?
-                       ret :
-                       ret + "" || "auto";
-       };
-}
-
-
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-       // Define the hook, we'll check on the first run if it's really needed.
-       return {
-               get: function() {
-                       var condition = conditionFn();
-
-                       if ( condition == null ) {
-                               // The test was not ready at this point; screw the hook this time
-                               // but check again when needed next time.
-                               return;
-                       }
-
-                       if ( condition ) {
-                               // Hook not needed (or it's not possible to use it due to missing dependency),
-                               // remove it.
-                               // Since there are no other hooks for marginRight, remove the whole object.
-                               delete this.get;
-                               return;
-                       }
-
-                       // Hook needed; redefine it so that the support test is not executed again.
-
-                       return (this.get = hookFn).apply( this, arguments );
-               }
-       };
-}
-
-
-(function() {
-       // Minified: var b,c,d,e,f,g, h,i
-       var div, style, a, pixelPositionVal, boxSizingReliableVal,
-               reliableHiddenOffsetsVal, reliableMarginRightVal;
-
-       // Setup
-       div = document.createElement( "div" );
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-       a = div.getElementsByTagName( "a" )[ 0 ];
-       style = a && a.style;
-
-       // Finish early in limited (non-browser) environments
-       if ( !style ) {
-               return;
-       }
-
-       style.cssText = "float:left;opacity:.5";
-
-       // Support: IE<9
-       // Make sure that element opacity exists (as opposed to filter)
-       support.opacity = style.opacity === "0.5";
-
-       // Verify style float existence
-       // (IE uses styleFloat instead of cssFloat)
-       support.cssFloat = !!style.cssFloat;
-
-       div.style.backgroundClip = "content-box";
-       div.cloneNode( true ).style.backgroundClip = "";
-       support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-       // Support: Firefox<29, Android 2.3
-       // Vendor-prefix box-sizing
-       support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
-               style.WebkitBoxSizing === "";
-
-       jQuery.extend(support, {
-               reliableHiddenOffsets: function() {
-                       if ( reliableHiddenOffsetsVal == null ) {
-                               computeStyleTests();
-                       }
-                       return reliableHiddenOffsetsVal;
-               },
-
-               boxSizingReliable: function() {
-                       if ( boxSizingReliableVal == null ) {
-                               computeStyleTests();
-                       }
-                       return boxSizingReliableVal;
-               },
-
-               pixelPosition: function() {
-                       if ( pixelPositionVal == null ) {
-                               computeStyleTests();
-                       }
-                       return pixelPositionVal;
-               },
-
-               // Support: Android 2.3
-               reliableMarginRight: function() {
-                       if ( reliableMarginRightVal == null ) {
-                               computeStyleTests();
-                       }
-                       return reliableMarginRightVal;
-               }
-       });
-
-       function computeStyleTests() {
-               // Minified: var b,c,d,j
-               var div, body, container, contents;
-
-               body = document.getElementsByTagName( "body" )[ 0 ];
-               if ( !body || !body.style ) {
-                       // Test fired too early or in an unsupported environment, exit.
-                       return;
-               }
-
-               // Setup
-               div = document.createElement( "div" );
-               container = document.createElement( "div" );
-               container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-               body.appendChild( container ).appendChild( div );
-
-               div.style.cssText =
-                       // Support: Firefox<29, Android 2.3
-                       // Vendor-prefix box-sizing
-                       "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
-                       "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
-                       "border:1px;padding:1px;width:4px;position:absolute";
-
-               // Support: IE<9
-               // Assume reasonable values in the absence of getComputedStyle
-               pixelPositionVal = boxSizingReliableVal = false;
-               reliableMarginRightVal = true;
-
-               // Check for getComputedStyle so that this code is not run in IE<9.
-               if ( window.getComputedStyle ) {
-                       pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
-                       boxSizingReliableVal =
-                               ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
-                       // Support: Android 2.3
-                       // Div with explicit width and no margin-right incorrectly
-                       // gets computed margin-right based on width of container (#3333)
-                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                       contents = div.appendChild( document.createElement( "div" ) );
-
-                       // Reset CSS: box-sizing; display; margin; border; padding
-                       contents.style.cssText = div.style.cssText =
-                               // Support: Firefox<29, Android 2.3
-                               // Vendor-prefix box-sizing
-                               "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-                               "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
-                       contents.style.marginRight = contents.style.width = "0";
-                       div.style.width = "1px";
-
-                       reliableMarginRightVal =
-                               !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
-
-                       div.removeChild( contents );
-               }
-
-               // Support: IE8
-               // Check if table cells still have offsetWidth/Height when they are set
-               // to display:none and there are still other visible table cells in a
-               // table row; if so, offsetWidth/Height are not reliable for use when
-               // determining if an element has been hidden directly using
-               // display:none (it is still safe to use offsets if a parent element is
-               // hidden; don safety goggles and see bug #4512 for more information).
-               div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
-               contents = div.getElementsByTagName( "td" );
-               contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
-               reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-               if ( reliableHiddenOffsetsVal ) {
-                       contents[ 0 ].style.display = "";
-                       contents[ 1 ].style.display = "none";
-                       reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-               }
-
-               body.removeChild( container );
-       }
-
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.swap = function( elem, options, callback, args ) {
-       var ret, name,
-               old = {};
-
-       // Remember the old values, and insert the new ones
-       for ( name in options ) {
-               old[ name ] = elem.style[ name ];
-               elem.style[ name ] = options[ name ];
-       }
-
-       ret = callback.apply( elem, args || [] );
-
-       // Revert the old values
-       for ( name in options ) {
-               elem.style[ name ] = old[ name ];
-       }
-
-       return ret;
-};
-
-
-var
-               ralpha = /alpha\([^)]*\)/i,
-       ropacity = /opacity\s*=\s*([^)]*)/,
-
-       // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
-       // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
-       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-       rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
-       rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
-       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-       cssNormalTransform = {
-               letterSpacing: "0",
-               fontWeight: "400"
-       },
-
-       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
-       // shortcut for names that are not vendor prefixed
-       if ( name in style ) {
-               return name;
-       }
-
-       // check for vendor prefixed names
-       var capName = name.charAt(0).toUpperCase() + name.slice(1),
-               origName = name,
-               i = cssPrefixes.length;
-
-       while ( i-- ) {
-               name = cssPrefixes[ i ] + capName;
-               if ( name in style ) {
-                       return name;
-               }
-       }
-
-       return origName;
-}
-
-function showHide( elements, show ) {
-       var display, elem, hidden,
-               values = [],
-               index = 0,
-               length = elements.length;
-
-       for ( ; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-
-               values[ index ] = jQuery._data( elem, "olddisplay" );
-               display = elem.style.display;
-               if ( show ) {
-                       // Reset the inline display of this element to learn if it is
-                       // being hidden by cascaded rules or not
-                       if ( !values[ index ] && display === "none" ) {
-                               elem.style.display = "";
-                       }
-
-                       // Set elements which have been overridden with display: none
-                       // in a stylesheet to whatever the default browser style is
-                       // for such an element
-                       if ( elem.style.display === "" && isHidden( elem ) ) {
-                               values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-                       }
-               } else {
-                       hidden = isHidden( elem );
-
-                       if ( display && display !== "none" || !hidden ) {
-                               jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
-                       }
-               }
-       }
-
-       // Set the display of most of the elements in a second loop
-       // to avoid the constant reflow
-       for ( index = 0; index < length; index++ ) {
-               elem = elements[ index ];
-               if ( !elem.style ) {
-                       continue;
-               }
-               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
-                       elem.style.display = show ? values[ index ] || "" : "none";
-               }
-       }
-
-       return elements;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-       var matches = rnumsplit.exec( value );
-       return matches ?
-               // Guard against undefined "subtract", e.g., when used as in cssHooks
-               Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
-               value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
-       var i = extra === ( isBorderBox ? "border" : "content" ) ?
-               // If we already have the right measurement, avoid augmentation
-               4 :
-               // Otherwise initialize for horizontal or vertical properties
-               name === "width" ? 1 : 0,
-
-               val = 0;
-
-       for ( ; i < 4; i += 2 ) {
-               // both box models exclude margin, so add it if we want it
-               if ( extra === "margin" ) {
-                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
-               }
-
-               if ( isBorderBox ) {
-                       // border-box includes padding, so remove it if we want content
-                       if ( extra === "content" ) {
-                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-                       }
-
-                       // at this point, extra isn't border nor margin, so remove border
-                       if ( extra !== "margin" ) {
-                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-                       }
-               } else {
-                       // at this point, extra isn't content, so add padding
-                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
-                       // at this point, extra isn't content nor padding, so add border
-                       if ( extra !== "padding" ) {
-                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-                       }
-               }
-       }
-
-       return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
-       // Start with offset property, which is equivalent to the border-box value
-       var valueIsBorderBox = true,
-               val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-               styles = getStyles( elem ),
-               isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-       // some non-html elements return undefined for offsetWidth, so check for null/undefined
-       // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
-       // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
-       if ( val <= 0 || val == null ) {
-               // Fall back to computed then uncomputed css if necessary
-               val = curCSS( elem, name, styles );
-               if ( val < 0 || val == null ) {
-                       val = elem.style[ name ];
-               }
-
-               // Computed unit is not pixels. Stop here and return.
-               if ( rnumnonpx.test(val) ) {
-                       return val;
-               }
-
-               // we need the check for style in case a browser which returns unreliable values
-               // for getComputedStyle silently falls back to the reliable elem.style
-               valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
-
-               // Normalize "", auto, and prepare for extra
-               val = parseFloat( val ) || 0;
-       }
-
-       // use the active box-sizing model to add/subtract irrelevant styles
-       return ( val +
-               augmentWidthOrHeight(
-                       elem,
-                       name,
-                       extra || ( isBorderBox ? "border" : "content" ),
-                       valueIsBorderBox,
-                       styles
-               )
-       ) + "px";
-}
-
-jQuery.extend({
-       // Add in style property hooks for overriding the default
-       // behavior of getting and setting a style property
-       cssHooks: {
-               opacity: {
-                       get: function( elem, computed ) {
-                               if ( computed ) {
-                                       // We should always get a number back from opacity
-                                       var ret = curCSS( elem, "opacity" );
-                                       return ret === "" ? "1" : ret;
-                               }
-                       }
-               }
-       },
-
-       // Don't automatically add "px" to these possibly-unitless properties
-       cssNumber: {
-               "columnCount": true,
-               "fillOpacity": true,
-               "flexGrow": true,
-               "flexShrink": true,
-               "fontWeight": true,
-               "lineHeight": true,
-               "opacity": true,
-               "order": true,
-               "orphans": true,
-               "widows": true,
-               "zIndex": true,
-               "zoom": true
-       },
-
-       // Add in properties whose names you wish to fix before
-       // setting or getting the value
-       cssProps: {
-               // normalize float css property
-               "float": support.cssFloat ? "cssFloat" : "styleFloat"
-       },
-
-       // Get and set the style property on a DOM Node
-       style: function( elem, name, value, extra ) {
-               // Don't set styles on text and comment nodes
-               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-                       return;
-               }
-
-               // Make sure that we're working with the right name
-               var ret, type, hooks,
-                       origName = jQuery.camelCase( name ),
-                       style = elem.style;
-
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-               // Check if we're setting a value
-               if ( value !== undefined ) {
-                       type = typeof value;
-
-                       // convert relative number strings (+= or -=) to relative numbers. #7345
-                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-                               value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
-                               // Fixes bug #9237
-                               type = "number";
-                       }
-
-                       // Make sure that null and NaN values aren't set. See: #7116
-                       if ( value == null || value !== value ) {
-                               return;
-                       }
-
-                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
-                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-                               value += "px";
-                       }
-
-                       // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
-                       // but it would mean to define eight (for every problematic property) identical functions
-                       if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
-                               style[ name ] = "inherit";
-                       }
-
-                       // If a hook was provided, use that value, otherwise just set the specified value
-                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
-                               // Support: IE
-                               // Swallow errors from 'invalid' CSS values (#5509)
-                               try {
-                                       style[ name ] = value;
-                               } catch(e) {}
-                       }
-
-               } else {
-                       // If a hook was provided get the non-computed value from there
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-                               return ret;
-                       }
-
-                       // Otherwise just get the value from the style object
-                       return style[ name ];
-               }
-       },
-
-       css: function( elem, name, extra, styles ) {
-               var num, val, hooks,
-                       origName = jQuery.camelCase( name );
-
-               // Make sure that we're working with the right name
-               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
-               // gets hook for the prefixed version
-               // followed by the unprefixed version
-               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-               // If a hook was provided get the computed value from there
-               if ( hooks && "get" in hooks ) {
-                       val = hooks.get( elem, true, extra );
-               }
-
-               // Otherwise, if a way to get the computed value exists, use that
-               if ( val === undefined ) {
-                       val = curCSS( elem, name, styles );
-               }
-
-               //convert "normal" to computed value
-               if ( val === "normal" && name in cssNormalTransform ) {
-                       val = cssNormalTransform[ name ];
-               }
-
-               // Return, converting to number if forced or a qualifier was provided and val looks numeric
-               if ( extra === "" || extra ) {
-                       num = parseFloat( val );
-                       return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
-               }
-               return val;
-       }
-});
-
-jQuery.each([ "height", "width" ], function( i, name ) {
-       jQuery.cssHooks[ name ] = {
-               get: function( elem, computed, extra ) {
-                       if ( computed ) {
-                               // certain elements can have dimension info if we invisibly show them
-                               // however, it must have a current display style that would benefit from this
-                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
-                                       jQuery.swap( elem, cssShow, function() {
-                                               return getWidthOrHeight( elem, name, extra );
-                                       }) :
-                                       getWidthOrHeight( elem, name, extra );
-                       }
-               },
-
-               set: function( elem, value, extra ) {
-                       var styles = extra && getStyles( elem );
-                       return setPositiveNumber( elem, value, extra ?
-                               augmentWidthOrHeight(
-                                       elem,
-                                       name,
-                                       extra,
-                                       support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
-                                       styles
-                               ) : 0
-                       );
-               }
-       };
-});
-
-if ( !support.opacity ) {
-       jQuery.cssHooks.opacity = {
-               get: function( elem, computed ) {
-                       // IE uses filters for opacity
-                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
-                               computed ? "1" : "";
-               },
-
-               set: function( elem, value ) {
-                       var style = elem.style,
-                               currentStyle = elem.currentStyle,
-                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
-
-                       // IE has trouble with opacity if it does not have layout
-                       // Force it by setting the zoom level
-                       style.zoom = 1;
-
-                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       // if value === "", then remove inline opacity #12685
-                       if ( ( value >= 1 || value === "" ) &&
-                                       jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
-                                       style.removeAttribute ) {
-
-                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
-                               // style.removeAttribute is IE Only, but so apparently is this code path...
-                               style.removeAttribute( "filter" );
-
-                               // if there is no filter style applied in a css rule or unset inline opacity, we are done
-                               if ( value === "" || currentStyle && !currentStyle.filter ) {
-                                       return;
-                               }
-                       }
-
-                       // otherwise, set new filter values
-                       style.filter = ralpha.test( filter ) ?
-                               filter.replace( ralpha, opacity ) :
-                               filter + " " + opacity;
-               }
-       };
-}
-
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
-       function( elem, computed ) {
-               if ( computed ) {
-                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                       // Work around by temporarily setting element display to inline-block
-                       return jQuery.swap( elem, { "display": "inline-block" },
-                               curCSS, [ elem, "marginRight" ] );
-               }
-       }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each({
-       margin: "",
-       padding: "",
-       border: "Width"
-}, function( prefix, suffix ) {
-       jQuery.cssHooks[ prefix + suffix ] = {
-               expand: function( value ) {
-                       var i = 0,
-                               expanded = {},
-
-                               // assumes a single number if not a string
-                               parts = typeof value === "string" ? value.split(" ") : [ value ];
-
-                       for ( ; i < 4; i++ ) {
-                               expanded[ prefix + cssExpand[ i ] + suffix ] =
-                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-                       }
-
-                       return expanded;
-               }
-       };
-
-       if ( !rmargin.test( prefix ) ) {
-               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
-       }
-});
-
-jQuery.fn.extend({
-       css: function( name, value ) {
-               return access( this, function( elem, name, value ) {
-                       var styles, len,
-                               map = {},
-                               i = 0;
-
-                       if ( jQuery.isArray( name ) ) {
-                               styles = getStyles( elem );
-                               len = name.length;
-
-                               for ( ; i < len; i++ ) {
-                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
-                               }
-
-                               return map;
-                       }
-
-                       return value !== undefined ?
-                               jQuery.style( elem, name, value ) :
-                               jQuery.css( elem, name );
-               }, name, value, arguments.length > 1 );
-       },
-       show: function() {
-               return showHide( this, true );
-       },
-       hide: function() {
-               return showHide( this );
-       },
-       toggle: function( state ) {
-               if ( typeof state === "boolean" ) {
-                       return state ? this.show() : this.hide();
-               }
-
-               return this.each(function() {
-                       if ( isHidden( this ) ) {
-                               jQuery( this ).show();
-                       } else {
-                               jQuery( this ).hide();
-                       }
-               });
-       }
-});
-
-
-function Tween( elem, options, prop, end, easing ) {
-       return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
-       constructor: Tween,
-       init: function( elem, options, prop, end, easing, unit ) {
-               this.elem = elem;
-               this.prop = prop;
-               this.easing = easing || "swing";
-               this.options = options;
-               this.start = this.now = this.cur();
-               this.end = end;
-               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-       },
-       cur: function() {
-               var hooks = Tween.propHooks[ this.prop ];
-
-               return hooks && hooks.get ?
-                       hooks.get( this ) :
-                       Tween.propHooks._default.get( this );
-       },
-       run: function( percent ) {
-               var eased,
-                       hooks = Tween.propHooks[ this.prop ];
-
-               if ( this.options.duration ) {
-                       this.pos = eased = jQuery.easing[ this.easing ](
-                               percent, this.options.duration * percent, 0, 1, this.options.duration
-                       );
-               } else {
-                       this.pos = eased = percent;
-               }
-               this.now = ( this.end - this.start ) * eased + this.start;
-
-               if ( this.options.step ) {
-                       this.options.step.call( this.elem, this.now, this );
-               }
-
-               if ( hooks && hooks.set ) {
-                       hooks.set( this );
-               } else {
-                       Tween.propHooks._default.set( this );
-               }
-               return this;
-       }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
-       _default: {
-               get: function( tween ) {
-                       var result;
-
-                       if ( tween.elem[ tween.prop ] != null &&
-                               (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
-                               return tween.elem[ tween.prop ];
-                       }
-
-                       // passing an empty string as a 3rd parameter to .css will automatically
-                       // attempt a parseFloat and fallback to a string if the parse fails
-                       // so, simple values such as "10px" are parsed to Float.
-                       // complex values such as "rotate(1rad)" are returned as is.
-                       result = jQuery.css( tween.elem, tween.prop, "" );
-                       // Empty strings, null, undefined and "auto" are converted to 0.
-                       return !result || result === "auto" ? 0 : result;
-               },
-               set: function( tween ) {
-                       // use step hook for back compat - use cssHook if its there - use .style if its
-                       // available and use plain properties where available
-                       if ( jQuery.fx.step[ tween.prop ] ) {
-                               jQuery.fx.step[ tween.prop ]( tween );
-                       } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
-                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
-                       } else {
-                               tween.elem[ tween.prop ] = tween.now;
-                       }
-               }
-       }
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-       set: function( tween ) {
-               if ( tween.elem.nodeType && tween.elem.parentNode ) {
-                       tween.elem[ tween.prop ] = tween.now;
-               }
-       }
-};
-
-jQuery.easing = {
-       linear: function( p ) {
-               return p;
-       },
-       swing: function( p ) {
-               return 0.5 - Math.cos( p * Math.PI ) / 2;
-       }
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
-       fxNow, timerId,
-       rfxtypes = /^(?:toggle|show|hide)$/,
-       rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
-       rrun = /queueHooks$/,
-       animationPrefilters = [ defaultPrefilter ],
-       tweeners = {
-               "*": [ function( prop, value ) {
-                       var tween = this.createTween( prop, value ),
-                               target = tween.cur(),
-                               parts = rfxnum.exec( value ),
-                               unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
-                               // Starting value computation is required for potential unit mismatches
-                               start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
-                                       rfxnum.exec( jQuery.css( tween.elem, prop ) ),
-                               scale = 1,
-                               maxIterations = 20;
-
-                       if ( start && start[ 3 ] !== unit ) {
-                               // Trust units reported by jQuery.css
-                               unit = unit || start[ 3 ];
-
-                               // Make sure we update the tween properties later on
-                               parts = parts || [];
-
-                               // Iteratively approximate from a nonzero starting point
-                               start = +target || 1;
-
-                               do {
-                                       // If previous iteration zeroed out, double until we get *something*
-                                       // Use a string for doubling factor so we don't accidentally see scale as unchanged below
-                                       scale = scale || ".5";
-
-                                       // Adjust and apply
-                                       start = start / scale;
-                                       jQuery.style( tween.elem, prop, start + unit );
-
-                               // Update scale, tolerating zero or NaN from tween.cur()
-                               // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
-                               } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
-                       }
-
-                       // Update tween properties
-                       if ( parts ) {
-                               start = tween.start = +start || +target || 0;
-                               tween.unit = unit;
-                               // If a +=/-= token was provided, we're doing a relative animation
-                               tween.end = parts[ 1 ] ?
-                                       start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
-                                       +parts[ 2 ];
-                       }
-
-                       return tween;
-               } ]
-       };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-       setTimeout(function() {
-               fxNow = undefined;
-       });
-       return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
-       var which,
-               attrs = { height: type },
-               i = 0;
-
-       // if we include width, step value is 1 to do all cssExpand values,
-       // if we don't include width, step value is 2 to skip over Left and Right
-       includeWidth = includeWidth ? 1 : 0;
-       for ( ; i < 4 ; i += 2 - includeWidth ) {
-               which = cssExpand[ i ];
-               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
-       }
-
-       if ( includeWidth ) {
-               attrs.opacity = attrs.width = type;
-       }
-
-       return attrs;
-}
-
-function createTween( value, prop, animation ) {
-       var tween,
-               collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
-               index = 0,
-               length = collection.length;
-       for ( ; index < length; index++ ) {
-               if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
-                       // we're done with this property
-                       return tween;
-               }
-       }
-}
-
-function defaultPrefilter( elem, props, opts ) {
-       /* jshint validthis: true */
-       var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
-               anim = this,
-               orig = {},
-               style = elem.style,
-               hidden = elem.nodeType && isHidden( elem ),
-               dataShow = jQuery._data( elem, "fxshow" );
-
-       // handle queue: false promises
-       if ( !opts.queue ) {
-               hooks = jQuery._queueHooks( elem, "fx" );
-               if ( hooks.unqueued == null ) {
-                       hooks.unqueued = 0;
-                       oldfire = hooks.empty.fire;
-                       hooks.empty.fire = function() {
-                               if ( !hooks.unqueued ) {
-                                       oldfire();
-                               }
-                       };
-               }
-               hooks.unqueued++;
-
-               anim.always(function() {
-                       // doing this makes sure that the complete handler will be called
-                       // before this completes
-                       anim.always(function() {
-                               hooks.unqueued--;
-                               if ( !jQuery.queue( elem, "fx" ).length ) {
-                                       hooks.empty.fire();
-                               }
-                       });
-               });
-       }
-
-       // height/width overflow pass
-       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
-               // Make sure that nothing sneaks out
-               // Record all 3 overflow attributes because IE does not
-               // change the overflow attribute when overflowX and
-               // overflowY are set to the same value
-               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-               // Set display property to inline-block for height/width
-               // animations on inline elements that are having width/height animated
-               display = jQuery.css( elem, "display" );
-
-               // Test default display if display is currently "none"
-               checkDisplay = display === "none" ?
-                       jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
-               if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
-                       // inline-level elements accept inline-block;
-                       // block-level elements need to be inline with layout
-                       if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
-                               style.display = "inline-block";
-                       } else {
-                               style.zoom = 1;
-                       }
-               }
-       }
-
-       if ( opts.overflow ) {
-               style.overflow = "hidden";
-               if ( !support.shrinkWrapBlocks() ) {
-                       anim.always(function() {
-                               style.overflow = opts.overflow[ 0 ];
-                               style.overflowX = opts.overflow[ 1 ];
-                               style.overflowY = opts.overflow[ 2 ];
-                       });
-               }
-       }
-
-       // show/hide pass
-       for ( prop in props ) {
-               value = props[ prop ];
-               if ( rfxtypes.exec( value ) ) {
-                       delete props[ prop ];
-                       toggle = toggle || value === "toggle";
-                       if ( value === ( hidden ? "hide" : "show" ) ) {
-
-                               // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
-                               if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
-                                       hidden = true;
-                               } else {
-                                       continue;
-                               }
-                       }
-                       orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
-               // Any non-fx value stops us from restoring the original display value
-               } else {
-                       display = undefined;
-               }
-       }
-
-       if ( !jQuery.isEmptyObject( orig ) ) {
-               if ( dataShow ) {
-                       if ( "hidden" in dataShow ) {
-                               hidden = dataShow.hidden;
-                       }
-               } else {
-                       dataShow = jQuery._data( elem, "fxshow", {} );
-               }
-
-               // store state if its toggle - enables .stop().toggle() to "reverse"
-               if ( toggle ) {
-                       dataShow.hidden = !hidden;
-               }
-               if ( hidden ) {
-                       jQuery( elem ).show();
-               } else {
-                       anim.done(function() {
-                               jQuery( elem ).hide();
-                       });
-               }
-               anim.done(function() {
-                       var prop;
-                       jQuery._removeData( elem, "fxshow" );
-                       for ( prop in orig ) {
-                               jQuery.style( elem, prop, orig[ prop ] );
-                       }
-               });
-               for ( prop in orig ) {
-                       tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
-                       if ( !( prop in dataShow ) ) {
-                               dataShow[ prop ] = tween.start;
-                               if ( hidden ) {
-                                       tween.end = tween.start;
-                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
-                               }
-                       }
-               }
-
-       // If this is a noop like .hide().hide(), restore an overwritten display value
-       } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
-               style.display = display;
-       }
-}
-
-function propFilter( props, specialEasing ) {
-       var index, name, easing, value, hooks;
-
-       // camelCase, specialEasing and expand cssHook pass
-       for ( index in props ) {
-               name = jQuery.camelCase( index );
-               easing = specialEasing[ name ];
-               value = props[ index ];
-               if ( jQuery.isArray( value ) ) {
-                       easing = value[ 1 ];
-                       value = props[ index ] = value[ 0 ];
-               }
-
-               if ( index !== name ) {
-                       props[ name ] = value;
-                       delete props[ index ];
-               }
-
-               hooks = jQuery.cssHooks[ name ];
-               if ( hooks && "expand" in hooks ) {
-                       value = hooks.expand( value );
-                       delete props[ name ];
-
-                       // not quite $.extend, this wont overwrite keys already present.
-                       // also - reusing 'index' from above because we have the correct "name"
-                       for ( index in value ) {
-                               if ( !( index in props ) ) {
-                                       props[ index ] = value[ index ];
-                                       specialEasing[ index ] = easing;
-                               }
-                       }
-               } else {
-                       specialEasing[ name ] = easing;
-               }
-       }
-}
-
-function Animation( elem, properties, options ) {
-       var result,
-               stopped,
-               index = 0,
-               length = animationPrefilters.length,
-               deferred = jQuery.Deferred().always( function() {
-                       // don't match elem in the :animated selector
-                       delete tick.elem;
-               }),
-               tick = function() {
-                       if ( stopped ) {
-                               return false;
-                       }
-                       var currentTime = fxNow || createFxNow(),
-                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-                               // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
-                               temp = remaining / animation.duration || 0,
-                               percent = 1 - temp,
-                               index = 0,
-                               length = animation.tweens.length;
-
-                       for ( ; index < length ; index++ ) {
-                               animation.tweens[ index ].run( percent );
-                       }
-
-                       deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
-                       if ( percent < 1 && length ) {
-                               return remaining;
-                       } else {
-                               deferred.resolveWith( elem, [ animation ] );
-                               return false;
-                       }
-               },
-               animation = deferred.promise({
-                       elem: elem,
-                       props: jQuery.extend( {}, properties ),
-                       opts: jQuery.extend( true, { specialEasing: {} }, options ),
-                       originalProperties: properties,
-                       originalOptions: options,
-                       startTime: fxNow || createFxNow(),
-                       duration: options.duration,
-                       tweens: [],
-                       createTween: function( prop, end ) {
-                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
-                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
-                               animation.tweens.push( tween );
-                               return tween;
-                       },
-                       stop: function( gotoEnd ) {
-                               var index = 0,
-                                       // if we are going to the end, we want to run all the tweens
-                                       // otherwise we skip this part
-                                       length = gotoEnd ? animation.tweens.length : 0;
-                               if ( stopped ) {
-                                       return this;
-                               }
-                               stopped = true;
-                               for ( ; index < length ; index++ ) {
-                                       animation.tweens[ index ].run( 1 );
-                               }
-
-                               // resolve when we played the last frame
-                               // otherwise, reject
-                               if ( gotoEnd ) {
-                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
-                               } else {
-                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
-                               }
-                               return this;
-                       }
-               }),
-               props = animation.props;
-
-       propFilter( props, animation.opts.specialEasing );
-
-       for ( ; index < length ; index++ ) {
-               result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
-               if ( result ) {
-                       return result;
-               }
-       }
-
-       jQuery.map( props, createTween, animation );
-
-       if ( jQuery.isFunction( animation.opts.start ) ) {
-               animation.opts.start.call( elem, animation );
-       }
-
-       jQuery.fx.timer(
-               jQuery.extend( tick, {
-                       elem: elem,
-                       anim: animation,
-                       queue: animation.opts.queue
-               })
-       );
-
-       // attach callbacks from options
-       return animation.progress( animation.opts.progress )
-               .done( animation.opts.done, animation.opts.complete )
-               .fail( animation.opts.fail )
-               .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-       tweener: function( props, callback ) {
-               if ( jQuery.isFunction( props ) ) {
-                       callback = props;
-                       props = [ "*" ];
-               } else {
-                       props = props.split(" ");
-               }
-
-               var prop,
-                       index = 0,
-                       length = props.length;
-
-               for ( ; index < length ; index++ ) {
-                       prop = props[ index ];
-                       tweeners[ prop ] = tweeners[ prop ] || [];
-                       tweeners[ prop ].unshift( callback );
-               }
-       },
-
-       prefilter: function( callback, prepend ) {
-               if ( prepend ) {
-                       animationPrefilters.unshift( callback );
-               } else {
-                       animationPrefilters.push( callback );
-               }
-       }
-});
-
-jQuery.speed = function( speed, easing, fn ) {
-       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-               complete: fn || !fn && easing ||
-                       jQuery.isFunction( speed ) && speed,
-               duration: speed,
-               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-       };
-
-       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-       // normalize opt.queue - true/undefined/null -> "fx"
-       if ( opt.queue == null || opt.queue === true ) {
-               opt.queue = "fx";
-       }
-
-       // Queueing
-       opt.old = opt.complete;
-
-       opt.complete = function() {
-               if ( jQuery.isFunction( opt.old ) ) {
-                       opt.old.call( this );
-               }
-
-               if ( opt.queue ) {
-                       jQuery.dequeue( this, opt.queue );
-               }
-       };
-
-       return opt;
-};
-
-jQuery.fn.extend({
-       fadeTo: function( speed, to, easing, callback ) {
-
-               // show any hidden elements after setting opacity to 0
-               return this.filter( isHidden ).css( "opacity", 0 ).show()
-
-                       // animate to the value specified
-                       .end().animate({ opacity: to }, speed, easing, callback );
-       },
-       animate: function( prop, speed, easing, callback ) {
-               var empty = jQuery.isEmptyObject( prop ),
-                       optall = jQuery.speed( speed, easing, callback ),
-                       doAnimation = function() {
-                               // Operate on a copy of prop so per-property easing won't be lost
-                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
-                               // Empty animations, or finishing resolves immediately
-                               if ( empty || jQuery._data( this, "finish" ) ) {
-                                       anim.stop( true );
-                               }
-                       };
-                       doAnimation.finish = doAnimation;
-
-               return empty || optall.queue === false ?
-                       this.each( doAnimation ) :
-                       this.queue( optall.queue, doAnimation );
-       },
-       stop: function( type, clearQueue, gotoEnd ) {
-               var stopQueue = function( hooks ) {
-                       var stop = hooks.stop;
-                       delete hooks.stop;
-                       stop( gotoEnd );
-               };
-
-               if ( typeof type !== "string" ) {
-                       gotoEnd = clearQueue;
-                       clearQueue = type;
-                       type = undefined;
-               }
-               if ( clearQueue && type !== false ) {
-                       this.queue( type || "fx", [] );
-               }
-
-               return this.each(function() {
-                       var dequeue = true,
-                               index = type != null && type + "queueHooks",
-                               timers = jQuery.timers,
-                               data = jQuery._data( this );
-
-                       if ( index ) {
-                               if ( data[ index ] && data[ index ].stop ) {
-                                       stopQueue( data[ index ] );
-                               }
-                       } else {
-                               for ( index in data ) {
-                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
-                                               stopQueue( data[ index ] );
-                                       }
-                               }
-                       }
-
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-                                       timers[ index ].anim.stop( gotoEnd );
-                                       dequeue = false;
-                                       timers.splice( index, 1 );
-                               }
-                       }
-
-                       // start the next in the queue if the last step wasn't forced
-                       // timers currently will call their complete callbacks, which will dequeue
-                       // but only if they were gotoEnd
-                       if ( dequeue || !gotoEnd ) {
-                               jQuery.dequeue( this, type );
-                       }
-               });
-       },
-       finish: function( type ) {
-               if ( type !== false ) {
-                       type = type || "fx";
-               }
-               return this.each(function() {
-                       var index,
-                               data = jQuery._data( this ),
-                               queue = data[ type + "queue" ],
-                               hooks = data[ type + "queueHooks" ],
-                               timers = jQuery.timers,
-                               length = queue ? queue.length : 0;
-
-                       // enable finishing flag on private data
-                       data.finish = true;
-
-                       // empty the queue first
-                       jQuery.queue( this, type, [] );
-
-                       if ( hooks && hooks.stop ) {
-                               hooks.stop.call( this, true );
-                       }
-
-                       // look for any active animations, and finish them
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
-                                       timers[ index ].anim.stop( true );
-                                       timers.splice( index, 1 );
-                               }
-                       }
-
-                       // look for any animations in the old queue and finish them
-                       for ( index = 0; index < length; index++ ) {
-                               if ( queue[ index ] && queue[ index ].finish ) {
-                                       queue[ index ].finish.call( this );
-                               }
-                       }
-
-                       // turn off finishing flag
-                       delete data.finish;
-               });
-       }
-});
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
-       var cssFn = jQuery.fn[ name ];
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return speed == null || typeof speed === "boolean" ?
-                       cssFn.apply( this, arguments ) :
-                       this.animate( genFx( name, true ), speed, easing, callback );
-       };
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
-       slideDown: genFx("show"),
-       slideUp: genFx("hide"),
-       slideToggle: genFx("toggle"),
-       fadeIn: { opacity: "show" },
-       fadeOut: { opacity: "hide" },
-       fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return this.animate( props, speed, easing, callback );
-       };
-});
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
-       var timer,
-               timers = jQuery.timers,
-               i = 0;
-
-       fxNow = jQuery.now();
-
-       for ( ; i < timers.length; i++ ) {
-               timer = timers[ i ];
-               // Checks the timer has not already been removed
-               if ( !timer() && timers[ i ] === timer ) {
-                       timers.splice( i--, 1 );
-               }
-       }
-
-       if ( !timers.length ) {
-               jQuery.fx.stop();
-       }
-       fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
-       jQuery.timers.push( timer );
-       if ( timer() ) {
-               jQuery.fx.start();
-       } else {
-               jQuery.timers.pop();
-       }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
-       if ( !timerId ) {
-               timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
-       }
-};
-
-jQuery.fx.stop = function() {
-       clearInterval( timerId );
-       timerId = null;
-};
-
-jQuery.fx.speeds = {
-       slow: 600,
-       fast: 200,
-       // Default speed
-       _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
-       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-       type = type || "fx";
-
-       return this.queue( type, function( next, hooks ) {
-               var timeout = setTimeout( next, time );
-               hooks.stop = function() {
-                       clearTimeout( timeout );
-               };
-       });
-};
-
-
-(function() {
-       // Minified: var a,b,c,d,e
-       var input, div, select, a, opt;
-
-       // Setup
-       div = document.createElement( "div" );
-       div.setAttribute( "className", "t" );
-       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-       a = div.getElementsByTagName("a")[ 0 ];
-
-       // First batch of tests.
-       select = document.createElement("select");
-       opt = select.appendChild( document.createElement("option") );
-       input = div.getElementsByTagName("input")[ 0 ];
-
-       a.style.cssText = "top:1px";
-
-       // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-       support.getSetAttribute = div.className !== "t";
-
-       // Get the style information from getAttribute
-       // (IE uses .cssText instead)
-       support.style = /top/.test( a.getAttribute("style") );
-
-       // Make sure that URLs aren't manipulated
-       // (IE normalizes it by default)
-       support.hrefNormalized = a.getAttribute("href") === "/a";
-
-       // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
-       support.checkOn = !!input.value;
-
-       // Make sure that a selected-by-default option has a working selected property.
-       // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-       support.optSelected = opt.selected;
-
-       // Tests for enctype support on a form (#6743)
-       support.enctype = !!document.createElement("form").enctype;
-
-       // Make sure that the options inside disabled selects aren't marked as disabled
-       // (WebKit marks them as disabled)
-       select.disabled = true;
-       support.optDisabled = !opt.disabled;
-
-       // Support: IE8 only
-       // Check if we can trust getAttribute("value")
-       input = document.createElement( "input" );
-       input.setAttribute( "value", "" );
-       support.input = input.getAttribute( "value" ) === "";
-
-       // Check if an input maintains its value after becoming a radio
-       input.value = "t";
-       input.setAttribute( "type", "radio" );
-       support.radioValue = input.value === "t";
-})();
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
-       val: function( value ) {
-               var hooks, ret, isFunction,
-                       elem = this[0];
-
-               if ( !arguments.length ) {
-                       if ( elem ) {
-                               hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-                                       return ret;
-                               }
-
-                               ret = elem.value;
-
-                               return typeof ret === "string" ?
-                                       // handle most common string cases
-                                       ret.replace(rreturn, "") :
-                                       // handle cases where value is null/undef or number
-                                       ret == null ? "" : ret;
-                       }
-
-                       return;
-               }
-
-               isFunction = jQuery.isFunction( value );
-
-               return this.each(function( i ) {
-                       var val;
-
-                       if ( this.nodeType !== 1 ) {
-                               return;
-                       }
-
-                       if ( isFunction ) {
-                               val = value.call( this, i, jQuery( this ).val() );
-                       } else {
-                               val = value;
-                       }
-
-                       // Treat null/undefined as ""; convert numbers to string
-                       if ( val == null ) {
-                               val = "";
-                       } else if ( typeof val === "number" ) {
-                               val += "";
-                       } else if ( jQuery.isArray( val ) ) {
-                               val = jQuery.map( val, function( value ) {
-                                       return value == null ? "" : value + "";
-                               });
-                       }
-
-                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-                       // If set returns undefined, fall back to normal setting
-                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-                               this.value = val;
-                       }
-               });
-       }
-});
-
-jQuery.extend({
-       valHooks: {
-               option: {
-                       get: function( elem ) {
-                               var val = jQuery.find.attr( elem, "value" );
-                               return val != null ?
-                                       val :
-                                       // Support: IE10-11+
-                                       // option.text throws exceptions (#14686, #14858)
-                                       jQuery.trim( jQuery.text( elem ) );
-                       }
-               },
-               select: {
-                       get: function( elem ) {
-                               var value, option,
-                                       options = elem.options,
-                                       index = elem.selectedIndex,
-                                       one = elem.type === "select-one" || index < 0,
-                                       values = one ? null : [],
-                                       max = one ? index + 1 : options.length,
-                                       i = index < 0 ?
-                                               max :
-                                               one ? index : 0;
-
-                               // Loop through all the selected options
-                               for ( ; i < max; i++ ) {
-                                       option = options[ i ];
-
-                                       // oldIE doesn't update selected after form reset (#2551)
-                                       if ( ( option.selected || i === index ) &&
-                                                       // Don't return options that are disabled or in a disabled optgroup
-                                                       ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
-                                                       ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
-                                               // Get the specific value for the option
-                                               value = jQuery( option ).val();
-
-                                               // We don't need an array for one selects
-                                               if ( one ) {
-                                                       return value;
-                                               }
-
-                                               // Multi-Selects return an array
-                                               values.push( value );
-                                       }
-                               }
-
-                               return values;
-                       },
-
-                       set: function( elem, value ) {
-                               var optionSet, option,
-                                       options = elem.options,
-                                       values = jQuery.makeArray( value ),
-                                       i = options.length;
-
-                               while ( i-- ) {
-                                       option = options[ i ];
-
-                                       if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
-                                               // Support: IE6
-                                               // When new option element is added to select box we need to
-                                               // force reflow of newly added node in order to workaround delay
-                                               // of initialization properties
-                                               try {
-                                                       option.selected = optionSet = true;
-
-                                               } catch ( _ ) {
-
-                                                       // Will be executed only in IE6
-                                                       option.scrollHeight;
-                                               }
-
-                                       } else {
-                                               option.selected = false;
-                                       }
-                               }
-
-                               // Force browsers to behave consistently when non-matching value is set
-                               if ( !optionSet ) {
-                                       elem.selectedIndex = -1;
-                               }
-
-                               return options;
-                       }
-               }
-       }
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
-       jQuery.valHooks[ this ] = {
-               set: function( elem, value ) {
-                       if ( jQuery.isArray( value ) ) {
-                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-                       }
-               }
-       };
-       if ( !support.checkOn ) {
-               jQuery.valHooks[ this ].get = function( elem ) {
-                       // Support: Webkit
-                       // "" is returned instead of "on" if a value isn't specified
-                       return elem.getAttribute("value") === null ? "on" : elem.value;
-               };
-       }
-});
-
-
-
-
-var nodeHook, boolHook,
-       attrHandle = jQuery.expr.attrHandle,
-       ruseDefault = /^(?:checked|selected)$/i,
-       getSetAttribute = support.getSetAttribute,
-       getSetInput = support.input;
-
-jQuery.fn.extend({
-       attr: function( name, value ) {
-               return access( this, jQuery.attr, name, value, arguments.length > 1 );
-       },
-
-       removeAttr: function( name ) {
-               return this.each(function() {
-                       jQuery.removeAttr( this, name );
-               });
-       }
-});
-
-jQuery.extend({
-       attr: function( elem, name, value ) {
-               var hooks, ret,
-                       nType = elem.nodeType;
-
-               // don't get/set attributes on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
-
-               // Fallback to prop when attributes are not supported
-               if ( typeof elem.getAttribute === strundefined ) {
-                       return jQuery.prop( elem, name, value );
-               }
-
-               // All attributes are lowercase
-               // Grab necessary hook if one is defined
-               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-                       name = name.toLowerCase();
-                       hooks = jQuery.attrHooks[ name ] ||
-                               ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
-               }
-
-               if ( value !== undefined ) {
-
-                       if ( value === null ) {
-                               jQuery.removeAttr( elem, name );
-
-                       } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                               return ret;
-
-                       } else {
-                               elem.setAttribute( name, value + "" );
-                               return value;
-                       }
-
-               } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-                       return ret;
-
-               } else {
-                       ret = jQuery.find.attr( elem, name );
-
-                       // Non-existent attributes return null, we normalize to undefined
-                       return ret == null ?
-                               undefined :
-                               ret;
-               }
-       },
-
-       removeAttr: function( elem, value ) {
-               var name, propName,
-                       i = 0,
-                       attrNames = value && value.match( rnotwhite );
-
-               if ( attrNames && elem.nodeType === 1 ) {
-                       while ( (name = attrNames[i++]) ) {
-                               propName = jQuery.propFix[ name ] || name;
-
-                               // Boolean attributes get special treatment (#10870)
-                               if ( jQuery.expr.match.bool.test( name ) ) {
-                                       // Set corresponding property to false
-                                       if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-                                               elem[ propName ] = false;
-                                       // Support: IE<9
-                                       // Also clear defaultChecked/defaultSelected (if appropriate)
-                                       } else {
-                                               elem[ jQuery.camelCase( "default-" + name ) ] =
-                                                       elem[ propName ] = false;
-                                       }
-
-                               // See #9699 for explanation of this approach (setting first, then removal)
-                               } else {
-                                       jQuery.attr( elem, name, "" );
-                               }
-
-                               elem.removeAttribute( getSetAttribute ? name : propName );
-                       }
-               }
-       },
-
-       attrHooks: {
-               type: {
-                       set: function( elem, value ) {
-                               if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-                                       // Setting the type on a radio button after the value resets the value in IE6-9
-                                       // Reset value to default in case type is set after value during creation
-                                       var val = elem.value;
-                                       elem.setAttribute( "type", value );
-                                       if ( val ) {
-                                               elem.value = val;
-                                       }
-                                       return value;
-                               }
-                       }
-               }
-       }
-});
-
-// Hook for boolean attributes
-boolHook = {
-       set: function( elem, value, name ) {
-               if ( value === false ) {
-                       // Remove boolean attributes when set to false
-                       jQuery.removeAttr( elem, name );
-               } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-                       // IE<8 needs the *property* name
-                       elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
-               // Use defaultChecked and defaultSelected for oldIE
-               } else {
-                       elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
-               }
-
-               return name;
-       }
-};
-
-// Retrieve booleans specially
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-
-       var getter = attrHandle[ name ] || jQuery.find.attr;
-
-       attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
-               function( elem, name, isXML ) {
-                       var ret, handle;
-                       if ( !isXML ) {
-                               // Avoid an infinite loop by temporarily removing this function from the getter
-                               handle = attrHandle[ name ];
-                               attrHandle[ name ] = ret;
-                               ret = getter( elem, name, isXML ) != null ?
-                                       name.toLowerCase() :
-                                       null;
-                               attrHandle[ name ] = handle;
-                       }
-                       return ret;
-               } :
-               function( elem, name, isXML ) {
-                       if ( !isXML ) {
-                               return elem[ jQuery.camelCase( "default-" + name ) ] ?
-                                       name.toLowerCase() :
-                                       null;
-                       }
-               };
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
-       jQuery.attrHooks.value = {
-               set: function( elem, value, name ) {
-                       if ( jQuery.nodeName( elem, "input" ) ) {
-                               // Does not return so that setAttribute is also used
-                               elem.defaultValue = value;
-                       } else {
-                               // Use nodeHook if defined (#1954); otherwise setAttribute is fine
-                               return nodeHook && nodeHook.set( elem, value, name );
-                       }
-               }
-       };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-       // Use this for any attribute in IE6/7
-       // This fixes almost every IE6/7 issue
-       nodeHook = {
-               set: function( elem, value, name ) {
-                       // Set the existing or create a new attribute node
-                       var ret = elem.getAttributeNode( name );
-                       if ( !ret ) {
-                               elem.setAttributeNode(
-                                       (ret = elem.ownerDocument.createAttribute( name ))
-                               );
-                       }
-
-                       ret.value = value += "";
-
-                       // Break association with cloned elements by also using setAttribute (#9646)
-                       if ( name === "value" || value === elem.getAttribute( name ) ) {
-                               return value;
-                       }
-               }
-       };
-
-       // Some attributes are constructed with empty-string values when not defined
-       attrHandle.id = attrHandle.name = attrHandle.coords =
-               function( elem, name, isXML ) {
-                       var ret;
-                       if ( !isXML ) {
-                               return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
-                                       ret.value :
-                                       null;
-                       }
-               };
-
-       // Fixing value retrieval on a button requires this module
-       jQuery.valHooks.button = {
-               get: function( elem, name ) {
-                       var ret = elem.getAttributeNode( name );
-                       if ( ret && ret.specified ) {
-                               return ret.value;
-                       }
-               },
-               set: nodeHook.set
-       };
-
-       // Set contenteditable to false on removals(#10429)
-       // Setting to empty string throws an error as an invalid value
-       jQuery.attrHooks.contenteditable = {
-               set: function( elem, value, name ) {
-                       nodeHook.set( elem, value === "" ? false : value, name );
-               }
-       };
-
-       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
-       // This is for removals
-       jQuery.each([ "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = {
-                       set: function( elem, value ) {
-                               if ( value === "" ) {
-                                       elem.setAttribute( name, "auto" );
-                                       return value;
-                               }
-                       }
-               };
-       });
-}
-
-if ( !support.style ) {
-       jQuery.attrHooks.style = {
-               get: function( elem ) {
-                       // Return undefined in the case of empty string
-                       // Note: IE uppercases css property names, but if we were to .toLowerCase()
-                       // .cssText, that would destroy case senstitivity in URL's, like in "background"
-                       return elem.style.cssText || undefined;
-               },
-               set: function( elem, value ) {
-                       return ( elem.style.cssText = value + "" );
-               }
-       };
-}
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button|object)$/i,
-       rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend({
-       prop: function( name, value ) {
-               return access( this, jQuery.prop, name, value, arguments.length > 1 );
-       },
-
-       removeProp: function( name ) {
-               name = jQuery.propFix[ name ] || name;
-               return this.each(function() {
-                       // try/catch handles cases where IE balks (such as removing a property on window)
-                       try {
-                               this[ name ] = undefined;
-                               delete this[ name ];
-                       } catch( e ) {}
-               });
-       }
-});
-
-jQuery.extend({
-       propFix: {
-               "for": "htmlFor",
-               "class": "className"
-       },
-
-       prop: function( elem, name, value ) {
-               var ret, hooks, notxml,
-                       nType = elem.nodeType;
-
-               // don't get/set properties on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return;
-               }
-
-               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-               if ( notxml ) {
-                       // Fix name and attach hooks
-                       name = jQuery.propFix[ name ] || name;
-                       hooks = jQuery.propHooks[ name ];
-               }
-
-               if ( value !== undefined ) {
-                       return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
-                               ret :
-                               ( elem[ name ] = value );
-
-               } else {
-                       return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
-                               ret :
-                               elem[ name ];
-               }
-       },
-
-       propHooks: {
-               tabIndex: {
-                       get: function( elem ) {
-                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-                               // Use proper attribute retrieval(#12072)
-                               var tabindex = jQuery.find.attr( elem, "tabindex" );
-
-                               return tabindex ?
-                                       parseInt( tabindex, 10 ) :
-                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                               0 :
-                                               -1;
-                       }
-               }
-       }
-});
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !support.hrefNormalized ) {
-       // href/src property should get the full normalized URL (#10299/#12915)
-       jQuery.each([ "href", "src" ], function( i, name ) {
-               jQuery.propHooks[ name ] = {
-                       get: function( elem ) {
-                               return elem.getAttribute( name, 4 );
-                       }
-               };
-       });
-}
-
-// Support: Safari, IE9+
-// mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !support.optSelected ) {
-       jQuery.propHooks.selected = {
-               get: function( elem ) {
-                       var parent = elem.parentNode;
-
-                       if ( parent ) {
-                               parent.selectedIndex;
-
-                               // Make sure that it also works with optgroups, see #5701
-                               if ( parent.parentNode ) {
-                                       parent.parentNode.selectedIndex;
-                               }
-                       }
-                       return null;
-               }
-       };
-}
-
-jQuery.each([
-       "tabIndex",
-       "readOnly",
-       "maxLength",
-       "cellSpacing",
-       "cellPadding",
-       "rowSpan",
-       "colSpan",
-       "useMap",
-       "frameBorder",
-       "contentEditable"
-], function() {
-       jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-// IE6/7 call enctype encoding
-if ( !support.enctype ) {
-       jQuery.propFix.enctype = "encoding";
-}
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-jQuery.fn.extend({
-       addClass: function( value ) {
-               var classes, elem, cur, clazz, j, finalValue,
-                       i = 0,
-                       len = this.length,
-                       proceed = typeof value === "string" && value;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).addClass( value.call( this, j, this.className ) );
-                       });
-               }
-
-               if ( proceed ) {
-                       // The disjunction here is for better compressibility (see removeClass)
-                       classes = ( value || "" ).match( rnotwhite ) || [];
-
-                       for ( ; i < len; i++ ) {
-                               elem = this[ i ];
-                               cur = elem.nodeType === 1 && ( elem.className ?
-                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                       " "
-                               );
-
-                               if ( cur ) {
-                                       j = 0;
-                                       while ( (clazz = classes[j++]) ) {
-                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
-                                                       cur += clazz + " ";
-                                               }
-                                       }
-
-                                       // only assign if different to avoid unneeded rendering.
-                                       finalValue = jQuery.trim( cur );
-                                       if ( elem.className !== finalValue ) {
-                                               elem.className = finalValue;
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       removeClass: function( value ) {
-               var classes, elem, cur, clazz, j, finalValue,
-                       i = 0,
-                       len = this.length,
-                       proceed = arguments.length === 0 || typeof value === "string" && value;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).removeClass( value.call( this, j, this.className ) );
-                       });
-               }
-               if ( proceed ) {
-                       classes = ( value || "" ).match( rnotwhite ) || [];
-
-                       for ( ; i < len; i++ ) {
-                               elem = this[ i ];
-                               // This expression is here for better compressibility (see addClass)
-                               cur = elem.nodeType === 1 && ( elem.className ?
-                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                       ""
-                               );
-
-                               if ( cur ) {
-                                       j = 0;
-                                       while ( (clazz = classes[j++]) ) {
-                                               // Remove *all* instances
-                                               while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
-                                                       cur = cur.replace( " " + clazz + " ", " " );
-                                               }
-                                       }
-
-                                       // only assign if different to avoid unneeded rendering.
-                                       finalValue = value ? jQuery.trim( cur ) : "";
-                                       if ( elem.className !== finalValue ) {
-                                               elem.className = finalValue;
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       toggleClass: function( value, stateVal ) {
-               var type = typeof value;
-
-               if ( typeof stateVal === "boolean" && type === "string" ) {
-                       return stateVal ? this.addClass( value ) : this.removeClass( value );
-               }
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( i ) {
-                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-                       });
-               }
-
-               return this.each(function() {
-                       if ( type === "string" ) {
-                               // toggle individual class names
-                               var className,
-                                       i = 0,
-                                       self = jQuery( this ),
-                                       classNames = value.match( rnotwhite ) || [];
-
-                               while ( (className = classNames[ i++ ]) ) {
-                                       // check each className given, space separated list
-                                       if ( self.hasClass( className ) ) {
-                                               self.removeClass( className );
-                                       } else {
-                                               self.addClass( className );
-                                       }
-                               }
-
-                       // Toggle whole class name
-                       } else if ( type === strundefined || type === "boolean" ) {
-                               if ( this.className ) {
-                                       // store className if set
-                                       jQuery._data( this, "__className__", this.className );
-                               }
-
-                               // If the element has a class name or if we're passed "false",
-                               // then remove the whole classname (if there was one, the above saved it).
-                               // Otherwise bring back whatever was previously saved (if anything),
-                               // falling back to the empty string if nothing was stored.
-                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-                       }
-               });
-       },
-
-       hasClass: function( selector ) {
-               var className = " " + selector + " ",
-                       i = 0,
-                       l = this.length;
-               for ( ; i < l; i++ ) {
-                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
-                               return true;
-                       }
-               }
-
-               return false;
-       }
-});
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-       // Handle event binding
-       jQuery.fn[ name ] = function( data, fn ) {
-               return arguments.length > 0 ?
-                       this.on( name, null, data, fn ) :
-                       this.trigger( name );
-       };
-});
-
-jQuery.fn.extend({
-       hover: function( fnOver, fnOut ) {
-               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-       },
-
-       bind: function( types, data, fn ) {
-               return this.on( types, null, data, fn );
-       },
-       unbind: function( types, fn ) {
-               return this.off( types, null, fn );
-       },
-
-       delegate: function( selector, types, data, fn ) {
-               return this.on( types, selector, data, fn );
-       },
-       undelegate: function( selector, types, fn ) {
-               // ( namespace ) or ( selector, types [, fn] )
-               return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
-       }
-});
-
-
-var nonce = jQuery.now();
-
-var rquery = (/\?/);
-
-
-
-var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
-
-jQuery.parseJSON = function( data ) {
-       // Attempt to parse using the native JSON parser first
-       if ( window.JSON && window.JSON.parse ) {
-               // Support: Android 2.3
-               // Workaround failure to string-cast null input
-               return window.JSON.parse( data + "" );
-       }
-
-       var requireNonComma,
-               depth = null,
-               str = jQuery.trim( data + "" );
-
-       // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
-       // after removing valid tokens
-       return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
-
-               // Force termination if we see a misplaced comma
-               if ( requireNonComma && comma ) {
-                       depth = 0;
-               }
-
-               // Perform no more replacements after returning to outermost depth
-               if ( depth === 0 ) {
-                       return token;
-               }
-
-               // Commas must not follow "[", "{", or ","
-               requireNonComma = open || comma;
-
-               // Determine new depth
-               // array/object open ("[" or "{"): depth += true - false (increment)
-               // array/object close ("]" or "}"): depth += false - true (decrement)
-               // other cases ("," or primitive): depth += true - true (numeric cast)
-               depth += !close - !open;
-
-               // Remove this token
-               return "";
-       }) ) ?
-               ( Function( "return " + str ) )() :
-               jQuery.error( "Invalid JSON: " + data );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
-       var xml, tmp;
-       if ( !data || typeof data !== "string" ) {
-               return null;
-       }
-       try {
-               if ( window.DOMParser ) { // Standard
-                       tmp = new DOMParser();
-                       xml = tmp.parseFromString( data, "text/xml" );
-               } else { // IE
-                       xml = new ActiveXObject( "Microsoft.XMLDOM" );
-                       xml.async = "false";
-                       xml.loadXML( data );
-               }
-       } catch( e ) {
-               xml = undefined;
-       }
-       if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-               jQuery.error( "Invalid XML: " + data );
-       }
-       return xml;
-};
-
-
-var
-       // Document location
-       ajaxLocParts,
-       ajaxLocation,
-
-       rhash = /#.*$/,
-       rts = /([?&])_=[^&]*/,
-       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-       // #7653, #8125, #8152: local protocol detection
-       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
-       rnoContent = /^(?:GET|HEAD)$/,
-       rprotocol = /^\/\//,
-       rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
-       /* Prefilters
-        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-        * 2) These are called:
-        *    - BEFORE asking for a transport
-        *    - AFTER param serialization (s.data is a string if s.processData is true)
-        * 3) key is the dataType
-        * 4) the catchall symbol "*" can be used
-        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-        */
-       prefilters = {},
-
-       /* Transports bindings
-        * 1) key is the dataType
-        * 2) the catchall symbol "*" can be used
-        * 3) selection will start with transport dataType and THEN go to "*" if needed
-        */
-       transports = {},
-
-       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-       allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-       ajaxLocation = location.href;
-} catch( e ) {
-       // Use the href attribute of an A element
-       // since IE will modify it given document.location
-       ajaxLocation = document.createElement( "a" );
-       ajaxLocation.href = "";
-       ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-       // dataTypeExpression is optional and defaults to "*"
-       return function( dataTypeExpression, func ) {
-
-               if ( typeof dataTypeExpression !== "string" ) {
-                       func = dataTypeExpression;
-                       dataTypeExpression = "*";
-               }
-
-               var dataType,
-                       i = 0,
-                       dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
-               if ( jQuery.isFunction( func ) ) {
-                       // For each dataType in the dataTypeExpression
-                       while ( (dataType = dataTypes[i++]) ) {
-                               // Prepend if requested
-                               if ( dataType.charAt( 0 ) === "+" ) {
-                                       dataType = dataType.slice( 1 ) || "*";
-                                       (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
-                               // Otherwise append
-                               } else {
-                                       (structure[ dataType ] = structure[ dataType ] || []).push( func );
-                               }
-                       }
-               }
-       };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
-       var inspected = {},
-               seekingTransport = ( structure === transports );
-
-       function inspect( dataType ) {
-               var selected;
-               inspected[ dataType ] = true;
-               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
-                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
-                       if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-                               options.dataTypes.unshift( dataTypeOrTransport );
-                               inspect( dataTypeOrTransport );
-                               return false;
-                       } else if ( seekingTransport ) {
-                               return !( selected = dataTypeOrTransport );
-                       }
-               });
-               return selected;
-       }
-
-       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-       var deep, key,
-               flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
-       for ( key in src ) {
-               if ( src[ key ] !== undefined ) {
-                       ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
-               }
-       }
-       if ( deep ) {
-               jQuery.extend( true, target, deep );
-       }
-
-       return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-       var firstDataType, ct, finalDataType, type,
-               contents = s.contents,
-               dataTypes = s.dataTypes;
-
-       // Remove auto dataType and get content-type in the process
-       while ( dataTypes[ 0 ] === "*" ) {
-               dataTypes.shift();
-               if ( ct === undefined ) {
-                       ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
-               }
-       }
-
-       // Check if we're dealing with a known content-type
-       if ( ct ) {
-               for ( type in contents ) {
-                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
-                               dataTypes.unshift( type );
-                               break;
-                       }
-               }
-       }
-
-       // Check to see if we have a response for the expected dataType
-       if ( dataTypes[ 0 ] in responses ) {
-               finalDataType = dataTypes[ 0 ];
-       } else {
-               // Try convertible dataTypes
-               for ( type in responses ) {
-                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-                               finalDataType = type;
-                               break;
-                       }
-                       if ( !firstDataType ) {
-                               firstDataType = type;
-                       }
-               }
-               // Or just use first one
-               finalDataType = finalDataType || firstDataType;
-       }
-
-       // If we found a dataType
-       // We add the dataType to the list if needed
-       // and return the corresponding response
-       if ( finalDataType ) {
-               if ( finalDataType !== dataTypes[ 0 ] ) {
-                       dataTypes.unshift( finalDataType );
-               }
-               return responses[ finalDataType ];
-       }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
-       var conv2, current, conv, tmp, prev,
-               converters = {},
-               // Work with a copy of dataTypes in case we need to modify it for conversion
-               dataTypes = s.dataTypes.slice();
-
-       // Create converters map with lowercased keys
-       if ( dataTypes[ 1 ] ) {
-               for ( conv in s.converters ) {
-                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
-               }
-       }
-
-       current = dataTypes.shift();
-
-       // Convert to each sequential dataType
-       while ( current ) {
-
-               if ( s.responseFields[ current ] ) {
-                       jqXHR[ s.responseFields[ current ] ] = response;
-               }
-
-               // Apply the dataFilter if provided
-               if ( !prev && isSuccess && s.dataFilter ) {
-                       response = s.dataFilter( response, s.dataType );
-               }
-
-               prev = current;
-               current = dataTypes.shift();
-
-               if ( current ) {
-
-                       // There's only work to do if current dataType is non-auto
-                       if ( current === "*" ) {
-
-                               current = prev;
-
-                       // Convert response if prev dataType is non-auto and differs from current
-                       } else if ( prev !== "*" && prev !== current ) {
-
-                               // Seek a direct converter
-                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
-                               // If none found, seek a pair
-                               if ( !conv ) {
-                                       for ( conv2 in converters ) {
-
-                                               // If conv2 outputs current
-                                               tmp = conv2.split( " " );
-                                               if ( tmp[ 1 ] === current ) {
-
-                                                       // If prev can be converted to accepted input
-                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
-                                                               converters[ "* " + tmp[ 0 ] ];
-                                                       if ( conv ) {
-                                                               // Condense equivalence converters
-                                                               if ( conv === true ) {
-                                                                       conv = converters[ conv2 ];
-
-                                                               // Otherwise, insert the intermediate dataType
-                                                               } else if ( converters[ conv2 ] !== true ) {
-                                                                       current = tmp[ 0 ];
-                                                                       dataTypes.unshift( tmp[ 1 ] );
-                                                               }
-                                                               break;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               // Apply converter (if not an equivalence)
-                               if ( conv !== true ) {
-
-                                       // Unless errors are allowed to bubble, catch and return them
-                                       if ( conv && s[ "throws" ] ) {
-                                               response = conv( response );
-                                       } else {
-                                               try {
-                                                       response = conv( response );
-                                               } catch ( e ) {
-                                                       return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       return { state: "success", data: response };
-}
-
-jQuery.extend({
-
-       // Counter for holding the number of active queries
-       active: 0,
-
-       // Last-Modified header cache for next request
-       lastModified: {},
-       etag: {},
-
-       ajaxSettings: {
-               url: ajaxLocation,
-               type: "GET",
-               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-               global: true,
-               processData: true,
-               async: true,
-               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-               /*
-               timeout: 0,
-               data: null,
-               dataType: null,
-               username: null,
-               password: null,
-               cache: null,
-               throws: false,
-               traditional: false,
-               headers: {},
-               */
-
-               accepts: {
-                       "*": allTypes,
-                       text: "text/plain",
-                       html: "text/html",
-                       xml: "application/xml, text/xml",
-                       json: "application/json, text/javascript"
-               },
-
-               contents: {
-                       xml: /xml/,
-                       html: /html/,
-                       json: /json/
-               },
-
-               responseFields: {
-                       xml: "responseXML",
-                       text: "responseText",
-                       json: "responseJSON"
-               },
-
-               // Data converters
-               // Keys separate source (or catchall "*") and destination types with a single space
-               converters: {
-
-                       // Convert anything to text
-                       "* text": String,
-
-                       // Text to html (true = no transformation)
-                       "text html": true,
-
-                       // Evaluate text as a json expression
-                       "text json": jQuery.parseJSON,
-
-                       // Parse text as xml
-                       "text xml": jQuery.parseXML
-               },
-
-               // For options that shouldn't be deep extended:
-               // you can add your own custom options here if
-               // and when you create one that shouldn't be
-               // deep extended (see ajaxExtend)
-               flatOptions: {
-                       url: true,
-                       context: true
-               }
-       },
-
-       // Creates a full fledged settings object into target
-       // with both ajaxSettings and settings fields.
-       // If target is omitted, writes into ajaxSettings.
-       ajaxSetup: function( target, settings ) {
-               return settings ?
-
-                       // Building a settings object
-                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
-                       // Extending ajaxSettings
-                       ajaxExtend( jQuery.ajaxSettings, target );
-       },
-
-       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-       ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-       // Main method
-       ajax: function( url, options ) {
-
-               // If url is an object, simulate pre-1.5 signature
-               if ( typeof url === "object" ) {
-                       options = url;
-                       url = undefined;
-               }
-
-               // Force options to be an object
-               options = options || {};
-
-               var // Cross-domain detection vars
-                       parts,
-                       // Loop variable
-                       i,
-                       // URL without anti-cache param
-                       cacheURL,
-                       // Response headers as string
-                       responseHeadersString,
-                       // timeout handle
-                       timeoutTimer,
-
-                       // To know if global events are to be dispatched
-                       fireGlobals,
-
-                       transport,
-                       // Response headers
-                       responseHeaders,
-                       // Create the final options object
-                       s = jQuery.ajaxSetup( {}, options ),
-                       // Callbacks context
-                       callbackContext = s.context || s,
-                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
-                       globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
-                               jQuery( callbackContext ) :
-                               jQuery.event,
-                       // Deferreds
-                       deferred = jQuery.Deferred(),
-                       completeDeferred = jQuery.Callbacks("once memory"),
-                       // Status-dependent callbacks
-                       statusCode = s.statusCode || {},
-                       // Headers (they are sent all at once)
-                       requestHeaders = {},
-                       requestHeadersNames = {},
-                       // The jqXHR state
-                       state = 0,
-                       // Default abort message
-                       strAbort = "canceled",
-                       // Fake xhr
-                       jqXHR = {
-                               readyState: 0,
-
-                               // Builds headers hashtable if needed
-                               getResponseHeader: function( key ) {
-                                       var match;
-                                       if ( state === 2 ) {
-                                               if ( !responseHeaders ) {
-                                                       responseHeaders = {};
-                                                       while ( (match = rheaders.exec( responseHeadersString )) ) {
-                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-                                                       }
-                                               }
-                                               match = responseHeaders[ key.toLowerCase() ];
-                                       }
-                                       return match == null ? null : match;
-                               },
-
-                               // Raw string
-                               getAllResponseHeaders: function() {
-                                       return state === 2 ? responseHeadersString : null;
-                               },
-
-                               // Caches the header
-                               setRequestHeader: function( name, value ) {
-                                       var lname = name.toLowerCase();
-                                       if ( !state ) {
-                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-                                               requestHeaders[ name ] = value;
-                                       }
-                                       return this;
-                               },
-
-                               // Overrides response content-type header
-                               overrideMimeType: function( type ) {
-                                       if ( !state ) {
-                                               s.mimeType = type;
-                                       }
-                                       return this;
-                               },
-
-                               // Status-dependent callbacks
-                               statusCode: function( map ) {
-                                       var code;
-                                       if ( map ) {
-                                               if ( state < 2 ) {
-                                                       for ( code in map ) {
-                                                               // Lazy-add the new callback in a way that preserves old ones
-                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
-                                                       }
-                                               } else {
-                                                       // Execute the appropriate callbacks
-                                                       jqXHR.always( map[ jqXHR.status ] );
-                                               }
-                                       }
-                                       return this;
-                               },
-
-                               // Cancel the request
-                               abort: function( statusText ) {
-                                       var finalText = statusText || strAbort;
-                                       if ( transport ) {
-                                               transport.abort( finalText );
-                                       }
-                                       done( 0, finalText );
-                                       return this;
-                               }
-                       };
-
-               // Attach deferreds
-               deferred.promise( jqXHR ).complete = completeDeferred.add;
-               jqXHR.success = jqXHR.done;
-               jqXHR.error = jqXHR.fail;
-
-               // Remove hash character (#7531: and string promotion)
-               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-               // Handle falsy url in the settings object (#10093: consistency with old signature)
-               // We also use the url parameter if available
-               s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-               // Alias method option to type as per ticket #12004
-               s.type = options.method || options.type || s.method || s.type;
-
-               // Extract dataTypes list
-               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
-               // A cross-domain request is in order when we have a protocol:host:port mismatch
-               if ( s.crossDomain == null ) {
-                       parts = rurl.exec( s.url.toLowerCase() );
-                       s.crossDomain = !!( parts &&
-                               ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
-                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
-                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
-                       );
-               }
-
-               // Convert data if not already a string
-               if ( s.data && s.processData && typeof s.data !== "string" ) {
-                       s.data = jQuery.param( s.data, s.traditional );
-               }
-
-               // Apply prefilters
-               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-               // If request was aborted inside a prefilter, stop there
-               if ( state === 2 ) {
-                       return jqXHR;
-               }
-
-               // We can fire global events as of now if asked to
-               // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
-               fireGlobals = jQuery.event && s.global;
-
-               // Watch for a new set of requests
-               if ( fireGlobals && jQuery.active++ === 0 ) {
-                       jQuery.event.trigger("ajaxStart");
-               }
-
-               // Uppercase the type
-               s.type = s.type.toUpperCase();
-
-               // Determine if request has content
-               s.hasContent = !rnoContent.test( s.type );
-
-               // Save the URL in case we're toying with the If-Modified-Since
-               // and/or If-None-Match header later on
-               cacheURL = s.url;
-
-               // More options handling for requests with no content
-               if ( !s.hasContent ) {
-
-                       // If data is available, append data to url
-                       if ( s.data ) {
-                               cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
-                               // #9682: remove data so that it's not used in an eventual retry
-                               delete s.data;
-                       }
-
-                       // Add anti-cache in url if needed
-                       if ( s.cache === false ) {
-                               s.url = rts.test( cacheURL ) ?
-
-                                       // If there is already a '_' parameter, set its value
-                                       cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
-                                       // Otherwise add one to the end
-                                       cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
-                       }
-               }
-
-               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-               if ( s.ifModified ) {
-                       if ( jQuery.lastModified[ cacheURL ] ) {
-                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
-                       }
-                       if ( jQuery.etag[ cacheURL ] ) {
-                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
-                       }
-               }
-
-               // Set the correct header, if data is being sent
-               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
-               }
-
-               // Set the Accepts header for the server, depending on the dataType
-               jqXHR.setRequestHeader(
-                       "Accept",
-                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-                               s.accepts[ "*" ]
-               );
-
-               // Check for headers option
-               for ( i in s.headers ) {
-                       jqXHR.setRequestHeader( i, s.headers[ i ] );
-               }
-
-               // Allow custom headers/mimetypes and early abort
-               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-                       // Abort if not done already and return
-                       return jqXHR.abort();
-               }
-
-               // aborting is no longer a cancellation
-               strAbort = "abort";
-
-               // Install callbacks on deferreds
-               for ( i in { success: 1, error: 1, complete: 1 } ) {
-                       jqXHR[ i ]( s[ i ] );
-               }
-
-               // Get transport
-               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-               // If no transport, we auto-abort
-               if ( !transport ) {
-                       done( -1, "No Transport" );
-               } else {
-                       jqXHR.readyState = 1;
-
-                       // Send global event
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-                       }
-                       // Timeout
-                       if ( s.async && s.timeout > 0 ) {
-                               timeoutTimer = setTimeout(function() {
-                                       jqXHR.abort("timeout");
-                               }, s.timeout );
-                       }
-
-                       try {
-                               state = 1;
-                               transport.send( requestHeaders, done );
-                       } catch ( e ) {
-                               // Propagate exception as error if not done
-                               if ( state < 2 ) {
-                                       done( -1, e );
-                               // Simply rethrow otherwise
-                               } else {
-                                       throw e;
-                               }
-                       }
-               }
-
-               // Callback for when everything is done
-               function done( status, nativeStatusText, responses, headers ) {
-                       var isSuccess, success, error, response, modified,
-                               statusText = nativeStatusText;
-
-                       // Called once
-                       if ( state === 2 ) {
-                               return;
-                       }
-
-                       // State is "done" now
-                       state = 2;
-
-                       // Clear timeout if it exists
-                       if ( timeoutTimer ) {
-                               clearTimeout( timeoutTimer );
-                       }
-
-                       // Dereference transport for early garbage collection
-                       // (no matter how long the jqXHR object will be used)
-                       transport = undefined;
-
-                       // Cache response headers
-                       responseHeadersString = headers || "";
-
-                       // Set readyState
-                       jqXHR.readyState = status > 0 ? 4 : 0;
-
-                       // Determine if successful
-                       isSuccess = status >= 200 && status < 300 || status === 304;
-
-                       // Get response data
-                       if ( responses ) {
-                               response = ajaxHandleResponses( s, jqXHR, responses );
-                       }
-
-                       // Convert no matter what (that way responseXXX fields are always set)
-                       response = ajaxConvert( s, response, jqXHR, isSuccess );
-
-                       // If successful, handle type chaining
-                       if ( isSuccess ) {
-
-                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                               if ( s.ifModified ) {
-                                       modified = jqXHR.getResponseHeader("Last-Modified");
-                                       if ( modified ) {
-                                               jQuery.lastModified[ cacheURL ] = modified;
-                                       }
-                                       modified = jqXHR.getResponseHeader("etag");
-                                       if ( modified ) {
-                                               jQuery.etag[ cacheURL ] = modified;
-                                       }
-                               }
-
-                               // if no content
-                               if ( status === 204 || s.type === "HEAD" ) {
-                                       statusText = "nocontent";
-
-                               // if not modified
-                               } else if ( status === 304 ) {
-                                       statusText = "notmodified";
-
-                               // If we have data, let's convert it
-                               } else {
-                                       statusText = response.state;
-                                       success = response.data;
-                                       error = response.error;
-                                       isSuccess = !error;
-                               }
-                       } else {
-                               // We extract error from statusText
-                               // then normalize statusText and status for non-aborts
-                               error = statusText;
-                               if ( status || !statusText ) {
-                                       statusText = "error";
-                                       if ( status < 0 ) {
-                                               status = 0;
-                                       }
-                               }
-                       }
-
-                       // Set data for the fake xhr object
-                       jqXHR.status = status;
-                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
-                       // Success/Error
-                       if ( isSuccess ) {
-                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-                       } else {
-                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-                       }
-
-                       // Status-dependent callbacks
-                       jqXHR.statusCode( statusCode );
-                       statusCode = undefined;
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
-                                       [ jqXHR, s, isSuccess ? success : error ] );
-                       }
-
-                       // Complete
-                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-                               // Handle the global AJAX counter
-                               if ( !( --jQuery.active ) ) {
-                                       jQuery.event.trigger("ajaxStop");
-                               }
-                       }
-               }
-
-               return jqXHR;
-       },
-
-       getJSON: function( url, data, callback ) {
-               return jQuery.get( url, data, callback, "json" );
-       },
-
-       getScript: function( url, callback ) {
-               return jQuery.get( url, undefined, callback, "script" );
-       }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-       jQuery[ method ] = function( url, data, callback, type ) {
-               // shift arguments if data argument was omitted
-               if ( jQuery.isFunction( data ) ) {
-                       type = type || callback;
-                       callback = data;
-                       data = undefined;
-               }
-
-               return jQuery.ajax({
-                       url: url,
-                       type: method,
-                       dataType: type,
-                       data: data,
-                       success: callback
-               });
-       };
-});
-
-
-jQuery._evalUrl = function( url ) {
-       return jQuery.ajax({
-               url: url,
-               type: "GET",
-               dataType: "script",
-               async: false,
-               global: false,
-               "throws": true
-       });
-};
-
-
-jQuery.fn.extend({
-       wrapAll: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapAll( html.call(this, i) );
-                       });
-               }
-
-               if ( this[0] ) {
-                       // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-                       if ( this[0].parentNode ) {
-                               wrap.insertBefore( this[0] );
-                       }
-
-                       wrap.map(function() {
-                               var elem = this;
-
-                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-                                       elem = elem.firstChild;
-                               }
-
-                               return elem;
-                       }).append( this );
-               }
-
-               return this;
-       },
-
-       wrapInner: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapInner( html.call(this, i) );
-                       });
-               }
-
-               return this.each(function() {
-                       var self = jQuery( this ),
-                               contents = self.contents();
-
-                       if ( contents.length ) {
-                               contents.wrapAll( html );
-
-                       } else {
-                               self.append( html );
-                       }
-               });
-       },
-
-       wrap: function( html ) {
-               var isFunction = jQuery.isFunction( html );
-
-               return this.each(function(i) {
-                       jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-               });
-       },
-
-       unwrap: function() {
-               return this.parent().each(function() {
-                       if ( !jQuery.nodeName( this, "body" ) ) {
-                               jQuery( this ).replaceWith( this.childNodes );
-                       }
-               }).end();
-       }
-});
-
-
-jQuery.expr.filters.hidden = function( elem ) {
-       // Support: Opera <= 12.12
-       // Opera reports offsetWidths and offsetHeights less than zero on some elements
-       return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
-               (!support.reliableHiddenOffsets() &&
-                       ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-};
-
-jQuery.expr.filters.visible = function( elem ) {
-       return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
-       rbracket = /\[\]$/,
-       rCRLF = /\r?\n/g,
-       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
-       rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
-       var name;
-
-       if ( jQuery.isArray( obj ) ) {
-               // Serialize array item.
-               jQuery.each( obj, function( i, v ) {
-                       if ( traditional || rbracket.test( prefix ) ) {
-                               // Treat each array item as a scalar.
-                               add( prefix, v );
-
-                       } else {
-                               // Item is non-scalar (array or object), encode its numeric index.
-                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-                       }
-               });
-
-       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-               // Serialize object item.
-               for ( name in obj ) {
-                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-               }
-
-       } else {
-               // Serialize scalar item.
-               add( prefix, obj );
-       }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
-       var prefix,
-               s = [],
-               add = function( key, value ) {
-                       // If value is a function, invoke it and return its value
-                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
-                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-               };
-
-       // Set traditional to true for jQuery <= 1.3.2 behavior.
-       if ( traditional === undefined ) {
-               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
-       }
-
-       // If an array was passed in, assume that it is an array of form elements.
-       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-               // Serialize the form elements
-               jQuery.each( a, function() {
-                       add( this.name, this.value );
-               });
-
-       } else {
-               // If traditional, encode the "old" way (the way 1.3.2 or older
-               // did it), otherwise encode params recursively.
-               for ( prefix in a ) {
-                       buildParams( prefix, a[ prefix ], traditional, add );
-               }
-       }
-
-       // Return the resulting serialization
-       return s.join( "&" ).replace( r20, "+" );
-};
-
-jQuery.fn.extend({
-       serialize: function() {
-               return jQuery.param( this.serializeArray() );
-       },
-       serializeArray: function() {
-               return this.map(function() {
-                       // Can add propHook for "elements" to filter or add form elements
-                       var elements = jQuery.prop( this, "elements" );
-                       return elements ? jQuery.makeArray( elements ) : this;
-               })
-               .filter(function() {
-                       var type = this.type;
-                       // Use .is(":disabled") so that fieldset[disabled] works
-                       return this.name && !jQuery( this ).is( ":disabled" ) &&
-                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
-                               ( this.checked || !rcheckableType.test( type ) );
-               })
-               .map(function( i, elem ) {
-                       var val = jQuery( this ).val();
-
-                       return val == null ?
-                               null :
-                               jQuery.isArray( val ) ?
-                                       jQuery.map( val, function( val ) {
-                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                                       }) :
-                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-               }).get();
-       }
-});
-
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
-       // Support: IE6+
-       function() {
-
-               // XHR cannot access local files, always use ActiveX for that case
-               return !this.isLocal &&
-
-                       // Support: IE7-8
-                       // oldIE XHR does not support non-RFC2616 methods (#13240)
-                       // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
-                       // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
-                       // Although this check for six methods instead of eight
-                       // since IE also does not support "trace" and "connect"
-                       /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
-
-                       createStandardXHR() || createActiveXHR();
-       } :
-       // For all other browsers, use the standard XMLHttpRequest object
-       createStandardXHR;
-
-var xhrId = 0,
-       xhrCallbacks = {},
-       xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE<10
-// Open requests must be manually aborted on unload (#5280)
-// See https://support.microsoft.com/kb/2856746 for more info
-if ( window.attachEvent ) {
-       window.attachEvent( "onunload", function() {
-               for ( var key in xhrCallbacks ) {
-                       xhrCallbacks[ key ]( undefined, true );
-               }
-       });
-}
-
-// Determine support properties
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
-       jQuery.ajaxTransport(function( options ) {
-               // Cross domain only allowed if supported through XMLHttpRequest
-               if ( !options.crossDomain || support.cors ) {
-
-                       var callback;
-
-                       return {
-                               send: function( headers, complete ) {
-                                       var i,
-                                               xhr = options.xhr(),
-                                               id = ++xhrId;
-
-                                       // Open the socket
-                                       xhr.open( options.type, options.url, options.async, options.username, options.password );
-
-                                       // Apply custom fields if provided
-                                       if ( options.xhrFields ) {
-                                               for ( i in options.xhrFields ) {
-                                                       xhr[ i ] = options.xhrFields[ i ];
-                                               }
-                                       }
-
-                                       // Override mime type if needed
-                                       if ( options.mimeType && xhr.overrideMimeType ) {
-                                               xhr.overrideMimeType( options.mimeType );
-                                       }
-
-                                       // X-Requested-With header
-                                       // For cross-domain requests, seeing as conditions for a preflight are
-                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
-                                       // (it can always be set on a per-request basis or even using ajaxSetup)
-                                       // For same-domain requests, won't change header if already provided.
-                                       if ( !options.crossDomain && !headers["X-Requested-With"] ) {
-                                               headers["X-Requested-With"] = "XMLHttpRequest";
-                                       }
-
-                                       // Set headers
-                                       for ( i in headers ) {
-                                               // Support: IE<9
-                                               // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
-                                               // request header to a null-value.
-                                               //
-                                               // To keep consistent with other XHR implementations, cast the value
-                                               // to string and ignore `undefined`.
-                                               if ( headers[ i ] !== undefined ) {
-                                                       xhr.setRequestHeader( i, headers[ i ] + "" );
-                                               }
-                                       }
-
-                                       // Do send the request
-                                       // This may raise an exception which is actually
-                                       // handled in jQuery.ajax (so no try/catch here)
-                                       xhr.send( ( options.hasContent && options.data ) || null );
-
-                                       // Listener
-                                       callback = function( _, isAbort ) {
-                                               var status, statusText, responses;
-
-                                               // Was never called and is aborted or complete
-                                               if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-                                                       // Clean up
-                                                       delete xhrCallbacks[ id ];
-                                                       callback = undefined;
-                                                       xhr.onreadystatechange = jQuery.noop;
-
-                                                       // Abort manually if needed
-                                                       if ( isAbort ) {
-                                                               if ( xhr.readyState !== 4 ) {
-                                                                       xhr.abort();
-                                                               }
-                                                       } else {
-                                                               responses = {};
-                                                               status = xhr.status;
-
-                                                               // Support: IE<10
-                                                               // Accessing binary-data responseText throws an exception
-                                                               // (#11426)
-                                                               if ( typeof xhr.responseText === "string" ) {
-                                                                       responses.text = xhr.responseText;
-                                                               }
-
-                                                               // Firefox throws an exception when accessing
-                                                               // statusText for faulty cross-domain requests
-                                                               try {
-                                                                       statusText = xhr.statusText;
-                                                               } catch( e ) {
-                                                                       // We normalize with Webkit giving an empty statusText
-                                                                       statusText = "";
-                                                               }
-
-                                                               // Filter status for non standard behaviors
-
-                                                               // If the request is local and we have data: assume a success
-                                                               // (success with no data won't get notified, that's the best we
-                                                               // can do given current implementations)
-                                                               if ( !status && options.isLocal && !options.crossDomain ) {
-                                                                       status = responses.text ? 200 : 404;
-                                                               // IE - #1450: sometimes returns 1223 when it should be 204
-                                                               } else if ( status === 1223 ) {
-                                                                       status = 204;
-                                                               }
-                                                       }
-                                               }
-
-                                               // Call complete if needed
-                                               if ( responses ) {
-                                                       complete( status, statusText, responses, xhr.getAllResponseHeaders() );
-                                               }
-                                       };
-
-                                       if ( !options.async ) {
-                                               // if we're in sync mode we fire the callback
-                                               callback();
-                                       } else if ( xhr.readyState === 4 ) {
-                                               // (IE6 & IE7) if it's in cache and has been
-                                               // retrieved directly we need to fire the callback
-                                               setTimeout( callback );
-                                       } else {
-                                               // Add to the list of active xhr callbacks
-                                               xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
-                                       }
-                               },
-
-                               abort: function() {
-                                       if ( callback ) {
-                                               callback( undefined, true );
-                                       }
-                               }
-                       };
-               }
-       });
-}
-
-// Functions to create xhrs
-function createStandardXHR() {
-       try {
-               return new window.XMLHttpRequest();
-       } catch( e ) {}
-}
-
-function createActiveXHR() {
-       try {
-               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-       } catch( e ) {}
-}
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-       accepts: {
-               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-       },
-       contents: {
-               script: /(?:java|ecma)script/
-       },
-       converters: {
-               "text script": function( text ) {
-                       jQuery.globalEval( text );
-                       return text;
-               }
-       }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-       if ( s.cache === undefined ) {
-               s.cache = false;
-       }
-       if ( s.crossDomain ) {
-               s.type = "GET";
-               s.global = false;
-       }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-       // This transport only deals with cross domain requests
-       if ( s.crossDomain ) {
-
-               var script,
-                       head = document.head || jQuery("head")[0] || document.documentElement;
-
-               return {
-
-                       send: function( _, callback ) {
-
-                               script = document.createElement("script");
-
-                               script.async = true;
-
-                               if ( s.scriptCharset ) {
-                                       script.charset = s.scriptCharset;
-                               }
-
-                               script.src = s.url;
-
-                               // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-                                               // Handle memory leak in IE
-                                               script.onload = script.onreadystatechange = null;
-
-                                               // Remove the script
-                                               if ( script.parentNode ) {
-                                                       script.parentNode.removeChild( script );
-                                               }
-
-                                               // Dereference the script
-                                               script = null;
-
-                                               // Callback if not abort
-                                               if ( !isAbort ) {
-                                                       callback( 200, "success" );
-                                               }
-                                       }
-                               };
-
-                               // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
-                               // Use native DOM manipulation to avoid our domManip AJAX trickery
-                               head.insertBefore( script, head.firstChild );
-                       },
-
-                       abort: function() {
-                               if ( script ) {
-                                       script.onload( undefined, true );
-                               }
-                       }
-               };
-       }
-});
-
-
-
-
-var oldCallbacks = [],
-       rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-       jsonp: "callback",
-       jsonpCallback: function() {
-               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
-               this[ callback ] = true;
-               return callback;
-       }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-       var callbackName, overwritten, responseContainer,
-               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
-                       "url" :
-                       typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
-               );
-
-       // Handle iff the expected data type is "jsonp" or we have a parameter to set
-       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
-               // Get callback name, remembering preexisting value associated with it
-               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
-                       s.jsonpCallback() :
-                       s.jsonpCallback;
-
-               // Insert callback into url or form data
-               if ( jsonProp ) {
-                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
-               } else if ( s.jsonp !== false ) {
-                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
-               }
-
-               // Use data converter to retrieve json after script execution
-               s.converters["script json"] = function() {
-                       if ( !responseContainer ) {
-                               jQuery.error( callbackName + " was not called" );
-                       }
-                       return responseContainer[ 0 ];
-               };
-
-               // force json dataType
-               s.dataTypes[ 0 ] = "json";
-
-               // Install callback
-               overwritten = window[ callbackName ];
-               window[ callbackName ] = function() {
-                       responseContainer = arguments;
-               };
-
-               // Clean-up function (fires after converters)
-               jqXHR.always(function() {
-                       // Restore preexisting value
-                       window[ callbackName ] = overwritten;
-
-                       // Save back as free
-                       if ( s[ callbackName ] ) {
-                               // make sure that re-using the options doesn't screw things around
-                               s.jsonpCallback = originalSettings.jsonpCallback;
-
-                               // save the callback name for future use
-                               oldCallbacks.push( callbackName );
-                       }
-
-                       // Call if it was a function and we have a response
-                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
-                               overwritten( responseContainer[ 0 ] );
-                       }
-
-                       responseContainer = overwritten = undefined;
-               });
-
-               // Delegate to script
-               return "script";
-       }
-});
-
-
-
-
-// data: string of html
-// context (optional): If specified, the fragment will be created in this context, defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
-       if ( !data || typeof data !== "string" ) {
-               return null;
-       }
-       if ( typeof context === "boolean" ) {
-               keepScripts = context;
-               context = false;
-       }
-       context = context || document;
-
-       var parsed = rsingleTag.exec( data ),
-               scripts = !keepScripts && [];
-
-       // Single tag
-       if ( parsed ) {
-               return [ context.createElement( parsed[1] ) ];
-       }
-
-       parsed = jQuery.buildFragment( [ data ], context, scripts );
-
-       if ( scripts && scripts.length ) {
-               jQuery( scripts ).remove();
-       }
-
-       return jQuery.merge( [], parsed.childNodes );
-};
-
-
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
-       if ( typeof url !== "string" && _load ) {
-               return _load.apply( this, arguments );
-       }
-
-       var selector, response, type,
-               self = this,
-               off = url.indexOf(" ");
-
-       if ( off >= 0 ) {
-               selector = jQuery.trim( url.slice( off, url.length ) );
-               url = url.slice( 0, off );
-       }
-
-       // If it's a function
-       if ( jQuery.isFunction( params ) ) {
-
-               // We assume that it's the callback
-               callback = params;
-               params = undefined;
-
-       // Otherwise, build a param string
-       } else if ( params && typeof params === "object" ) {
-               type = "POST";
-       }
-
-       // If we have elements to modify, make the request
-       if ( self.length > 0 ) {
-               jQuery.ajax({
-                       url: url,
-
-                       // if "type" variable is undefined, then "GET" method will be used
-                       type: type,
-                       dataType: "html",
-                       data: params
-               }).done(function( responseText ) {
-
-                       // Save response for use in complete callback
-                       response = arguments;
-
-                       self.html( selector ?
-
-                               // If a selector was specified, locate the right elements in a dummy div
-                               // Exclude scripts to avoid IE 'Permission Denied' errors
-                               jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
-                               // Otherwise use the full result
-                               responseText );
-
-               }).complete( callback && function( jqXHR, status ) {
-                       self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
-               });
-       }
-
-       return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
-       jQuery.fn[ type ] = function( fn ) {
-               return this.on( type, fn );
-       };
-});
-
-
-
-
-jQuery.expr.filters.animated = function( elem ) {
-       return jQuery.grep(jQuery.timers, function( fn ) {
-               return elem === fn.elem;
-       }).length;
-};
-
-
-
-
-
-var docElem = window.document.documentElement;
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
-       return jQuery.isWindow( elem ) ?
-               elem :
-               elem.nodeType === 9 ?
-                       elem.defaultView || elem.parentWindow :
-                       false;
-}
-
-jQuery.offset = {
-       setOffset: function( elem, options, i ) {
-               var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
-                       position = jQuery.css( elem, "position" ),
-                       curElem = jQuery( elem ),
-                       props = {};
-
-               // set position first, in-case top/left are set even on static elem
-               if ( position === "static" ) {
-                       elem.style.position = "relative";
-               }
-
-               curOffset = curElem.offset();
-               curCSSTop = jQuery.css( elem, "top" );
-               curCSSLeft = jQuery.css( elem, "left" );
-               calculatePosition = ( position === "absolute" || position === "fixed" ) &&
-                       jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
-
-               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-               if ( calculatePosition ) {
-                       curPosition = curElem.position();
-                       curTop = curPosition.top;
-                       curLeft = curPosition.left;
-               } else {
-                       curTop = parseFloat( curCSSTop ) || 0;
-                       curLeft = parseFloat( curCSSLeft ) || 0;
-               }
-
-               if ( jQuery.isFunction( options ) ) {
-                       options = options.call( elem, i, curOffset );
-               }
-
-               if ( options.top != null ) {
-                       props.top = ( options.top - curOffset.top ) + curTop;
-               }
-               if ( options.left != null ) {
-                       props.left = ( options.left - curOffset.left ) + curLeft;
-               }
-
-               if ( "using" in options ) {
-                       options.using.call( elem, props );
-               } else {
-                       curElem.css( props );
-               }
-       }
-};
-
-jQuery.fn.extend({
-       offset: function( options ) {
-               if ( arguments.length ) {
-                       return options === undefined ?
-                               this :
-                               this.each(function( i ) {
-                                       jQuery.offset.setOffset( this, options, i );
-                               });
-               }
-
-               var docElem, win,
-                       box = { top: 0, left: 0 },
-                       elem = this[ 0 ],
-                       doc = elem && elem.ownerDocument;
-
-               if ( !doc ) {
-                       return;
-               }
-
-               docElem = doc.documentElement;
-
-               // Make sure it's not a disconnected DOM node
-               if ( !jQuery.contains( docElem, elem ) ) {
-                       return box;
-               }
-
-               // If we don't have gBCR, just use 0,0 rather than error
-               // BlackBerry 5, iOS 3 (original iPhone)
-               if ( typeof elem.getBoundingClientRect !== strundefined ) {
-                       box = elem.getBoundingClientRect();
-               }
-               win = getWindow( doc );
-               return {
-                       top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
-                       left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
-               };
-       },
-
-       position: function() {
-               if ( !this[ 0 ] ) {
-                       return;
-               }
-
-               var offsetParent, offset,
-                       parentOffset = { top: 0, left: 0 },
-                       elem = this[ 0 ];
-
-               // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
-               if ( jQuery.css( elem, "position" ) === "fixed" ) {
-                       // we assume that getBoundingClientRect is available when computed position is fixed
-                       offset = elem.getBoundingClientRect();
-               } else {
-                       // Get *real* offsetParent
-                       offsetParent = this.offsetParent();
-
-                       // Get correct offsets
-                       offset = this.offset();
-                       if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
-                               parentOffset = offsetParent.offset();
-                       }
-
-                       // Add offsetParent borders
-                       parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
-                       parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
-               }
-
-               // Subtract parent offsets and element margins
-               // note: when an element has margin: auto the offsetLeft and marginLeft
-               // are the same in Safari causing offset.left to incorrectly be 0
-               return {
-                       top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
-                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
-               };
-       },
-
-       offsetParent: function() {
-               return this.map(function() {
-                       var offsetParent = this.offsetParent || docElem;
-
-                       while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
-                               offsetParent = offsetParent.offsetParent;
-                       }
-                       return offsetParent || docElem;
-               });
-       }
-});
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
-       var top = /Y/.test( prop );
-
-       jQuery.fn[ method ] = function( val ) {
-               return access( this, function( elem, method, val ) {
-                       var win = getWindow( elem );
-
-                       if ( val === undefined ) {
-                               return win ? (prop in win) ? win[ prop ] :
-                                       win.document.documentElement[ method ] :
-                                       elem[ method ];
-                       }
-
-                       if ( win ) {
-                               win.scrollTo(
-                                       !top ? val : jQuery( win ).scrollLeft(),
-                                       top ? val : jQuery( win ).scrollTop()
-                               );
-
-                       } else {
-                               elem[ method ] = val;
-                       }
-               }, method, val, arguments.length, null );
-       };
-});
-
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
-       jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
-               function( elem, computed ) {
-                       if ( computed ) {
-                               computed = curCSS( elem, prop );
-                               // if curCSS returns percentage, fallback to offset
-                               return rnumnonpx.test( computed ) ?
-                                       jQuery( elem ).position()[ prop ] + "px" :
-                                       computed;
-                       }
-               }
-       );
-});
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
-               // margin is only for outerHeight, outerWidth
-               jQuery.fn[ funcName ] = function( margin, value ) {
-                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
-                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
-                       return access( this, function( elem, type, value ) {
-                               var doc;
-
-                               if ( jQuery.isWindow( elem ) ) {
-                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
-                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
-                                       // https://github.com/jquery/jquery/pull/764
-                                       return elem.document.documentElement[ "client" + name ];
-                               }
-
-                               // Get document width or height
-                               if ( elem.nodeType === 9 ) {
-                                       doc = elem.documentElement;
-
-                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
-                                       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
-                                       return Math.max(
-                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
-                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
-                                               doc[ "client" + name ]
-                                       );
-                               }
-
-                               return value === undefined ?
-                                       // Get width or height on the element, requesting but not forcing parseFloat
-                                       jQuery.css( elem, type, extra ) :
-
-                                       // Set width or height on the element
-                                       jQuery.style( elem, type, value, extra );
-                       }, type, chainable ? margin : undefined, chainable, null );
-               };
-       });
-});
-
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
-       return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
-       define( "jquery", [], function() {
-               return jQuery;
-       });
-}
-
-
-
-
-var
-       // Map over jQuery in case of overwrite
-       _jQuery = window.jQuery,
-
-       // Map over the $ in case of overwrite
-       _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
-       if ( window.$ === jQuery ) {
-               window.$ = _$;
-       }
-
-       if ( deep && window.jQuery === jQuery ) {
-               window.jQuery = _jQuery;
-       }
-
-       return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === strundefined ) {
-       window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-
-}));
diff --git a/www/plugins/crayons/js/resizehandle.js b/www/plugins/crayons/js/resizehandle.js
deleted file mode 100644 (file)
index 686647f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(function($){
-/*
- * resizehandle.js (c) Fil 2007-2011, plugin pour jQuery
- * @ http://www.jquery.info/spip.php?article44
- * Distribue sous licence GNU/LGPL et MIT
- */
-$.fn.resizehandle = function() {
-  return this.each(function() {
-    var me = $(this);
-    me.after(
-      $('<div class="resizehandle"></div>')
-      .css({height:'16px',width:Math.max(me.width()-4,10)}) // bug MSIE si 100%
-      .bind('mousedown', function(e) {
-        var h = me.height();
-        var y = e.clientY;
-        var moveHandler = function(e) {
-          me
-          .height(Math.max(20, e.clientY + h - y));
-        };
-        var upHandler = function(e) {
-          $('html')
-          .unbind('mousemove',moveHandler)
-          .unbind('mouseup',upHandler);
-        };
-        $('html')
-        .bind('mousemove', moveHandler)
-        .bind('mouseup', upHandler);
-      })
-    );
-  });
-};
-})(jQuery);
diff --git a/www/plugins/crayons/js/uploader.js.html b/www/plugins/crayons/js/uploader.js.html
deleted file mode 100644 (file)
index 5bcca93..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<script>\r
-// activer l'uploader\r
-(function($) {\r
-       var url = '[(#VAL{crayons_upload}|generer_url_action{id=#ENV{id_article}&type=article, true, true})]';\r
-\r
-       $('textarea.crayon-active,#uploader#ENV{id_article}')\r
-       .html5Uploader({\r
-               name: 'upss',\r
-               postUrl: url,\r
-               onClientLoadStart: function(e, file) {\r
-                       file.mark = 'up'+Math.ceil(10000000*Math.random());\r
-                       $('<li>lecture de '+file.name+'...</li>')\r
-                       .addClass('loading')\r
-                       .attr('id', file.mark)\r
-                       .prependTo('#uploader_liste')\r
-                       ;\r
-               },\r
-               onClientLoad: function(e, file) {\r
-                       $('#uploader#ENV{id_article}')\r
-                       .removeClass('hover');\r
-               },\r
-               onServerProgress: function(e,file) {\r
-                       var percent = '';\r
-                       if(e.lengthComputable)\r
-                               percent = ''+Math.ceil(100*e.loaded/e.total)+'%';\r
-                       $('#'+file.mark)\r
-                       .html('envoi de '+file.name+' vers le serveur... '+percent);\r
-               },\r
-               onServerReadyStateChange: function(e,file) {\r
-                       if (e.target.responseText) {\r
-                               // traiter la reponse du serveur\r
-                               // todo: la passer en JSON si on veut\r
-                               $('#'+file.mark)\r
-                               .html(e.target.responseText);\r
-                       }\r
-               },\r
-               onServerLoad: function(e,file) {\r
-                       $('#'+file.mark)\r
-                       .removeClass('loading')\r
-                       .addClass('ok');\r
-               },\r
-       })\r
-       .bind("dragenter dragover", function() {\r
-               $(this).addClass('hover');\r
-               $('#uploader#ENV{id_article}')\r
-               .removeClass('ferme');\r
-       })\r
-       .bind("dragleave", function() {\r
-               $(this).removeClass('hover');\r
-               $('#uploader#ENV{id_article}')\r
-               .addClass('ferme');\r
-       })\r
-       .bind("drop", function(e) {\r
-               $(this)\r
-               .removeClass('hover');\r
-               $('#uploader#ENV{id_article}')\r
-               .removeClass('ferme');\r
-       })\r
-       .addClass('uploader')\r
-       ;\r
-       $('#uploader#ENV{id_article}')\r
-       .hover(function() {\r
-               $(this).removeClass('ferme');\r
-       }, function() {\r
-               $(this).addClass('ferme');\r
-       });\r
-\r
-})(cQuery);\r
-\r
-</script>
\ No newline at end of file
diff --git a/www/plugins/crayons/lang/crayons.xml b/www/plugins/crayons/lang/crayons.xml
deleted file mode 100644 (file)
index 19d2419..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<traduction module="crayons" gestionnaire="salvatore" url="http://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/crayons/lang/" reference="fr">
-       <langue code="ar" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=ar" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="ast" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=ast" total="52" traduits="39" relire="0" modifs="3" nouveaux="10" pourcent="75.00">
-               <traducteur nom="Xuacu" lien="http://trad.spip.net/auteur/xuacu" />
-       </langue>
-       <langue code="br" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=br" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="ca" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=ca" total="52" traduits="38" relire="0" modifs="2" nouveaux="12" pourcent="73.08">
-       </langue>
-       <langue code="de" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=de" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="http://trad.spip.net/auteur/klaus" />
-               <traducteur nom="Torsten Willmann" lien="http://trad.spip.net/auteur/torsten-willmann" />
-       </langue>
-       <langue code="en" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=en" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="George" lien="http://trad.spip.net/auteur/جورج-قندلفت" />
-               <traducteur nom="Hanjo" lien="http://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="kent1" lien="http://trad.spip.net/auteur/kent1" />
-               <traducteur nom="Paolo" lien="http://trad.spip.net/auteur/paolo" />
-       </langue>
-       <langue code="eo" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=eo" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="es" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=es" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="dani" lien="http://trad.spip.net/auteur/dani" />
-               <traducteur nom="Raquel S. Bujaldón" lien="http://trad.spip.net/auteur/raquel-s-bujaldon" />
-               <traducteur nom="severo" lien="http://trad.spip.net/auteur/severo" />
-       </langue>
-       <langue code="eu" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=eu" total="52" traduits="12" relire="0" modifs="0" nouveaux="40" pourcent="23.08">
-       </langue>
-       <langue code="fa" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=fa" total="52" traduits="43" relire="0" modifs="3" nouveaux="6" pourcent="82.69">
-               <traducteur nom="Davood Hossein" lien="http://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=fr" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=fr_tu" total="52" traduits="47" relire="0" modifs="3" nouveaux="2" pourcent="90.38">
-               <traducteur nom="beatnick" lien="http://trad.spip.net/auteur/beatnick" />
-               <traducteur nom="Cerf" lien="http://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="gl" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=gl" total="52" traduits="15" relire="0" modifs="0" nouveaux="37" pourcent="28.85">
-       </langue>
-       <langue code="it" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=it" total="52" traduits="39" relire="0" modifs="3" nouveaux="10" pourcent="75.00">
-               <traducteur nom="Fil" lien="http://trad.spip.net/auteur/fil" />
-       </langue>
-       <langue code="it_fem" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=it_fem" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="km" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=km" total="52" traduits="5" relire="0" modifs="0" nouveaux="47" pourcent="9.62">
-       </langue>
-       <langue code="lb" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=lb" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="nl" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=nl" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="http://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="mpossoz" lien="http://trad.spip.net/auteur/mpossoz" />
-               <traducteur nom="Suske" lien="http://trad.spip.net/auteur/suske" />
-       </langue>
-       <langue code="oc_lnc" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=oc_lnc" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="oc_ni_mis" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=oc_ni_mis" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="sylvain" lien="http://trad.spip.net/auteur/sylvain" />
-       </langue>
-       <langue code="pt_br" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=pt_br" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="http://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ro" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=ro" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="ru" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=ru" total="52" traduits="48" relire="0" modifs="1" nouveaux="3" pourcent="92.31">
-               <traducteur nom="olly" lien="http://trad.spip.net/auteur/olly" />
-               <traducteur nom="Serge Markitanenko" lien="http://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=sk" total="52" traduits="52" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="http://trad.spip.net/auteur/jaro" />
-       </langue>
-       <langue code="sv" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=sv" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="tr" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=tr" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="tw" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=tw" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-       <langue code="zh" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=zh" total="52" traduits="18" relire="0" modifs="14" nouveaux="20" pourcent="34.62">
-       </langue>
-       <langue code="zh_tw" url="http://trad.spip.net/tradlang_module/crayons?lang_cible=zh_tw" total="52" traduits="14" relire="0" modifs="0" nouveaux="38" pourcent="26.92">
-       </langue>
-</traduction>
diff --git a/www/plugins/crayons/lang/crayons_ar.php b/www/plugins/crayons/lang/crayons_ar.php
deleted file mode 100644 (file)
index e76b9e6..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'إلغاء',
-
-       // D
-       'deja_modifie' => 'عدّل سابقاً',
-       'donnees_mal_formatees' => 'تنسيق بيانات غير سليم',
-
-       // E
-       'editer' => 'تحرير',
-       'editer_@type@_@id@' => 'تحرير @type@ @id@ بالكامل',
-       'editer_tout' => 'تحرير الكل',
-
-       // M
-       'modifie_par_ailleurs' => 'عدّل في مكان آخر',
-
-       // N
-       'non_autorise' => 'غير مسموح',
-       'non_implemente' => 'غير مدعوم',
-
-       // P
-       'pas_de_modification' => 'لم تدخل اي تعديلات',
-       'pas_de_valeur' => 'لا توجد قيمة',
-
-       // S
-       'sauvegarder' => 'حفظ التعديلات؟',
-       'svp_copier_coller' => 'عذراً، قم بنسخ التعديلات ولصقها وإعادة المحاولة',
-
-       // V
-       'veuillez_patienter' => 'الرجاء الانتظار...'
-);
diff --git a/www/plugins/crayons/lang/crayons_ast.php b/www/plugins/crayons/lang/crayons_ast.php
deleted file mode 100644 (file)
index 5ec334e..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=ast
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activation_barre_impossible' => 'Hai otru complementu que torga l’usu del portaplumes nel espaciu públicu.',
-       'annuler' => 'Anular',
-
-       // B
-       'bouton_supprimer' => 'Desaniciar',
-
-       // D
-       'deja_modifie' => 'Ya ta modificao',
-       'donnees_mal_formatees' => 'Datos mal formateaos',
-
-       // E
-       'editer' => 'Editar',
-       'editer_@type@_@id@' => 'Editar @type@ @id@ dafechu',
-       'editer_tout' => 'Editalo ensembre',
-       'effets' => 'Efeutos',
-       'explication_exec_autorise' => 'Páxines que se permite camudar
-  (?exec=...) : (, pa xebrar los exec).', # MODIF
-       'explication_introduction_article' => 'La introducción d’un artículu amuesa la descripción del artículu, sinón amuesa los sos primeros 600 caráuteres (la entrada siguía pol testu).', # MODIF
-       'explication_reduire_logo' => 'Amenorgar el logo si pasa del
-  tamañu máximu indicáu en pixels. Exemplu: 100. (0 = enxamás)', # MODIF
-
-       // L
-       'label_activer_barre_typo' => '¿Activar la barra tipográfica nos llápices?',
-       'label_activer_crayons_prive' => 'Activar los llápices pa la parte privada.',
-       'label_barre_typo' => 'Barra tipográfica',
-       'label_clickhide' => 'Calcar una vegada per fuera anubre los llápices',
-       'label_effets' => 'Esbilla de los efeutos',
-       'label_espaceprive' => '¿Llápices nel espaciu priváu?',
-       'label_exec_autorise' => 'Páxines autorizaes',
-       'label_message' => 'Escoyer un mensaxe',
-       'label_msg_no_change' => 'Si nun hai cambeos',
-       'label_reduire_logo' => 'Amenorgar los logos',
-       'label_yellow_fade' => 'Dilir',
-       'legend_controleur_hyperlien' => 'Hiperenllaz',
-       'legend_controleur_logo' => 'Escoyer un logo:',
-       'legend_controleur_logo_remplacer' => 'Trocar esti logo',
-       'legend_controleur_qui' => '¿Quién?',
-       'legend_editer_prive' => 'Editar l’espaciu priváu (esperimental)',
-       'legend_introduction_article' => 'Testu introductoriu del artículu',
-
-       // M
-       'message_image_obligatoire' => 'Hai qu’escoyer una imaxe',
-       'messages' => 'Mensaxes',
-       'modifie_par_ailleurs' => 'Modificao n’otru llau',
-
-       // N
-       'non_autorise' => 'Non autorizao',
-       'non_implemente' => 'Ensin implementar',
-
-       // P
-       'pas_de_modification' => 'Ensin modificación',
-       'pas_de_valeur' => 'Ensin valor',
-
-       // S
-       'sauvegarder' => '¿Guardar les modificaciones?',
-       'svp_copier_coller' => 'Sentimoslo, copia/pega los cambéos y torna a entamar',
-
-       // T
-       'titre_config_crayons' => 'Configurar los llápices',
-       'titre_crayons' => 'Llápices',
-
-       // U
-       'update_impossible' => 'Falló l’anovación.',
-
-       // V
-       'veuillez_patienter' => 'Un momentu...'
-);
diff --git a/www/plugins/crayons/lang/crayons_br.php b/www/plugins/crayons/lang/crayons_br.php
deleted file mode 100644 (file)
index 11397a8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Nullañ',
-
-       // D
-       'deja_modifie' => 'Bet kemmet c’hoazh',
-       'donnees_mal_formatees' => 'Stumm fall gant an titouroù',
-
-       // E
-       'editer' => 'Embann',
-       'editer_@type@_@id@' => 'Embann @type@ @id@ a-bezh',
-       'editer_tout' => 'Embann pep tra',
-
-       // M
-       'modifie_par_ailleurs' => 'Kemmet e mod all',
-
-       // N
-       'non_autorise' => 'Ket aotreet',
-       'non_implemente' => 'Ket lakaet e-barzh',
-
-       // P
-       'pas_de_modification' => 'Kemm ebet',
-       'pas_de_valeur' => 'Talvoud ebet',
-
-       // S
-       'sauvegarder' => 'Saveteiñ ar c’hemmoù ?',
-       'svp_copier_coller' => 'Digarez, eilit/pegit ho kemmoù, ha klaskit en-dro',
-
-       // V
-       'veuillez_patienter' => 'Gortozit...'
-);
diff --git a/www/plugins/crayons/lang/crayons_ca.php b/www/plugins/crayons/lang/crayons_ca.php
deleted file mode 100644 (file)
index a8f5405..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=ca
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activation_barre_impossible' => 'Un altre connector impedeix l’ús del portaplomes a l’espai públic. ',
-       'annuler' => 'Anul·lar',
-
-       // B
-       'bouton_supprimer' => 'Suprimir',
-
-       // D
-       'deja_modifie' => 'Ja modificat',
-       'donnees_mal_formatees' => 'Dades mal formatades',
-
-       // E
-       'editer' => 'Editar',
-       'editer_@type@_@id@' => 'Editar @type@ @id@ de cap a peus',
-       'editer_tout' => 'Editar tot',
-       'effets' => 'Efectes',
-       'explication_exec_autorise' => 'Pàgines autoritzades a ser modificades
-  (?exec=...) : (, per separar les exec).', # MODIF
-       'explication_reduire_logo' => 'Reduir el logotip si sobrepassa la mida màxima indicada en píxels. Exemple: 100. (0 = mai)', # MODIF
-
-       // L
-       'label_activer_barre_typo' => 'Activar la barra tipogràfica a els llapis?',
-       'label_activer_crayons_prive' => 'Activar llapis a la part privada.',
-       'label_barre_typo' => 'Barra tipogràfica',
-       'label_clickhide' => 'Fent un clic a l’exterior s’amaga els llapis',
-       'label_effets' => 'Tria dels efectes',
-       'label_espaceprive' => 'Els llapis a la part privada?',
-       'label_exec_autorise' => 'Pàgines autoritzades',
-       'label_filet' => 'Filet',
-       'label_message' => 'Obtenir un missatge',
-       'label_msg_abandon' => 'Sobre l’abandonament',
-       'label_msg_no_change' => 'Si no hi ha canvi',
-       'label_reduire_logo' => 'Reduir els logotips',
-       'label_yellow_fade' => 'Sense interès',
-       'legend_controleur_logo' => 'Escollir un logotip:',
-       'legend_controleur_vignette' => 'Escollir una vinyeta:',
-       'legend_editer_prive' => 'Editar l’espai privat (experimental)',
-
-       // M
-       'message_image_obligatoire' => 'Cal escollir una imatge',
-       'messages' => 'Missatges',
-       'modifie_par_ailleurs' => 'Modificat per altres raons',
-
-       // N
-       'non_autorise' => 'No autoritzat',
-       'non_implemente' => 'No implementat',
-
-       // P
-       'pas_de_modification' => 'Cap modificació',
-       'pas_de_valeur' => 'Cap valor',
-
-       // S
-       'sauvegarder' => 'Salvaguardar les modificacions?',
-       'svp_copier_coller' => 'Em sap greu, copieu/enganxeu els vostres canvis i torneu a començar',
-
-       // T
-       'titre_config_crayons' => 'Configurar els llapis',
-       'titre_crayons' => 'Llapis',
-
-       // U
-       'update_impossible' => 'L’actualització ha fracassat',
-
-       // V
-       'veuillez_patienter' => 'Si us plau, espereu un moment...'
-);
diff --git a/www/plugins/crayons/lang/crayons_de.php b/www/plugins/crayons/lang/crayons_de.php
deleted file mode 100644 (file)
index 87da042..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => 'Kein Primärschlüssel vorhanden!',
-       'activation_barre_impossible' => 'Ein anderes Plugin verhindert den Einsatz des Federhalters im öffentlichen Bereich.',
-       'annuler' => 'Abbrechen',
-
-       // B
-       'bouton_supprimer' => 'Löschen',
-
-       // D
-       'deja_modifie' => 'Bereits geändert',
-       'donnees_mal_formatees' => 'Datenformat unrichtig',
-
-       // E
-       'editer' => 'Bearbeiten',
-       'editer_@type@_@id@' => '@type@ @id@ als Ganzes bearbeiten',
-       'editer_tout' => 'Alles bearbeiten',
-       'effets' => 'Effekte',
-       'explication_exec_autorise' => 'Zur Bearbeitung zugelassene Seiten
-  (?exec=...) : (exec-Skripte mit Komma trennen).',
-       'explication_introduction_article' => 'Die Einleitung eines Artikels zeigt das Feld "Beschreibung" an. Sollte es leer sein, werden die ersten  600 Zeichen des Artikels aus den Feldern "Kopf" und "Text" angezeigt.',
-       'explication_reduire_logo' => 'Logo verkleinern wenn es größer als x Pixel ist.
-Beispiel: 100. (0 = niemals)',
-
-       // I
-       'info_experimental' => 'Expérimentell',
-
-       // L
-       'label_activer_barre_typo' => 'Funktionsleisten für die Stifte aktivieren?',
-       'label_activer_crayons_prive' => 'Stifte im Redaktionssystem aktivieren',
-       'label_barre_typo' => 'Funktonsleiste',
-       'label_clickhide' => 'Ein Klick außerhalb versteckt den Stift',
-       'label_effets' => 'Effekte wählen',
-       'label_espaceprive' => 'Stifte im Redaktionssystem verwenden?',
-       'label_exec_autorise' => 'Erlaubte Seiten',
-       'label_filet' => 'Netz',
-       'label_message' => 'Nachricht erhalten',
-       'label_msg_abandon' => 'bei Abbruch',
-       'label_msg_no_change' => 'wenn keine Änderung',
-       'label_reduire_logo' => 'Logos verkleinern',
-       'label_upload_document' => 'Hinzufügen von Dokumenten durch Ziehen/Ablegen auf den Stift article.texte erlauben.',
-       'label_yellow_fade' => 'Ausblenden',
-       'legend_controleur_fichier_remplacer' => 'Ersetze das Dokument "@extension@"',
-       'legend_controleur_hyperlien' => 'Hyperlink',
-       'legend_controleur_logo' => 'Logoe wählen:',
-       'legend_controleur_logo_remplacer' => 'Dieses Logo ersetzen',
-       'legend_controleur_qui' => 'Wer?',
-       'legend_controleur_vignette' => 'Thumbnail wählen:',
-       'legend_controleur_vignette_remplacer' => 'Dieses Miniaturbild ersetzen',
-       'legend_documents' => 'Dokumente hochladen',
-       'legend_editer_prive' => 'Stifte im Redaktionssystem (experimentell)',
-       'legend_introduction_article' => 'Einleitender Text des Artikels',
-       'legend_introduction_rubrique' => 'Einführender Text der Rubrik',
-
-       // M
-       'message_image_obligatoire' => 'Es muß ein Bild gewählt werden.',
-       'messages' => 'Nachrichten',
-       'modifie_par_ailleurs' => 'Auf anderem Weg geändert',
-
-       // N
-       'non_autorise' => 'Nicht erlaubt',
-       'non_implemente' => 'Funktion nicht vorhanden',
-
-       // P
-       'pas_de_modification' => 'Keine Änderung',
-       'pas_de_valeur' => 'Kein Wert',
-
-       // S
-       'sauvegarder' => 'Änderungen speichern?',
-       'svp_copier_coller' => 'Pardon, bitte sichern Sie ihre Änderungen mit kopieren/einfügen und beginnen Sie von vorne.',
-
-       // T
-       'titre_config_crayons' => 'Stifte: Konfiguration ',
-       'titre_crayons' => 'Stifte',
-
-       // U
-       'update_impossible' => 'Das Update ist fehlgeschlagen.',
-
-       // V
-       'veuillez_patienter' => 'Bitte etwas Geduld...'
-);
diff --git a/www/plugins/crayons/lang/crayons_en.php b/www/plugins/crayons/lang/crayons_en.php
deleted file mode 100644 (file)
index 61faa60..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => 'No primary key!',
-       'activation_barre_impossible' => 'Another plugin is preventing the use of  porte-plume on the public site.',
-       'annuler' => 'Cancel',
-
-       // B
-       'bouton_supprimer' => 'Delete',
-
-       // D
-       'deja_modifie' => 'Already modified',
-       'donnees_mal_formatees' => 'Invalid request format',
-
-       // E
-       'editer' => 'Edit',
-       'editer_@type@_@id@' => 'Edit the whole @type@ @id@',
-       'editer_tout' => 'Edit as a whole',
-       'effets' => 'Effects',
-       'explication_exec_autorise' => 'Pages which are authorised for changes
-  (?exec=...) : (, to separate several pages - * for all).',
-       'explication_introduction_article' => 'The introduction for an article displays the description of that article if there is one, otherwise it displays the first 600 characters (of the standfirst and text).',
-       'explication_reduire_logo' => 'Reduce the logo size if it exceeds
-  the maximum size (in pixels). Example: 100. (0 = never).',
-
-       // I
-       'info_experimental' => 'Experimental',
-
-       // L
-       'label_activer_barre_typo' => 'Activate the typographical bar for "Pencils"?',
-       'label_activer_crayons_prive' => 'Activate "Pencils" for the editing area.',
-       'label_barre_typo' => 'Typographical bar',
-       'label_clickhide' => 'A click outside the area closes the pencils',
-       'label_effets' => 'Choice of effects',
-       'label_espaceprive' => 'Use "Pencils" in the editing area?',
-       'label_exec_autorise' => 'Pages authorised',
-       'label_filet' => 'Line',
-       'label_message' => 'Show a message',
-       'label_msg_abandon' => 'On cancelling',
-       'label_msg_no_change' => 'If no change made',
-       'label_reduire_logo' => 'Reduce logos',
-       'label_upload_document' => 'Allow adding documents by drag and drop on the pencil article.texte',
-       'label_yellow_fade' => 'Fade',
-       'legend_controleur_fichier_remplacer' => 'Replace this document "@extension@"',
-       'legend_controleur_hyperlien' => 'Hyperlink',
-       'legend_controleur_logo' => 'Choose a logo:',
-       'legend_controleur_logo_remplacer' => 'Replace this logo',
-       'legend_controleur_qui' => 'Who?',
-       'legend_controleur_vignette' => 'Choose a thumbnail:',
-       'legend_controleur_vignette_remplacer' => 'Replace this thumbnail',
-       'legend_documents' => 'Upload documents',
-       'legend_editer_prive' => 'Use in editing area (experimental)',
-       'legend_introduction_article' => 'Introductory text for the article',
-       'legend_introduction_rubrique' => 'Section’s introductory text',
-
-       // M
-       'message_image_obligatoire' => 'You need to choose an image',
-       'messages' => 'Messages',
-       'modifie_par_ailleurs' => 'Was modified elsewhere in the meantime',
-
-       // N
-       'non_autorise' => 'Not allowed',
-       'non_implemente' => 'Not implemented',
-
-       // P
-       'pas_de_modification' => 'No change',
-       'pas_de_valeur' => 'No value for this id',
-
-       // S
-       'sauvegarder' => 'Save changes?',
-       'svp_copier_coller' => 'Sorry, copy/paste your changes and retry',
-
-       // T
-       'titre_config_crayons' => 'Configure "Pencils"',
-       'titre_crayons' => 'Pencils',
-
-       // U
-       'update_impossible' => 'The update did not succeed.',
-
-       // V
-       'veuillez_patienter' => 'Searching ...'
-);
diff --git a/www/plugins/crayons/lang/crayons_eo.php b/www/plugins/crayons/lang/crayons_eo.php
deleted file mode 100644 (file)
index 6f5cd01..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=eo
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Nuligi',
-
-       // D
-       'deja_modifie' => 'Jam modifita',
-       'donnees_mal_formatees' => 'Datenoj malbone formatitaj',
-
-       // E
-       'editer' => 'Redakti',
-       'editer_@type@_@id@' => 'Tute redakti @type@ @id@ ',
-       'editer_tout' => 'Ĉion redakti',
-
-       // M
-       'modifie_par_ailleurs' => 'Modifita dumtempe',
-
-       // N
-       'non_autorise' => 'Ne permesate',
-       'non_implemente' => 'Ne prirealigita',
-
-       // P
-       'pas_de_modification' => 'Neniu modifo',
-       'pas_de_valeur' => 'Neniu valoro',
-
-       // S
-       'sauvegarder' => 'Ĉu konservi modifojn ?',
-       'svp_copier_coller' => 'Ni pardonpetas, kopigluu viajn ŝanĝojn kaj rekomencu',
-
-       // V
-       'veuillez_patienter' => 'Bonvolu atendi...'
-);
diff --git a/www/plugins/crayons/lang/crayons_es.php b/www/plugins/crayons/lang/crayons_es.php
deleted file mode 100644 (file)
index 30ed514..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => '¡No hay clave primaria!',
-       'activation_barre_impossible' => 'Otro plugin impide el uso del porta-plumas en el espacio público.',
-       'annuler' => 'Cancelar',
-
-       // B
-       'bouton_supprimer' => 'Suprimir',
-
-       // D
-       'deja_modifie' => 'Ya modificado',
-       'donnees_mal_formatees' => 'Datos mal formateados',
-
-       // E
-       'editer' => 'Editar',
-       'editer_@type@_@id@' => 'Editar @type@ @id@ entero',
-       'editer_tout' => 'Editar todo',
-       'effets' => 'Efectos',
-       'explication_exec_autorise' => 'Páginas cuya modificación es permitida
-         (?exec=...): (, para separar los exec - * para todas).',
-       'explication_introduction_article' => 'La introducción de un artículo muestra la descripción del artículo, 
-   si no los primeros 600 carácteres (epígrafe y luego texto).',
-       'explication_reduire_logo' => 'Reducir el logotipo si va mas allá
-  del tamaño indicado en píxeles. Ejemplo: 100. (0 = nunca)',
-
-       // I
-       'info_experimental' => 'Experimental',
-
-       // L
-       'label_activer_barre_typo' => '¿Activar la barra tipográfica en los lápices?',
-       'label_activer_crayons_prive' => 'Activar los lápices en el espacio privado.',
-       'label_barre_typo' => 'Barra tipográfica',
-       'label_clickhide' => 'Un clic afuera esconde los lápices',
-       'label_effets' => 'Elegir los efectos',
-       'label_espaceprive' => '¿Lápices en el espacio privado?',
-       'label_exec_autorise' => 'Páginas permitidas',
-       'label_filet' => 'Filete',
-       'label_message' => 'Obtener un mensaje',
-       'label_msg_abandon' => 'Cuando se abandona',
-       'label_msg_no_change' => 'Si no hay cambios',
-       'label_reduire_logo' => 'Reducir el tamaño de los logotipos',
-       'label_upload_document' => 'Autorizar que se agreguen documentos por arrastrar/depositar ("drag & drop") sobre el lápiz artículo.texto (article.texte)',
-       'label_yellow_fade' => 'Fundido',
-       'legend_controleur_fichier_remplacer' => 'Reemplazar este documento "@extension@"',
-       'legend_controleur_hyperlien' => 'Enlace hipertexto',
-       'legend_controleur_logo' => 'Elegir un logotipo:',
-       'legend_controleur_logo_remplacer' => 'Reemplazar este logotipo',
-       'legend_controleur_qui' => '¿Quién?',
-       'legend_controleur_vignette' => 'Escoger una viñeta:',
-       'legend_controleur_vignette_remplacer' => 'Reemplazar esta viñeta',
-       'legend_documents' => 'Subir documentos',
-       'legend_editer_prive' => 'Edición en el espacio privado (experimental)',
-       'legend_introduction_article' => 'Texto introductivo del artículo',
-       'legend_introduction_rubrique' => 'Texto introductorio de la sección',
-
-       // M
-       'message_image_obligatoire' => 'Hay que escoger una imagen',
-       'messages' => 'Mensajes',
-       'modifie_par_ailleurs' => 'Modificado por otro lado',
-
-       // N
-       'non_autorise' => 'No autorizado',
-       'non_implemente' => 'No implementado',
-
-       // P
-       'pas_de_modification' => 'No hay modificaciones',
-       'pas_de_valeur' => 'No hay valor',
-
-       // S
-       'sauvegarder' => '¿Guardar las modificaciones?',
-       'svp_copier_coller' => 'Perdon, copia/pega tus cambios y vuelve a empezar',
-
-       // T
-       'titre_config_crayons' => 'Configuración de los lápices',
-       'titre_crayons' => 'Lápices',
-
-       // U
-       'update_impossible' => 'La actualización fracasó.',
-
-       // V
-       'veuillez_patienter' => 'Favor esperar...'
-);
diff --git a/www/plugins/crayons/lang/crayons_eu.php b/www/plugins/crayons/lang/crayons_eu.php
deleted file mode 100644 (file)
index aa0ab7d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=eu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Ezeztatu',
-
-       // D
-       'deja_modifie' => 'Jadanik aldatua',
-       'donnees_mal_formatees' => 'Gaizki formatutako datuak',
-
-       // E
-       'editer' => 'Editatu',
-       'editer_@type@_@id@' => '@type@ @id@ osoki editatu',
-       'editer_tout' => 'Dena editatu',
-
-       // M
-       'modifie_par_ailleurs' => 'Bestalde aldatua',
-
-       // N
-       'non_autorise' => 'Ez baimendua',
-       'non_implemente' => 'Ez inpliment atua',
-
-       // P
-       'pas_de_modification' => 'Aldaketarik ez',
-       'pas_de_valeur' => 'Balorerik ez',
-
-       // S
-       'sauvegarder' => 'Aldaketak grabatu ?'
-);
diff --git a/www/plugins/crayons/lang/crayons_fa.php b/www/plugins/crayons/lang/crayons_fa.php
deleted file mode 100644 (file)
index 8d1d863..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activation_barre_impossible' => 'يك پلاگين ديگر مانع استفاده از چوب قلم در سايت همگاني است.',
-       'annuler' => 'ابطال',
-
-       // B
-       'bouton_supprimer' => 'حذف',
-
-       // D
-       'deja_modifie' => 'پيش‌‌ تر اصلاح شده',
-       'donnees_mal_formatees' => 'فرمت درخواست نامعتبر',
-
-       // E
-       'editer' => 'ويرايش ',
-       'editer_@type@_@id@' => 'تمام @type@ @id@ را ويرايش کنید',
-       'editer_tout' => 'ويرايش همه',
-       'effets' => 'افكت‌ها',
-       'explication_exec_autorise' => 'صفحه‌هاي مجاز براي اصلاح
-(?exec=...) : (, جداسازي چند صفحه- *براي همه).', # MODIF
-       'explication_introduction_article' => 'پيشگفتار يك مقاله توصيف يك مقاله را اگر باشد، نشان مي‌دهد، و اگر نباشد 600 كاراكتر اول (ليد و متن)را نشان خواهد داد.', # MODIF
-       'explication_reduire_logo' => 'اندازه‌ي لوگ را اگر از بيشترين حد بالا زده باشد كم مي‌كند (به پيكسل). نمونه : 100. ( 0 = هرگز)', # MODIF
-
-       // L
-       'label_activer_barre_typo' => 'فعال‌سازي ميل حروف‌نگاري در پلاگين «مدادها»؟',
-       'label_activer_crayons_prive' => 'فعال سازي «مدادها» براي قسمت خصوصي.',
-       'label_barre_typo' => 'ميل حروف نگاري ',
-       'label_clickhide' => 'يك كليك بيرون محوطه مدادها را مبي بندد',
-       'label_effets' => 'گزينش افكت‌ها',
-       'label_espaceprive' => 'مدادها در محوطه‌ي خصوصي؟',
-       'label_exec_autorise' => 'صفحه‌هاي مجاز',
-       'label_filet' => 'خط',
-       'label_message' => 'كسب پيام',
-       'label_msg_abandon' => 'در جريان ابطال',
-       'label_msg_no_change' => 'در صورت عدم تغيير ',
-       'label_reduire_logo' => 'كاهش لوگوها',
-       'label_yellow_fade' => 'محو',
-       'legend_controleur_hyperlien' => 'ابرپيوند',
-       'legend_controleur_logo' => 'گزينش يك لوگو :',
-       'legend_controleur_logo_remplacer' => 'جايگزيني اين لوگو',
-       'legend_controleur_qui' => 'كي؟',
-       'legend_controleur_vignette' => 'گزيش يك صورتك :',
-       'legend_controleur_vignette_remplacer' => 'جايگزيني اين صورت',
-       'legend_editer_prive' => 'استفاده در محوطه‌ي خصوصي (تجربي)',
-       'legend_introduction_article' => 'متن مقدماتي مقاله',
-
-       // M
-       'message_image_obligatoire' => 'بايد يك تصوير انتخاب كنيد',
-       'messages' => 'پيام‌ها',
-       'modifie_par_ailleurs' => 'جاي ديگر اصلاح شده',
-
-       // N
-       'non_autorise' => 'بي ‌مجوز',
-       'non_implemente' => 'انجام نیافته',
-
-       // P
-       'pas_de_modification' => 'بدون تغییر',
-       'pas_de_valeur' => 'بی ارزش',
-
-       // S
-       'sauvegarder' => ' ضبط تغییرات؟',
-       'svp_copier_coller' => 'متاسفیم. تغییرات را دوباره کپی سپس بچسبانید',
-
-       // T
-       'titre_config_crayons' => 'پيكربندي «مدادها» ',
-       'titre_crayons' => 'مدادها',
-
-       // U
-       'update_impossible' => 'روزآمد نشد.',
-
-       // V
-       'veuillez_patienter' => 'لطفأ صبر کنید ...'
-);
diff --git a/www/plugins/crayons/lang/crayons_fr.php b/www/plugins/crayons/lang/crayons_fr.php
deleted file mode 100644 (file)
index 0c117d0..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/crayons/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => 'Pas de clé primaire !',
-       'activation_barre_impossible' => 'Un autre plugin interdit l’usage du porte-plume dans l’espace public.',
-       'annuler' => 'Annuler',
-
-       // B
-       'bouton_supprimer' => 'Supprimer',
-
-       // D
-       'deja_modifie' => 'Déjà modifié',
-       'donnees_mal_formatees' => 'Données mal formatées',
-
-       // E
-       'editer' => 'Éditer',
-       'editer_@type@_@id@' => 'Éditer @type@ @id@ en entier',
-       'editer_tout' => 'Éditer tout',
-       'effets' => 'Effets',
-       'explication_exec_autorise' => 'Pages autorisées à la modification
-        (?exec=...) : (, pour séparer les exec - * pour toutes).',
-       'explication_introduction_article' => 'L’introduction d’un article affiche le descriptif de l’article,
-    sinon affiche ses 600 premiers caractères (chapeau puis texte).',
-       'explication_reduire_logo' => 'Réduire le logo s’il dépasse
-        la taille maximale indiquée en pixels. Exemple : 100. (0 = jamais)',
-
-       // I
-       'info_experimental' => 'Expérimental',
-
-       // L
-       'label_activer_barre_typo' => 'Activer la barre typographique dans les crayons ?',
-       'label_activer_crayons_prive' => 'Activer crayons pour la partie privée.',
-       'label_barre_typo' => 'Barre typographique',
-       'label_clickhide' => 'Un clic en-dehors masque les crayons',
-       'label_effets' => 'Choix des effets',
-       'label_espaceprive' => 'Crayons dans le privé ?',
-       'label_exec_autorise' => 'Pages autorisées',
-       'label_filet' => 'Filet',
-       'label_message' => 'Obtenir un message',
-       'label_msg_abandon' => 'Sur abandon',
-       'label_msg_no_change' => 'Si pas de changement',
-       'label_reduire_logo' => 'Réduire les logos',
-       'label_upload_document' => 'Autoriser l’ajout de documents par glisser/déposer sur le crayon article.texte',
-       'label_yellow_fade' => 'Fade',
-       'legend_controleur_fichier_remplacer' => 'Remplacer ce document "@extension@"',
-       'legend_controleur_hyperlien' => 'Hyperlien',
-       'legend_controleur_logo' => 'Choisir un logo :',
-       'legend_controleur_logo_remplacer' => 'Remplacer ce logo',
-       'legend_controleur_qui' => 'Qui ?',
-       'legend_controleur_vignette' => 'Choisir une vignette :',
-       'legend_controleur_vignette_remplacer' => 'Remplacer cette vignette',
-       'legend_documents' => 'Upload de documents',
-       'legend_editer_prive' => 'Éditer l’espace privé (expérimental)',
-       'legend_introduction_article' => 'Texte introductif de l’article',
-       'legend_introduction_rubrique' => 'Texte introductif de la rubrique',
-
-       // M
-       'message_image_obligatoire' => 'Il faut choisir une image',
-       'messages' => 'Messages',
-       'modifie_par_ailleurs' => 'Modifié par ailleurs',
-
-       // N
-       'non_autorise' => 'Non autorisé',
-       'non_implemente' => 'Non implémenté',
-
-       // P
-       'pas_de_modification' => 'Pas de modification',
-       'pas_de_valeur' => 'Pas de valeur',
-
-       // S
-       'sauvegarder' => 'Sauvegarder les modifications ?',
-       'svp_copier_coller' => 'Désolé, copiez/collez vos changements et recommencez',
-
-       // T
-       'titre_config_crayons' => 'Configurer les crayons',
-       'titre_crayons' => 'Crayons',
-
-       // U
-       'update_impossible' => 'La mise à jour a échoué.',
-
-       // V
-       'veuillez_patienter' => 'Veuillez patienter...'
-);
diff --git a/www/plugins/crayons/lang/crayons_fr_tu.php b/www/plugins/crayons/lang/crayons_fr_tu.php
deleted file mode 100644 (file)
index 93cf39f..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activation_barre_impossible' => 'Un autre plugin interdit l’usage du porte-plume dans l’espace public.',
-       'annuler' => 'Annuler',
-
-       // B
-       'bouton_supprimer' => 'Supprimer',
-
-       // D
-       'deja_modifie' => 'Déjà modifié',
-       'donnees_mal_formatees' => 'Données mal formatées',
-
-       // E
-       'editer' => 'Éditer',
-       'editer_@type@_@id@' => 'Éditer @type@ @id@ en entier',
-       'editer_tout' => 'Éditer tout',
-       'effets' => 'Effets',
-       'explication_exec_autorise' => 'Pages autorisées à la modification
-  (?exec=...) : (, pour séparer les exec - * pour toutes).', # MODIF
-       'explication_introduction_article' => 'L’introduction d’un article affiche le descriptif de l’article, sinon affiche ses 600 premiers caractères (chapeau puis texte).', # MODIF
-       'explication_reduire_logo' => 'Réduire le logo s’il dépasse la taille maximale indiquée en pixels. Exemple : 100. (0 = jamais)', # MODIF
-
-       // I
-       'info_experimental' => 'Expérimental',
-
-       // L
-       'label_activer_barre_typo' => 'Activer la barre typographique dans les crayons ?',
-       'label_activer_crayons_prive' => 'Activer crayons pour la partie privée.',
-       'label_barre_typo' => 'Barre typographique',
-       'label_clickhide' => 'Un clic en-dehors masque les crayons',
-       'label_effets' => 'Choix des effets',
-       'label_espaceprive' => 'Crayons dans le privé ?',
-       'label_exec_autorise' => 'Pages autorisées',
-       'label_filet' => 'Filet',
-       'label_message' => 'Obtenir un message',
-       'label_msg_abandon' => 'Sur abandon',
-       'label_msg_no_change' => 'Si pas de changement',
-       'label_reduire_logo' => 'Réduire les logos',
-       'label_upload_document' => 'Autoriser l’ajout de documents par glisser/déposer sur le crayon article.texte',
-       'label_yellow_fade' => 'Fade',
-       'legend_controleur_fichier_remplacer' => 'Remplacer ce document "@extension@"',
-       'legend_controleur_hyperlien' => 'Hyperlien',
-       'legend_controleur_logo' => 'Choisir un logo :',
-       'legend_controleur_logo_remplacer' => 'Remplacer ce logo',
-       'legend_controleur_qui' => 'Qui ?',
-       'legend_controleur_vignette' => 'Choisir une vignette :',
-       'legend_controleur_vignette_remplacer' => 'Remplacer cette vignette',
-       'legend_documents' => 'Upload de documents',
-       'legend_editer_prive' => 'Éditer l’espace privé (expérimental)',
-       'legend_introduction_article' => 'Texte introductif de l’article',
-
-       // M
-       'message_image_obligatoire' => 'Il faut choisir une image',
-       'messages' => 'Messages',
-       'modifie_par_ailleurs' => 'Modifié par ailleurs',
-
-       // N
-       'non_autorise' => 'Non autorisé',
-       'non_implemente' => 'Non implémenté',
-
-       // P
-       'pas_de_modification' => 'Pas de modification',
-       'pas_de_valeur' => 'Pas de valeur',
-
-       // S
-       'sauvegarder' => 'Sauvegarder les modifications ?',
-       'svp_copier_coller' => 'Désolé, copie/colle tes changements et recommence',
-
-       // T
-       'titre_config_crayons' => 'Configurer les crayons',
-       'titre_crayons' => 'Crayons',
-
-       // U
-       'update_impossible' => 'La mise à jour a échoué.',
-
-       // V
-       'veuillez_patienter' => 'Patiente stp...'
-);
diff --git a/www/plugins/crayons/lang/crayons_gl.php b/www/plugins/crayons/lang/crayons_gl.php
deleted file mode 100644 (file)
index 60eb1f0..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=gl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Anular',
-
-       // D
-       'deja_modifie' => 'Xa modificado',
-       'donnees_mal_formatees' => 'Datos mal formatados',
-
-       // E
-       'editer' => 'Editar',
-       'editer_@type@_@id@' => 'Editar @type@ @id@ por completo',
-       'editer_tout' => 'Editar todo',
-
-       // M
-       'modifie_par_ailleurs' => 'Modificado por outros',
-
-       // N
-       'non_autorise' => 'Non autorizado',
-       'non_implemente' => 'Non implementado',
-
-       // P
-       'pas_de_modification' => 'Non hai modificacións',
-       'pas_de_valeur' => 'Ningún valor',
-
-       // S
-       'sauvegarder' => 'Gardar as modificacións ?',
-       'svp_copier_coller' => 'Desculpe, copie/pegue os seus cambios e volva comezar',
-
-       // U
-       'update_impossible' => 'Fallou a actualización',
-
-       // V
-       'veuillez_patienter' => 'Teña paciencia ...'
-);
diff --git a/www/plugins/crayons/lang/crayons_it.php b/www/plugins/crayons/lang/crayons_it.php
deleted file mode 100644 (file)
index 2e74f9b..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=it
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activation_barre_impossible' => 'Un altro plugin impedisce l’utilizzo di porte-plume nella spazio pubblico.',
-       'annuler' => 'Annulla',
-
-       // B
-       'bouton_supprimer' => 'Elimina',
-
-       // D
-       'deja_modifie' => 'Già modificato',
-       'donnees_mal_formatees' => 'Dati mal formattati',
-
-       // E
-       'editer' => 'Modifica',
-       'editer_@type@_@id@' => 'Modifica @type@ @id@ in intero',
-       'editer_tout' => 'Modifica tutto',
-       'effets' => 'Effetti',
-       'explication_exec_autorise' => 'Pagine autorizzate per la modifica
-  (?exec=...) : (, per separare gli exec - * per tutti).', # MODIF
-       'explication_introduction_article' => 'L’introduzione di un articolo mostra la descrizione di un articolo, altrimenti mostra i suoi primi 600 caratteri (cappello più testo)', # MODIF
-       'explication_reduire_logo' => 'Riduci il logo se supera
-  la dimensione massima indicata in pixel. Esempio: 100. (0 = mai)', # MODIF
-
-       // L
-       'label_activer_barre_typo' => 'Attivare la barra tipografica per i pennarelli?',
-       'label_activer_crayons_prive' => 'Attivare i pennarelli per la parte redazionale.',
-       'label_barre_typo' => 'Barra tipografica',
-       'label_clickhide' => 'Un click fuori nasconde i pennarelli',
-       'label_effets' => 'Scelta degli effetti',
-       'label_espaceprive' => 'Pennarelli in redazione?',
-       'label_exec_autorise' => 'Pagine autorizzate',
-       'label_filet' => 'Bordo',
-       'label_message' => 'Ottieni un messaggio',
-       'label_msg_abandon' => 'Sull’abbandono',
-       'label_msg_no_change' => 'Se non c’è nessuna modifica',
-       'label_reduire_logo' => 'Riduci i logo',
-       'label_yellow_fade' => 'Fade',
-       'legend_controleur_logo' => 'Scegli un logo:',
-       'legend_controleur_vignette' => 'Scegli una miniatura:',
-       'legend_editer_prive' => 'Modifica lo spazio redazionale (sperimentale)',
-       'legend_introduction_article' => 'Testo introduttivo dell’articolo',
-
-       // M
-       'message_image_obligatoire' => 'Devi scegliere un’immagine',
-       'messages' => 'Messaggi',
-       'modifie_par_ailleurs' => 'Modificato altrove',
-
-       // N
-       'non_autorise' => 'Non autorizzato',
-       'non_implemente' => 'Non implementato',
-
-       // P
-       'pas_de_modification' => 'Nessuna modifica',
-       'pas_de_valeur' => 'Nessun valore',
-
-       // S
-       'sauvegarder' => 'Registrare le modifiche?',
-       'svp_copier_coller' => 'Spiacente, copia/incolla le modifiche e comincia di nuovo',
-
-       // T
-       'titre_config_crayons' => 'Configura i pennarelli',
-       'titre_crayons' => 'Pennarelli',
-
-       // U
-       'update_impossible' => 'L’aggiornamento è fallito.',
-
-       // V
-       'veuillez_patienter' => 'Attendere...'
-);
diff --git a/www/plugins/crayons/lang/crayons_it_fem.php b/www/plugins/crayons/lang/crayons_it_fem.php
deleted file mode 100644 (file)
index bb64280..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=it_fem
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Annulla',
-
-       // D
-       'deja_modifie' => 'Già modificato',
-       'donnees_mal_formatees' => 'Dati mal formattati',
-
-       // E
-       'editer' => 'Modifica',
-       'editer_@type@_@id@' => 'Modifica @type@ @id@ in intero',
-       'editer_tout' => 'Modifica tutto',
-
-       // M
-       'modifie_par_ailleurs' => 'Modificato altrove',
-
-       // N
-       'non_autorise' => 'Non autorizzato',
-       'non_implemente' => 'Non implementato',
-
-       // P
-       'pas_de_modification' => 'Nessuna modifica',
-       'pas_de_valeur' => 'Nessun valore',
-
-       // S
-       'sauvegarder' => 'Registrare le modifiche?',
-       'svp_copier_coller' => 'Spiacente, copia/incolla le modifiche e comincia di nuovo',
-
-       // V
-       'veuillez_patienter' => 'Attendere...'
-);
diff --git a/www/plugins/crayons/lang/crayons_km.php b/www/plugins/crayons/lang/crayons_km.php
deleted file mode 100644 (file)
index ab6557a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=km
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'បោះបង់',
-
-       // E
-       'editer' => 'កែប្រែ',
-       'editer_tout' => 'កែប្រែ ទាំងអស់',
-
-       // U
-       'update_impossible' => 'ការបន្ទាន់សម័យ បានបរាជ័យ។',
-
-       // V
-       'veuillez_patienter' => 'កំពុងស្វែងរក ...'
-);
diff --git a/www/plugins/crayons/lang/crayons_lb.php b/www/plugins/crayons/lang/crayons_lb.php
deleted file mode 100644 (file)
index eebe4de..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=lb
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Annuléieren',
-
-       // D
-       'deja_modifie' => 'Schons geännert',
-       'donnees_mal_formatees' => 'Daten schlecht formatéiert',
-
-       // E
-       'editer' => 'Änneren',
-       'editer_@type@_@id@' => '@type@ @id@ ganz änneren',
-       'editer_tout' => 'Alles änneren',
-
-       // M
-       'modifie_par_ailleurs' => 'Anerwärts geännert',
-
-       // N
-       'non_autorise' => 'Nët erlabt',
-       'non_implemente' => 'Nët agericht',
-
-       // P
-       'pas_de_modification' => 'Kéng Ännerung',
-       'pas_de_valeur' => 'Kéng Valeur',
-
-       // S
-       'sauvegarder' => 'Ännerunge späicheren?',
-       'svp_copier_coller' => 'Deet ons leet, kopéiert/pächt är Ännerungen a fänkt nei un',
-
-       // V
-       'veuillez_patienter' => 'Waart weg...'
-);
diff --git a/www/plugins/crayons/lang/crayons_nl.php b/www/plugins/crayons/lang/crayons_nl.php
deleted file mode 100644 (file)
index b2b8b3a..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => 'Geen primaire sleutel!',
-       'activation_barre_impossible' => 'Een andere plugin verbiedt het gebruik van De Penhouder in de publieke site.',
-       'annuler' => 'Annuleren',
-
-       // B
-       'bouton_supprimer' => 'Verwijderen',
-
-       // D
-       'deja_modifie' => 'Reeds gewijzigd',
-       'donnees_mal_formatees' => 'Slecht geformatteerde gegevens',
-
-       // E
-       'editer' => 'Uitgeven',
-       'editer_@type@_@id@' => '@type@ @id@ in geheel uitgeven',
-       'editer_tout' => 'Alles uitgeven',
-       'effets' => 'Gevolgen',
-       'explication_exec_autorise' => 'Pagina’s die mogen worden gewijzigd
-  (?exec=...) : (, om de exec’s te scheiden - * voor alle).',
-       'explication_introduction_article' => 'De introductie toont de beschrijving  van een artikel, anders geeft het de eerste 600 tekens weer (kop en tekst).',
-       'explication_reduire_logo' => 'Verklein het logo als het groter is dan 
-   de maximale aantal pixels. Voorbeeld: 100. (0 = nooit)',
-
-       // I
-       'info_experimental' => 'Experimenteel',
-
-       // L
-       'label_activer_barre_typo' => 'De typografische knoppenbalk in De Krijtjes activeren?',
-       'label_activer_crayons_prive' => 'Schakel Krijtjes in voor het private deel.',
-       'label_barre_typo' => 'Typografische knoppenbalk',
-       'label_clickhide' => 'Een klik erbuiten verbergt Krijtjes',
-       'label_effets' => 'Effectenkeuze',
-       'label_espaceprive' => 'Krijtjes in het private deel?',
-       'label_exec_autorise' => 'Toegestane bladzijdes',
-       'label_filet' => 'Net',
-       'label_message' => 'Een bericht krijgen',
-       'label_msg_abandon' => 'Bij het verlaten',
-       'label_msg_no_change' => 'Indien geen verandering',
-       'label_reduire_logo' => 'Logo’s verkleinen',
-       'label_upload_document' => 'Bijvoegen van documenten mogelijk maken via slepen en plakken op het Krijtje',
-       'label_yellow_fade' => 'Vervagen',
-       'legend_controleur_fichier_remplacer' => 'Document "@extension@" vervangen',
-       'legend_controleur_hyperlien' => 'Hyperlink',
-       'legend_controleur_logo' => 'Een logo kiezen:',
-       'legend_controleur_logo_remplacer' => 'Vervang dit logo',
-       'legend_controleur_qui' => 'Wat?',
-       'legend_controleur_vignette' => 'Selecteer een miniatuur :',
-       'legend_controleur_vignette_remplacer' => 'Vervang deze tag',
-       'legend_documents' => 'Upload van documenten',
-       'legend_editer_prive' => 'Bewerk het private deel (experimenteel)',
-       'legend_introduction_article' => 'Aanhef van artikel',
-       'legend_introduction_rubrique' => 'Introductietekst van de rubriek',
-
-       // M
-       'message_image_obligatoire' => 'U moet een afbeelding kiezen',
-       'messages' => 'Berichten',
-       'modifie_par_ailleurs' => 'Voorts gewijzigd',
-
-       // N
-       'non_autorise' => 'Niet toegelaten',
-       'non_implemente' => 'Niet geïmplementeerd',
-
-       // P
-       'pas_de_modification' => 'Geen wijziging',
-       'pas_de_valeur' => 'Geen waarde',
-
-       // S
-       'sauvegarder' => 'De wijzigingen opslaan?',
-       'svp_copier_coller' => 'Sorry, kopieer/plak uw wijzigingen en begin opnieuw',
-
-       // T
-       'titre_config_crayons' => 'Krijtjes configureren',
-       'titre_crayons' => 'Podloden',
-
-       // U
-       'update_impossible' => 'De update is niet geslaagd.',
-
-       // V
-       'veuillez_patienter' => 'Een ogenblik geduld…'
-);
diff --git a/www/plugins/crayons/lang/crayons_oc_lnc.php b/www/plugins/crayons/lang/crayons_oc_lnc.php
deleted file mode 100644 (file)
index 0e64e80..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=oc_lnc
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Anullar',
-
-       // D
-       'deja_modifie' => 'Ja modificat',
-       'donnees_mal_formatees' => 'Donadas mal formatadas',
-
-       // E
-       'editer' => 'Editar',
-       'editer_@type@_@id@' => 'Editar @type@ @id@ en entièr',
-       'editer_tout' => 'Tot editar',
-
-       // M
-       'modifie_par_ailleurs' => 'Modificat endacòm mai',
-
-       // N
-       'non_autorise' => 'Non autorizat',
-       'non_implemente' => 'Non implementat',
-
-       // P
-       'pas_de_modification' => 'Pas de modificacion',
-       'pas_de_valeur' => 'Pas de valor',
-
-       // S
-       'sauvegarder' => 'Registrar las modificacions ?',
-       'svp_copier_coller' => 'Desolats, copiatz/empegatz vòstres cambiaments e tornatz començar',
-
-       // V
-       'veuillez_patienter' => 'Mercés d’esperar...'
-);
diff --git a/www/plugins/crayons/lang/crayons_oc_ni_mis.php b/www/plugins/crayons/lang/crayons_oc_ni_mis.php
deleted file mode 100644 (file)
index 9264d88..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=oc_ni_mis
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => 'Mìnga de clau primari !',
-       'activation_barre_impossible' => 'Un autre plugin prouhibì l’usage dóu pouòrta-pluma en l’espaci pùblicou.',
-       'annuler' => 'Anulà',
-
-       // B
-       'bouton_supprimer' => 'Suprimà',
-
-       // D
-       'deja_modifie' => 'Jà moudificat',
-       'donnees_mal_formatees' => 'Dounada mau fourmatadi',
-
-       // E
-       'editer' => 'Edità',
-       'editer_@type@_@id@' => 'Edità @type@ @id@ en entié',
-       'editer_tout' => 'Edità tout',
-       'effets' => 'Efet',
-       'explication_exec_autorise' => 'Pàgina autourisadi a la moudificacioun
-        (?exec=...) : (, da separà lu exec - * per touti).',
-       'explication_introduction_article' => 'L’introuductioun d’un article aficha lou descritiéu de l’article,
-    senoun aficha lu siéu 600 premié caracter (capéu pi tèstou).',
-       'explication_reduire_logo' => 'Redurre lou lògou s’escoumpassa
-        la talha massimala endicada en pixel. Per isemple : 100. (0 = jamai)',
-
-       // I
-       'info_experimental' => 'Esperimental',
-
-       // L
-       'label_activer_barre_typo' => 'Ativà la barra tipougràfica en lu creioun ?',
-       'label_activer_crayons_prive' => 'Ativà creioun per la partida privada.',
-       'label_barre_typo' => 'Barra tipougràfica',
-       'label_clickhide' => 'Un clic endefouòra escounde lu creioun',
-       'label_effets' => 'Chausida dei efet',
-       'label_espaceprive' => 'Creioun en lou privat ?',
-       'label_exec_autorise' => 'Pàgina autourisadi',
-       'label_filet' => 'Ret',
-       'label_message' => 'Outenì un message',
-       'label_msg_abandon' => 'Sus abandoun',
-       'label_msg_no_change' => 'Se mìnga de cambiamen',
-       'label_reduire_logo' => 'Redurre lu lògou',
-       'label_upload_document' => 'Autourisà l’ajoutamen de doucument da resquilhà/depousà soubre lou creioun article.texte',
-       'label_yellow_fade' => 'Fade',
-       'legend_controleur_fichier_remplacer' => 'Remplaçà aquestou doucumen "@extension@"',
-       'legend_controleur_hyperlien' => 'Iperestac',
-       'legend_controleur_logo' => 'Chausì un logou :',
-       'legend_controleur_logo_remplacer' => 'Remplaçà aquestou lògou',
-       'legend_controleur_qui' => 'Qu ?',
-       'legend_controleur_vignette' => 'Chausì una vigneta :',
-       'legend_controleur_vignette_remplacer' => 'Remplaçà aquesta vigneta',
-       'legend_documents' => 'Televersagiamen de doucumen',
-       'legend_editer_prive' => 'Edità l’espaci privat (esperimental)',
-       'legend_introduction_article' => 'Tèstou introudutiéu de l’article',
-       'legend_introduction_rubrique' => 'Tèstou introudutiéu de la rùbrica',
-
-       // M
-       'message_image_obligatoire' => 'Cau chausì una image',
-       'messages' => 'Message',
-       'modifie_par_ailleurs' => 'Moudificat per autre',
-
-       // N
-       'non_autorise' => 'Noun autourisat',
-       'non_implemente' => 'Noun impletut',
-
-       // P
-       'pas_de_modification' => 'Mìnga moudificacioun',
-       'pas_de_valeur' => 'Mìnga valour',
-
-       // S
-       'sauvegarder' => 'Sauvagarda li moudificacioun ?',
-       'svp_copier_coller' => 'Achident, coupiàs/coulàs lu vouòstre cambiamen e recoumençàs',
-
-       // T
-       'titre_config_crayons' => 'Counfigurà lu creioun',
-       'titre_crayons' => 'Creioun',
-
-       // U
-       'update_impossible' => 'La messa a jou a souhit.',
-
-       // V
-       'veuillez_patienter' => 'Vourguès aspera...'
-);
diff --git a/www/plugins/crayons/lang/crayons_pt_br.php b/www/plugins/crayons/lang/crayons_pt_br.php
deleted file mode 100644 (file)
index 97c5122..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => 'Sem chave primária!',
-       'activation_barre_impossible' => 'Um outro plugin impede o uso da barra de formatação na área pública.',
-       'annuler' => 'Cancelar',
-
-       // B
-       'bouton_supprimer' => 'Excluir',
-
-       // D
-       'deja_modifie' => 'Já alterado',
-       'donnees_mal_formatees' => 'Dados mal formatados',
-
-       // E
-       'editer' => 'Editar',
-       'editer_@type@_@id@' => 'Editar @type@ @id@ completamente',
-       'editer_tout' => 'Editar tudo',
-       'effets' => 'Efeitos',
-       'explication_exec_autorise' => 'Páginas liberadas para modificação
-               (?exec=...) : (, para separar os exec).',
-       'explication_introduction_article' => 'A introdução de uma matéria exibe a descrição da matéria; se não existir, exibe os seus primeiros 600 caracteres (introdução mais texto).',
-       'explication_reduire_logo' => 'Reduzir o logo se ultrapassar o tamanho máximo indicado em pixels. Exemplo: 100.  (0 = jamais)',
-
-       // I
-       'info_experimental' => 'Experimental',
-
-       // L
-       'label_activer_barre_typo' => 'Ativar a barra de formatação nos crayons?',
-       'label_activer_crayons_prive' => 'Ativar crayons na área restrita.',
-       'label_barre_typo' => 'Barra de formatação',
-       'label_clickhide' => 'Um clique fora esconde os crayons',
-       'label_effets' => 'Escolha dos efeitos',
-       'label_espaceprive' => 'Crayons na área restrita?',
-       'label_exec_autorise' => 'Páginas liberadas',
-       'label_filet' => 'Linha',
-       'label_message' => 'Exibir uma mensagem',
-       'label_msg_abandon' => 'No cancelamento',
-       'label_msg_no_change' => 'Se não houve alteração',
-       'label_reduire_logo' => 'Reduzir os logos',
-       'label_upload_document' => 'Permitir a anexação de documentos por arrastar/soltar no crayon article.texte',
-       'label_yellow_fade' => 'Fade',
-       'legend_controleur_fichier_remplacer' => 'Substituir este documento "@extension@"',
-       'legend_controleur_hyperlien' => 'Hyperlink',
-       'legend_controleur_logo' => 'Escolher um logo:',
-       'legend_controleur_logo_remplacer' => 'substituir este logo',
-       'legend_controleur_qui' => 'Quem?',
-       'legend_controleur_vignette' => 'Escolher uma miniatura:',
-       'legend_controleur_vignette_remplacer' => 'Substituir esta miniatura',
-       'legend_documents' => 'Upload de documentos',
-       'legend_editer_prive' => 'Editar a área restrita (experimental)',
-       'legend_introduction_article' => 'Texto introdutório da matéria',
-       'legend_introduction_rubrique' => 'Texto introdutório da seção',
-
-       // M
-       'message_image_obligatoire' => 'É necessário escolher uma imagem',
-       'messages' => 'Mensages',
-       'modifie_par_ailleurs' => 'Alterado em outro lugar',
-
-       // N
-       'non_autorise' => 'Não autorizado',
-       'non_implemente' => 'Não implementado',
-
-       // P
-       'pas_de_modification' => 'Sem modificação',
-       'pas_de_valeur' => 'Sem valor',
-
-       // S
-       'sauvegarder' => 'Fazer cópia de segurança das alterações?',
-       'svp_copier_coller' => 'Desculpe, copie/cole as suas alterações e recomece',
-
-       // T
-       'titre_config_crayons' => 'Configurar os crayons',
-       'titre_crayons' => 'Crayons',
-
-       // U
-       'update_impossible' => 'A atualização falhou.',
-
-       // V
-       'veuillez_patienter' => 'Aguarde, por favor...'
-);
diff --git a/www/plugins/crayons/lang/crayons_ro.php b/www/plugins/crayons/lang/crayons_ro.php
deleted file mode 100644 (file)
index 363b1a2..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=ro
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Anulati',
-
-       // D
-       'deja_modifie' => 'Deja modificat',
-       'donnees_mal_formatees' => 'Date rau formatate',
-
-       // E
-       'editer' => 'Editati',
-       'editer_@type@_@id@' => 'Editati @type@ @id@ in intregime',
-       'editer_tout' => 'Editati totul',
-
-       // M
-       'modifie_par_ailleurs' => 'Modificat de altfel',
-
-       // N
-       'non_autorise' => 'Neautorizat',
-       'non_implemente' => 'Neimplementat',
-
-       // P
-       'pas_de_modification' => 'Fara modificari',
-       'pas_de_valeur' => 'Fara valoare',
-
-       // S
-       'sauvegarder' => 'Salvati modificarile ?',
-       'svp_copier_coller' => 'Ne pare rau, copiati/lipiti schimbarile dvs. si reincepeti',
-
-       // V
-       'veuillez_patienter' => 'Va rugam sa asteptati'
-);
diff --git a/www/plugins/crayons/lang/crayons_ru.php b/www/plugins/crayons/lang/crayons_ru.php
deleted file mode 100644 (file)
index 407bd00..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activation_barre_impossible' => 'Другой плагин не дает использовать porte-plume на сайте.',
-       'annuler' => 'Отмена',
-
-       // B
-       'bouton_supprimer' => 'Удалить',
-
-       // D
-       'deja_modifie' => 'Уже изменен',
-       'donnees_mal_formatees' => 'Неправильный формат запроса',
-
-       // E
-       'editer' => 'Редактировать',
-       'editer_@type@_@id@' => 'Редактировать @type@ @id@ полностью',
-       'editer_tout' => 'Редактировать полностью',
-       'effets' => 'Эффекты',
-       'explication_exec_autorise' => 'Страницы, на которых можно редактировать информацию   (?exec=...) : (, разделитель между страницами. * для всех страниц).', # MODIF
-       'explication_introduction_article' => 'Вводная статьи выводит информацию из поля "введение". Если оно пустое, то выводятся первые 600 символов текста статьи.',
-       'explication_reduire_logo' => 'Уменьшать логотипы, если их размер превышает  максимальный размер (в пикселях). Например: 100. (0 = никогда)',
-
-       // I
-       'info_experimental' => 'Экспериментальная опция',
-
-       // L
-       'label_activer_barre_typo' => 'Включить панель инструментов для плагина?',
-       'label_activer_crayons_prive' => 'Включить "Карандаш" в админке сайта',
-       'label_barre_typo' => 'Панель инструментов',
-       'label_clickhide' => 'Нажмите вне области редактирования, чтобы закрыть экран',
-       'label_effets' => 'Выбрать эффект',
-       'label_espaceprive' => 'Использовать "Карандаш" в админке сайта?',
-       'label_exec_autorise' => 'Использовать на страницах',
-       'label_filet' => 'Линия',
-       'label_message' => 'Показать сообщение',
-       'label_msg_abandon' => 'При отмене',
-       'label_msg_no_change' => 'Если не были сделаны изменения',
-       'label_reduire_logo' => 'Уменьшать логотипы',
-       'label_upload_document' => 'Разрешить добавлять документы перетаскиванием их поле "текст" статьи (article.texte)',
-       'label_yellow_fade' => 'Тень',
-       'legend_controleur_hyperlien' => 'Ссылка',
-       'legend_controleur_logo' => 'Выбрать логотип:',
-       'legend_controleur_logo_remplacer' => 'Заменить логотип',
-       'legend_controleur_qui' => 'Кто?',
-       'legend_controleur_vignette' => 'Выбрать миниатюру:',
-       'legend_controleur_vignette_remplacer' => 'Заменить миниатюру',
-       'legend_documents' => 'Загрузить документ',
-       'legend_editer_prive' => 'Использовать в админке сайта',
-       'legend_introduction_article' => 'Вводный текст для статьи',
-
-       // M
-       'message_image_obligatoire' => 'Вам необходимо выбрать сообщение',
-       'messages' => 'Сообщения',
-       'modifie_par_ailleurs' => 'Был изменен в другом месте в то же время',
-
-       // N
-       'non_autorise' => 'Нет доступа',
-       'non_implemente' => 'Не выполнено',
-
-       // P
-       'pas_de_modification' => 'Без изменений',
-       'pas_de_valeur' => 'Не указано значение для этого id',
-
-       // S
-       'sauvegarder' => 'Сохранить изменения?',
-       'svp_copier_coller' => 'Сохраните сделанные изменения в другом месте и попробуйте заново',
-
-       // T
-       'titre_config_crayons' => 'Настроить "Карандаш"',
-       'titre_crayons' => 'Карандаш',
-
-       // U
-       'update_impossible' => 'Не удалось обновить.',
-
-       // V
-       'veuillez_patienter' => 'Идет поиск ...'
-);
diff --git a/www/plugins/crayons/lang/crayons_sk.php b/www/plugins/crayons/lang/crayons_sk.php
deleted file mode 100644 (file)
index b671f99..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'absence_cle_primaire' => 'Bez primárneho kľúča!',
-       'activation_barre_impossible' => 'Iný zásuvný modul bráni použitiu porte-plume na verejne prístupnej stránke.',
-       'annuler' => 'Zrušiť',
-
-       // B
-       'bouton_supprimer' => 'Odstrániť',
-
-       // D
-       'deja_modifie' => 'Už upravený',
-       'donnees_mal_formatees' => 'Neplatný formát požiadavky',
-
-       // E
-       'editer' => 'Upraviť',
-       'editer_@type@_@id@' => 'Upraviť celý @type@ @id@',
-       'editer_tout' => 'Upravovať ako celok',
-       'effets' => 'Efekty',
-       'explication_exec_autorise' => 'Stránky, na ktorých je povolené vykonávať zmeny
-  (?exec=...): (, na oddelenie viacerých stránok, exec -* pre všetky).',
-       'explication_introduction_article' => 'Úvod článku zobrazí opis článku, ak nejaký existuje, inak sa zobrazí prvých 600 znakov (perex, potom text).',
-       'explication_reduire_logo' => 'Zmenšiť veľkosť loga, ak presahuje
-  maximálnu veľkosť zadanú v pixeloch. Príklad: 100. (0 = nezmenšovať).',
-
-       // I
-       'info_experimental' => 'Experimentálny',
-
-       // L
-       'label_activer_barre_typo' => 'Aktivovať klávesový panel pre "Farbičky"?',
-       'label_activer_crayons_prive' => 'Aktivovať "Farbičky" pre súkromnú zónu.',
-       'label_barre_typo' => 'Klávesový panel',
-       'label_clickhide' => 'Klikom mimo oblasti farbičky zatvoríte',
-       'label_effets' => 'Výber efektov',
-       'label_espaceprive' => 'Používať "farbičky" v súkromnej zóne?',
-       'label_exec_autorise' => 'Stránky povolené',
-       'label_filet' => 'Čiara',
-       'label_message' => 'Zobraziť správu',
-       'label_msg_abandon' => 'Pri zrušení',
-       'label_msg_no_change' => 'Ak sa neurobí žiadna zmena',
-       'label_reduire_logo' => 'Zmenšiť logá',
-       'label_upload_document' => 'Povoliť pridávanie súborov pomocou farbičky article.texte',
-       'label_yellow_fade' => 'Tieň',
-       'legend_controleur_fichier_remplacer' => 'Premiestniť tento dokument "@extension@"',
-       'legend_controleur_hyperlien' => 'Hypertextový odkaz',
-       'legend_controleur_logo' => 'Vyberte logo:',
-       'legend_controleur_logo_remplacer' => 'Nahradiť toto logo',
-       'legend_controleur_qui' => 'Kto?',
-       'legend_controleur_vignette' => 'Vyberte miniatúru:',
-       'legend_controleur_vignette_remplacer' => 'Nahradiť túto miniatúru',
-       'legend_documents' => 'Nahrávanie súborov',
-       'legend_editer_prive' => 'Použiť v súkromnej zóne (experimentálne)',
-       'legend_introduction_article' => 'Úvodný text článku',
-       'legend_introduction_rubrique' => 'Úvodný text rubriky',
-
-       // M
-       'message_image_obligatoire' => 'Musíte si vybrať obrázok',
-       'messages' => 'Správy',
-       'modifie_par_ailleurs' => 'Medzitým bol zmenený inde',
-
-       // N
-       'non_autorise' => 'Nepovolené',
-       'non_implemente' => 'Nezavedené',
-
-       // P
-       'pas_de_modification' => 'Žiadna zmena',
-       'pas_de_valeur' => 'Toto ID nemá žiadnu hodnotu',
-
-       // S
-       'sauvegarder' => 'Uložiť zmeny?',
-       'svp_copier_coller' => 'Prepáčte, skopírujte/prilepte svoje zmeny a skúste znova',
-
-       // T
-       'titre_config_crayons' => 'Nastaviť "Farbičky"',
-       'titre_crayons' => 'Farbičky',
-
-       // U
-       'update_impossible' => 'Aktualizácia neprebehla úspešne.',
-
-       // V
-       'veuillez_patienter' => 'Vyhľadáva sa...'
-);
diff --git a/www/plugins/crayons/lang/crayons_sv.php b/www/plugins/crayons/lang/crayons_sv.php
deleted file mode 100644 (file)
index a8842ba..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=sv
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'Ångra',
-
-       // D
-       'deja_modifie' => 'Redan ändrat',
-       'donnees_mal_formatees' => 'Felaktigt format på data',
-
-       // E
-       'editer' => 'Editera',
-       'editer_@type@_@id@' => 'Editera hela @type@ @id@',
-       'editer_tout' => 'Editera allt',
-
-       // M
-       'modifie_par_ailleurs' => 'Någon annan har förändrat artikeln sedan du öppnade den',
-
-       // N
-       'non_autorise' => 'Ej tillåtet',
-       'non_implemente' => 'Funktionen saknas',
-
-       // P
-       'pas_de_modification' => 'Ingen förändring',
-       'pas_de_valeur' => 'Inget värde',
-
-       // S
-       'sauvegarder' => 'Spara förändringarna?',
-       'svp_copier_coller' => 'Ledsen, kopiera/klistra in dina förändringar och försök igen',
-
-       // V
-       'veuillez_patienter' => 'Söker ...'
-);
diff --git a/www/plugins/crayons/lang/crayons_tr.php b/www/plugins/crayons/lang/crayons_tr.php
deleted file mode 100644 (file)
index 6882529..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=tr
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => 'İptal et',
-
-       // D
-       'deja_modifie' => 'Zaten değiştirilmiş',
-       'donnees_mal_formatees' => 'Kötü formatlanmış veriler',
-
-       // E
-       'editer' => 'Düzenle',
-       'editer_@type@_@id@' => '@type@ @id@ tümünü düzenle',
-       'editer_tout' => 'Hepsini düzenle',
-
-       // M
-       'modifie_par_ailleurs' => 'Başkaları tarafından değiştirilmiş',
-
-       // N
-       'non_autorise' => 'Yetkisiz',
-       'non_implemente' => 'Geliştirilmemiş',
-
-       // P
-       'pas_de_modification' => 'Değişiklik yok',
-       'pas_de_valeur' => 'Değersiz',
-
-       // S
-       'sauvegarder' => 'Değişiklikler kaydedilsin mi ?',
-       'svp_copier_coller' => 'Üzgünüm, değişikliklerinizi kesin/yapıştırın ve tekrar başlayın',
-
-       // V
-       'veuillez_patienter' => 'Lütfen sabrediniz...'
-);
diff --git a/www/plugins/crayons/lang/crayons_tw.php b/www/plugins/crayons/lang/crayons_tw.php
deleted file mode 100644 (file)
index e1e55c4..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=tw
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => '取消',
-
-       // D
-       'deja_modifie' => '已經修改過',
-       'donnees_mal_formatees' => '資料格式不正確',
-
-       // E
-       'editer' => '編輯',
-       'editer_@type@_@id@' => '完整編輯 @type@ @id@',
-       'editer_tout' => '編輯全部',
-
-       // M
-       'modifie_par_ailleurs' => '已經被修改過',
-
-       // N
-       'non_autorise' => '不被允許',
-       'non_implemente' => '尚未支援',
-
-       // P
-       'pas_de_modification' => '沒有修改過',
-       'pas_de_valeur' => '無指定值',
-
-       // S
-       'sauvegarder' => '儲存修改過的資料 ?',
-       'svp_copier_coller' => '對不起,我們建議您複製/貼上您的修改',
-
-       // V
-       'veuillez_patienter' => '請稍後...'
-);
diff --git a/www/plugins/crayons/lang/crayons_zh.php b/www/plugins/crayons/lang/crayons_zh.php
deleted file mode 100644 (file)
index 0fa3929..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=zh
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => '取消', # MODIF
-
-       // D
-       'deja_modifie' => '已经修改', # MODIF
-       'donnees_mal_formatees' => '数据格式化错误', # MODIF
-
-       // E
-       'editer' => '编辑', # MODIF
-       'editer_@type@_@id@' => '编辑@type@@id@所有内容', # MODIF
-       'editer_tout' => '编辑所有内容', # MODIF
-       'effets' => 'Effets', # NEW
-
-       // L
-       'label_activer_barre_typo' => 'Activer la barre typographique dans les crayons ?', # NEW
-       'label_activer_crayons_prive' => 'Activer crayons pour la partie privée.', # NEW
-       'label_barre_typo' => 'Barre typographique', # NEW
-       'label_clickhide' => 'Un clic en-dehors masque les crayons', # NEW
-       'label_effets' => 'Choix des effets', # NEW
-       'label_espaceprive' => 'Crayons dans le privé ?', # NEW
-       'label_exec_autorise' => 'Pages autorisées', # NEW
-       'label_filet' => 'Filet', # NEW
-       'label_message' => 'Obtenir un message', # NEW
-       'label_msg_abandon' => 'Sur abandon', # NEW
-       'label_msg_no_change' => 'Si pas de changement', # NEW
-       'label_reduire_logo' => 'Réduire les logos', # NEW
-       'label_yellow_fade' => 'Fade', # NEW
-       'legend_editer_prive' => 'Éditer l’espace privé (expérimental)',
-
-       // M
-       'messages' => 'Messages', # NEW
-       'modifie_par_ailleurs' => '被别人修改', # MODIF
-
-       // N
-       'non_autorise' => '没有授权', # MODIF
-       'non_implemente' => '为调试交机', # MODIF
-
-       // P
-       'pas_de_modification' => '无修改内容', # MODIF
-       'pas_de_valeur' => '没有值', # MODIF
-
-       // S
-       'sauvegarder' => '保存已修改的内容吗?', # MODIF
-       'svp_copier_coller' => '对不起,复制/粘贴已经改变的内容,并重新开始', # MODIF
-
-       // T
-       'titre_config_crayons' => 'Configurer les crayons', # NEW
-
-       // U
-       'update_impossible' => 'La mise à jour a échoué.', # NEW
-
-       // V
-       'veuillez_patienter' => '请稍后...' # MODIF
-);
diff --git a/www/plugins/crayons/lang/crayons_zh_tw.php b/www/plugins/crayons/lang/crayons_zh_tw.php
deleted file mode 100644 (file)
index e3f81bd..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/crayons?lang_cible=zh_tw
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'annuler' => '取消',
-
-       // D
-       'deja_modifie' => '已經修改過',
-       'donnees_mal_formatees' => '資料格式不正確',
-
-       // E
-       'editer' => '編輯',
-       'editer_@type@_@id@' => '完整編輯 @type@ @id@',
-       'editer_tout' => '編輯全部',
-
-       // M
-       'modifie_par_ailleurs' => '已經被修改過',
-
-       // N
-       'non_autorise' => '不被允許',
-       'non_implemente' => '尚未支援',
-
-       // P
-       'pas_de_modification' => '沒有修改過',
-       'pas_de_valeur' => '無指定值',
-
-       // S
-       'sauvegarder' => '儲存修改過的資料 ?',
-       'svp_copier_coller' => '對不起,我們建議您複製/貼上您的修改',
-
-       // V
-       'veuillez_patienter' => '請稍後...'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons.xml b/www/plugins/crayons/lang/paquet-crayons.xml
deleted file mode 100644 (file)
index 239cf31..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<traduction module="paquet-crayons" gestionnaire="salvatore" url="http://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/crayons/lang/" reference="fr">
-       <langue code="ar" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=ar" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="de" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=de" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="en" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=en" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="es" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=es" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="dani" lien="http://trad.spip.net/auteur/dani" />
-       </langue>
-       <langue code="fr" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=fr" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=fr_tu" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Cerf" lien="http://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="it" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=it" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="nl" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=nl" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="http://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="Suske" lien="http://trad.spip.net/auteur/suske" />
-       </langue>
-       <langue code="oc_ni_mis" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=oc_ni_mis" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="sylvain" lien="http://trad.spip.net/auteur/sylvain" />
-       </langue>
-       <langue code="pt_br" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=pt_br" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="http://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=ru" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Serge Markitanenko" lien="http://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=sk" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="http://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/crayons/lang/paquet-crayons_ar.php b/www/plugins/crayons/lang/paquet-crayons_ar.php
deleted file mode 100644 (file)
index 7dc9876..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'هذا الملحق، {{المتوافر للاصدار ١.٩.٢ فقط}} يقدم وظائف تحرير سريعة من في صفحات الموقع العمومي. للاستفادة منه يجب انشاء صفحات نموذجية متوافقة معه.
-
-كما في صفحات الاصدار 1.9.2 النموذجية يكفي ادخال علامة {#EDIT} في كل مكان نريد تحريره. مثلاً، ليصبح العنوان قابل للتحرير:
-_ <code><h1 class="#EDIT{titre} علامات اخرى">#TITRE</h1></code>.',
-       'crayons_nom' => 'القلم',
-       'crayons_slogan' => 'هذا الملحق، {{المتوافر للاصدار ١'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_de.php b/www/plugins/crayons/lang/paquet-crayons_de.php
deleted file mode 100644 (file)
index c9af9c6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Änderungen in öffentlichen Seiten direkt erledigen, Vorausetzung für Wikis mit SPIP',
-       'crayons_nom' => 'Der Stift',
-       'crayons_slogan' => 'Änderungen in öffentlichen Seiten direkt erledigen, Vorausetzung für Wikis mit SPIP'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_en.php b/www/plugins/crayons/lang/paquet-crayons_en.php
deleted file mode 100644 (file)
index 4156e9f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Quick editing from the public pages of the site.',
-       'crayons_nom' => 'Pencils',
-       'crayons_slogan' => 'Quick editing from the public pages of the site'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_es.php b/www/plugins/crayons/lang/paquet-crayons_es.php
deleted file mode 100644 (file)
index e7d96d2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Modificación rápida desde las páginas públicas del sitio.',
-       'crayons_nom' => 'Lápices',
-       'crayons_slogan' => 'Edición rápida desde las páginas publicas del sitio'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_fr.php b/www/plugins/crayons/lang/paquet-crayons_fr.php
deleted file mode 100644 (file)
index 63a7af1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/crayons/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Édition rapide depuis les pages publiques du site.',
-       'crayons_nom' => 'Crayons',
-       'crayons_slogan' => 'Édition rapide depuis les pages publiques du site'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_fr_tu.php b/www/plugins/crayons/lang/paquet-crayons_fr_tu.php
deleted file mode 100644 (file)
index 3212e44..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Édition rapide depuis les pages publiques du site.',
-       'crayons_nom' => 'Crayons',
-       'crayons_slogan' => 'Édition rapide depuis les pages publiques du site'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_it.php b/www/plugins/crayons/lang/paquet-crayons_it.php
deleted file mode 100644 (file)
index 0f893fd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=it
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Modifica rapida dalle pagine pubbliche del sito.',
-       'crayons_nom' => 'Pennarelli',
-       'crayons_slogan' => 'Modifica rapida dalle pagine pubbliche del sito'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_nl.php b/www/plugins/crayons/lang/paquet-crayons_nl.php
deleted file mode 100644 (file)
index ed26712..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Snelle aanpassing vanaf de publieke pagina’s van de site.',
-       'crayons_nom' => 'Krijtjes',
-       'crayons_slogan' => 'Snel bewerken vanaf de publieke pagina’s van de site.'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_oc_ni_mis.php b/www/plugins/crayons/lang/paquet-crayons_oc_ni_mis.php
deleted file mode 100644 (file)
index f7081ae..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=oc_ni_mis
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Edicioun rapide despì li pàgina publiqui dóu sit.',
-       'crayons_nom' => 'Creioun',
-       'crayons_slogan' => 'Edicioun rapide despì li pàgina publiqui dóu sit'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_pt_br.php b/www/plugins/crayons/lang/paquet-crayons_pt_br.php
deleted file mode 100644 (file)
index 66f6d46..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Edição rápida diretamente nas páginas públicas do site.',
-       'crayons_nom' => 'Crayons',
-       'crayons_slogan' => 'Edição rápida diretamente nas páginas públicas do site'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_ru.php b/www/plugins/crayons/lang/paquet-crayons_ru.php
deleted file mode 100644 (file)
index a14bd92..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Позволяет редактировать информацию прямо на сайте, не заходя в административную часть.',
-       'crayons_nom' => 'Карандаш (Crayons)',
-       'crayons_slogan' => 'Позволяет редактировать информацию прямо на сайте, не заходя в административную часть'
-);
diff --git a/www/plugins/crayons/lang/paquet-crayons_sk.php b/www/plugins/crayons/lang/paquet-crayons_sk.php
deleted file mode 100644 (file)
index a4f5c3e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de http://trad.spip.net/tradlang_module/paquet-crayons?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'crayons_description' => 'Rýchle úpravy z verejne prístupnej stránky.',
-       'crayons_nom' => 'Farbičky',
-       'crayons_slogan' => 'Rýchle úpravy z verejne prístupnej stránky.'
-);
diff --git a/www/plugins/crayons/lib/JavaScriptPacker/class.JavaScriptPacker.php b/www/plugins/crayons/lib/JavaScriptPacker/class.JavaScriptPacker.php
deleted file mode 100644 (file)
index ac82490..0000000
+++ /dev/null
@@ -1,773 +0,0 @@
-<?php
-/* 7 December 2006. version 1.0
- * 
- * This is the php version of the Dean Edwards JavaScript 's Packer,
- * Based on :
- * 
- * ParseMaster, version 1.0.2 (2005-08-19) Copyright 2005, Dean Edwards
- * a multi-pattern parser.
- * KNOWN BUG: erroneous behavior when using escapeChar with a replacement
- * value that is a function
- * 
- * packer, version 2.0.2 (2005-08-19) Copyright 2004-2005, Dean Edwards
- * 
- * License: http://creativecommons.org/licenses/LGPL/2.1/
- * 
- * Ported to PHP by Nicolas Martin.
- * modified by Mark Fabrizio Jr. to work with php 4 
- * 
- * ----------------------------------------------------------------------
- * 
- * examples of usage :
- * $myPacker = new JavaScriptPacker($script, 62, true, false);
- * $packed = $myPacker->pack();
- * 
- * or
- * 
- * $myPacker = new JavaScriptPacker($script, 'Normal', true, false);
- * $packed = $myPacker->pack();
- * 
- * or (default values)
- * 
- * $myPacker = new JavaScriptPacker($script);
- * $packed = $myPacker->pack();
- * 
- * 
- * params of the constructor :
- * $script:       the JavaScript to pack, string.
- * $encoding:     level of encoding, int or string :
- *                0,10,62,95 or 'None', 'Numeric', 'Normal', 'High ASCII'.
- *                default: 62.
- * $fastDecode:   include the fast decoder in the packed result, boolean.
- *                default : true.
- * $specialChars: if you are flagged your private and local variables
- *                in the script, boolean.
- *                default: false.
- * 
- * The pack() method return the compressed JavasScript, as a string.
- * 
- * see http://dean.edwards.name/packer/usage/ for more information.
- * 
- * Notes :
- * # [del]need PHP 5 . Tested with PHP 5.1.2[/del]
- *   this is a modified version for PHP 4
- * 
- * # The packed result may be different than with the Dean Edwards
- *   version, but with the same length. The reason is that the PHP
- *   function usort to sort array don't necessarily preserve the
- *   original order of two equal member. The Javascript sort function
- *   in fact preserve this order (but that's not require by the
- *   ECMAScript standard). So the encoded keywords order can be
- *   different in the two results.
- * 
- * # Be careful with the 'High ASCII' Level encoding if you use
- *   UTF-8 in your files... 
- */
- /*
- * modified by Mark Fabrizio Jr. to work with php 4
- */
-
-
-class JavaScriptPacker {
-       var $IGNORE = '$1';
-
-       // validate parameters
-       var $_script = '';
-       var $_encoding = 62;
-       var $_fastDecode = true;
-       var $_specialChars = false;
-       
-       var $LITERAL_ENCODING = array(
-               'None' => 0,
-               'Numeric' => 10,
-               'Normal' => 62,
-               'High ASCII' => 95
-       );
-       
-// http://doc.spip.org/@JavaScriptPacker
-       function JavaScriptPacker($_script, $_encoding = 62, $_fastDecode = true, $_specialChars = false)
-       {
-               $this->_script = $_script . "\n";
-               if (array_key_exists($_encoding, $this->LITERAL_ENCODING))
-                       $_encoding = $this->LITERAL_ENCODING[$_encoding];
-               $this->_encoding = min((int)$_encoding, 95);
-               $this->_fastDecode = $_fastDecode;      
-               $this->_specialChars = $_specialChars;
-       }
-       
-// http://doc.spip.org/@pack
-       function pack() {
-               $this->_addParser('_basicCompression');
-               if ($this->_specialChars)
-                       $this->_addParser('_encodeSpecialChars');
-               if ($this->_encoding)
-                       $this->_addParser('_encodeKeywords');
-               
-               // go!
-               return $this->_pack($this->_script);
-       }
-       
-       // apply all parsing routines
-// http://doc.spip.org/@_pack
-       function _pack($script) {
-               for ($i = 0; isset($this->_parsers[$i]); $i++) {
-                       $script = call_user_func(array(&$this,$this->_parsers[$i]), $script);
-               }
-               return $script;
-       }
-       
-       // keep a list of parsing functions, they'll be executed all at once
-       var $_parsers = array();
-// http://doc.spip.org/@_addParser
-       function _addParser($parser) {
-               $this->_parsers[] = $parser;
-       }
-       
-       // zero encoding - just removal of white space and comments
-// http://doc.spip.org/@_basicCompression
-       function _basicCompression($script) {
-               $parser = new ParseMaster();
-               // make safe
-               $parser->escapeChar = '\\';
-               // protect strings
-               $parser->add('/\'[^\'\\n\\r]*\'/',$this->IGNORE);
-               $parser->add('/"[^"\\n\\r]*"/', $this->IGNORE);
-               // remove comments
-               $parser->add('/\\/\\/[^\\n\\r]*[\\n\\r]/', ' ');
-               $parser->add('/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\//', ' ');
-               // protect regular expressions
-               $parser->add('/\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)/', '$2'); // IGNORE
-               $parser->add('/[^\\w\\x24\\/\'"*)\\?:]\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?/', $this->IGNORE);
-               // remove: ;;; doSomething();
-               if ($this->_specialChars) $parser->add('/;;;[^\\n\\r]+[\\n\\r]/');
-               // remove redundant semi-colons
-               $parser->add('/\\(;;\\)/', $this->IGNORE); // protect for (;;) loops
-               $parser->add('/;+\\s*([};])/', '$2');
-               // apply the above
-               $script = $parser->exec($script);
-
-               // remove white-space
-#              $parser->add('/(\\b|\\x24)\\s+(\\b|\\x24)/', '$2 $3');
-#              $parser->add('/([+\\-])\\s+([+\\-])/', '$2 $3');
-#              $parser->add('/\\s+/', '');
-# Modif fil@rezo.net pour conserver les \n
-               $parser->add('/(\\b|\\x24)[\\t ]+(\\b|\\x24)/', '$2 $3');
-               $parser->add('/([+\\-])[\\t ]+([+\\-])/', '$2 $3');
-               $parser->add('/[\\t ]+/', '');
-               $parser->add('/\\s+/', "\n");
-               // done
-               return $parser->exec($script);
-       }
-       
-// http://doc.spip.org/@_encodeSpecialChars
-       function _encodeSpecialChars($script) {
-               $parser = new ParseMaster();
-               // replace: $name -> n, $$name -> na
-               $parser->add('/((\\x24+)([a-zA-Z$_]+))(\\d*)/',
-                                        array('fn' => '_replace_name')
-               );
-               // replace: _name -> _0, double-underscore (__name) is ignored
-               $regexp = '/\\b_[A-Za-z\\d]\\w*/';
-               // build the word list
-               $keywords = $this->_analyze($script, $regexp, '_encodePrivate');
-               // quick ref
-               $encoded = $keywords['encoded'];
-               
-               $parser->add($regexp,
-                       array(
-                               'fn' => '_replace_encoded',
-                               'data' => $encoded
-                       )
-               );
-               return $parser->exec($script);
-       }
-       
-// http://doc.spip.org/@_encodeKeywords
-       function _encodeKeywords($script) {
-               // escape high-ascii values already in the script (i.e. in strings)
-               if ($this->_encoding > 62)
-                       $script = $this->_escape95($script);
-               // create the parser
-               $parser = new ParseMaster();
-               $encode = $this->_getEncoder($this->_encoding);
-               // for high-ascii, don't encode single character low-ascii
-               $regexp = ($this->_encoding > 62) ? '/\\w\\w+/' : '/\\w+/';
-               // build the word list
-               $keywords = $this->_analyze($script, $regexp, $encode);
-               $encoded = $keywords['encoded'];
-               
-               // encode
-               $parser->add($regexp,
-                       array(
-                               'fn' => '_replace_encoded',
-                               'data' => $encoded
-                       )
-               );
-               if (empty($script)) return $script;
-               else {
-                       //$res = $parser->exec($script);
-                       //$res = $this->_bootStrap($res, $keywords);
-                       //return $res;
-                       return $this->_bootStrap($parser->exec($script), $keywords);
-               }
-       }
-       
-// http://doc.spip.org/@_analyze
-       function _analyze($script, $regexp, $encode) {
-               // analyse
-               // retreive all words in the script
-               $all = array();
-               preg_match_all($regexp, $script, $all);
-               $_sorted = array(); // list of words sorted by frequency
-               $_encoded = array(); // dictionary of word->encoding
-               $_protected = array(); // instances of "protected" words
-               $all = $all[0]; // simulate the javascript comportement of global match
-               if (!empty($all)) {
-                       $unsorted = array(); // same list, not sorted
-                       $protected = array(); // "protected" words (dictionary of word->"word")
-                       $value = array(); // dictionary of charCode->encoding (eg. 256->ff)
-                       $this->_count = array(); // word->count
-                       $i = count($all); $j = 0; //$word = null;
-                       // count the occurrences - used for sorting later
-                       do {
-                               --$i;
-                               $word = '$' . $all[$i];
-                               if (!isset($this->_count[$word])) {
-                                       $this->_count[$word] = 0;
-                                       $unsorted[$j] = $word;
-                                       // make a dictionary of all of the protected words in this script
-                                       //  these are words that might be mistaken for encoding
-                                       //if (is_string($encode) && method_exists($this, $encode))
-                                       $values[$j] = call_user_func(array(&$this, $encode), $j);
-                                       $protected['$' . $values[$j]] = $j++;
-                               }
-                               // increment the word counter
-                               $this->_count[$word]++;
-                       } while ($i > 0);
-                       // prepare to sort the word list, first we must protect
-                       //  words that are also used as codes. we assign them a code
-                       //  equivalent to the word itself.
-                       // e.g. if "do" falls within our encoding range
-                       //      then we store keywords["do"] = "do";
-                       // this avoids problems when decoding
-                       $i = count($unsorted);
-                       do {
-                               $word = $unsorted[--$i];
-                               if (isset($protected[$word]) /*!= null*/) {
-                                       $_sorted[$protected[$word]] = substr($word, 1);
-                                       $_protected[$protected[$word]] = true;
-                                       $this->_count[$word] = 0;
-                               }
-                       } while ($i);
-                       
-                       // sort the words by frequency
-                       // Note: the javascript and php version of sort can be different :
-                       // in php manual, usort :
-                       // " If two members compare as equal,
-                       // their order in the sorted array is undefined."
-                       // so the final packed script is different of the Dean's javascript version
-                       // but equivalent.
-                       // the ECMAscript standard does not guarantee this behaviour,
-                       // and thus not all browsers (e.g. Mozilla versions dating back to at
-                       // least 2003) respect this. 
-                       usort($unsorted, array(&$this, '_sortWords'));
-                       $j = 0;
-                       // because there are "protected" words in the list
-                       //  we must add the sorted words around them
-                       do {
-                               if (!isset($_sorted[$i]))
-                                       $_sorted[$i] = substr($unsorted[$j++], 1);
-                               $_encoded[$_sorted[$i]] = $values[$i];
-                       } while (++$i < count($unsorted));
-               }
-               return array(
-                       'sorted'  => $_sorted,
-                       'encoded' => $_encoded,
-                       'protected' => $_protected);
-       }
-       
-       var $_count = array();
-// http://doc.spip.org/@_sortWords
-       function _sortWords($match1, $match2) {
-               return $this->_count[$match2] - $this->_count[$match1];
-       }
-       
-       // build the boot function used for loading and decoding
-// http://doc.spip.org/@_bootStrap
-       function _bootStrap($packed, $keywords) {
-               $ENCODE = $this->_safeRegExp('$encode\\($count\\)');
-
-               // $packed: the packed script
-               $packed = "'" . $this->_escape($packed) . "'";
-
-               // $ascii: base for encoding
-               $ascii = min(count($keywords['sorted']), $this->_encoding);
-               if ($ascii == 0) $ascii = 1;
-
-               // $count: number of words contained in the script
-               $count = count($keywords['sorted']);
-
-               // $keywords: list of words contained in the script
-               foreach ($keywords['protected'] as $i=>$value) {
-                       $keywords['sorted'][$i] = '';
-               }
-               // convert from a string to an array
-               ksort($keywords['sorted']);
-               $keywords = "'" . implode('|',$keywords['sorted']) . "'.split('|')";
-
-               $encode = ($this->_encoding > 62) ? '_encode95' : $this->_getEncoder($ascii);
-               $encode = $this->_getJSFunction($encode);
-               $encode = preg_replace('/_encoding/','$ascii', $encode);
-               $encode = preg_replace('/arguments\\.callee/','$encode', $encode);
-               $inline = '\\$count' . ($ascii > 10 ? '.toString(\\$ascii)' : '');
-
-               // $decode: code snippet to speed up decoding
-               if ($this->_fastDecode) {
-                       // create the decoder
-                       $decode = $this->_getJSFunction('_decodeBody');
-                       if ($this->_encoding > 62)
-                               $decode = preg_replace('/\\\\w/', '[\\xa1-\\xff]', $decode);
-                       // perform the encoding inline for lower ascii values
-                       elseif ($ascii < 36)
-                               $decode = preg_replace($ENCODE, $inline, $decode);
-                       // special case: when $count==0 there are no keywords. I want to keep
-                       //  the basic shape of the unpacking funcion so i'll frig the code...
-                       if ($count == 0)
-                               $decode = preg_replace($this->_safeRegExp('($count)\\s*=\\s*1'), '$1=0', $decode, 1);
-               }
-
-               // boot function
-               $unpack = $this->_getJSFunction('_unpack');
-               if ($this->_fastDecode) {
-                       // insert the decoder
-                       $this->buffer = $decode;
-                       $unpack = preg_replace_callback('/\\{/', array(&$this, '_insertFastDecode'), $unpack, 1);
-               }
-               $unpack = preg_replace('/"/', "'", $unpack);
-               if ($this->_encoding > 62) { // high-ascii
-                       // get rid of the word-boundaries for regexp matches
-                       $unpack = preg_replace('/\'\\\\\\\\b\'\s*\\+|\\+\s*\'\\\\\\\\b\'/', '', $unpack);
-               }
-               if ($ascii > 36 || $this->_encoding > 62 || $this->_fastDecode) {
-                       // insert the encode function
-                       $this->buffer = $encode;
-                       $unpack = preg_replace_callback('/\\{/', array(&$this, '_insertFastEncode'), $unpack, 1);
-               } else {
-                       // perform the encoding inline
-                       $unpack = preg_replace($ENCODE, $inline, $unpack);
-               }
-               // pack the boot function too
-               $unpackPacker = new JavaScriptPacker($unpack, 0, false, true);
-               $unpack = $unpackPacker->pack();
-               
-               // arguments
-               $params = array($packed, $ascii, $count, $keywords);
-               if ($this->_fastDecode) {
-                       $params[] = 0;
-                       $params[] = '{}';
-               }
-               $params = implode(',', $params);
-               
-               // the whole thing
-               return 'eval(' . $unpack . '(' . $params . "))\n";
-       }
-       
-       var $buffer;
-// http://doc.spip.org/@_insertFastDecode
-       function _insertFastDecode($match) {
-               return '{' . $this->buffer . ';';
-       }
-// http://doc.spip.org/@_insertFastEncode
-       function _insertFastEncode($match) {
-               return '{$encode=' . $this->buffer . ';';
-       }
-       
-       // mmm.. ..which one do i need ??
-// http://doc.spip.org/@_getEncoder
-       function _getEncoder($ascii) {
-               return $ascii > 10 ? $ascii > 36 ? $ascii > 62 ?
-                      '_encode95' : '_encode62' : '_encode36' : '_encode10';
-       }
-       
-       // zero encoding
-       // characters: 0123456789
-// http://doc.spip.org/@_encode10
-       function _encode10($charCode) {
-               return $charCode;
-       }
-       
-       // inherent base36 support
-       // characters: 0123456789abcdefghijklmnopqrstuvwxyz
-// http://doc.spip.org/@_encode36
-       function _encode36($charCode) {
-               return base_convert($charCode, 10, 36);
-       }
-       
-       // hitch a ride on base36 and add the upper case alpha characters
-       // characters: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
-// http://doc.spip.org/@_encode62
-       function _encode62($charCode) {
-               $res = '';
-               if ($charCode >= $this->_encoding) {
-                       $res = $this->_encode62((int)($charCode / $this->_encoding));
-               }
-               $charCode = $charCode % $this->_encoding;
-               
-               if ($charCode > 35)
-                       return $res . chr($charCode + 29);
-               else
-                       return $res . base_convert($charCode, 10, 36);
-       }
-       
-       // use high-ascii values
-       // characters: Â¡Â¢Â£Â¤Â¥Â¦Â§Â¨Â©ÂªÂ«Â¬Â­Â®Â¯Â°Â±Â²Â³Â´ÂµÂ¶Â·Â¸Â¹ÂºÂ»Â¼Â½Â¾Â¿Ã\80Ã?Ã\82Ã\83Ã\84Ã\85Ã\86Ã\87Ã\88Ã\89Ã\8aÃ\8bÃ\8cÃ?Ã\8eÃ?Ã?Ã\91Ã\92Ã\93Ã\94Ã\95Ã\96Ã\97Ã\98Ã\99Ã\9aÃ\9bÃ\9cÃ?Ã\9eÃ\9fàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ
-// http://doc.spip.org/@_encode95
-       function _encode95($charCode) {
-               $res = '';
-               if ($charCode >= $this->_encoding)
-                       $res = $this->_encode95($charCode / $this->_encoding);
-               
-               return $res . chr(($charCode % $this->_encoding) + 161);
-       }
-       
-// http://doc.spip.org/@_safeRegExp
-       function _safeRegExp($string) {
-               return '/'.preg_replace('/\$/', '\\\$', $string).'/';
-       }
-       
-// http://doc.spip.org/@_encodePrivate
-       function _encodePrivate($charCode) {
-               return "_" . $charCode;
-       }
-       
-       // protect characters used by the parser
-// http://doc.spip.org/@_escape
-       function _escape($script) {
-               return preg_replace('/([\\\\\'])/', '\\\$1', $script);
-       }
-       
-       // protect high-ascii characters already in the script
-// http://doc.spip.org/@_escape95
-       function _escape95($script) {
-               return preg_replace_callback(
-                       '/[\\xa1-\\xff]/',
-                       array(&$this, '_escape95Bis'),
-                       $script
-               );
-       }
-// http://doc.spip.org/@_escape95Bis
-       function _escape95Bis($match) {
-               return '\x'.((string)dechex(ord($match)));
-       }
-       
-       
-// http://doc.spip.org/@_getJSFunction
-       function _getJSFunction($aName) {
-               $func = 'JSFUNCTION'.$aName;
-               if (isset($this->$func)){
-                       return $this->$func;
-               }
-               else 
-                       return '';
-       }
-       
-       // JavaScript Functions used.
-       // Note : In Dean's version, these functions are converted
-       // with 'String(aFunctionName);'.
-       // This internal conversion complete the original code, ex :
-       // 'while (aBool) anAction();' is converted to
-       // 'while (aBool) { anAction(); }'.
-       // The JavaScript functions below are corrected.
-       
-       // unpacking function - this is the boot strap function
-       //  data extracted from this packing routine is passed to
-       //  this function when decoded in the target
-       // NOTE ! : without the ';' final.
-       var $JSFUNCTION_unpack = 'function($packed, $ascii, $count, $keywords, $encode, $decode) {
-    while ($count--) {
-        if ($keywords[$count]) {
-            $packed = $packed.replace(new RegExp(\'\\\\b\' + $encode($count) + \'\\\\b\', \'g\'), $keywords[$count]);
-        }
-    }
-    return $packed;
-}';
-/*
-'function($packed, $ascii, $count, $keywords, $encode, $decode) {
-    while ($count--)
-        if ($keywords[$count])
-            $packed = $packed.replace(new RegExp(\'\\\\b\' + $encode($count) + \'\\\\b\', \'g\'), $keywords[$count]);
-    return $packed;
-}';
-*/
-       
-       // code-snippet inserted into the unpacker to speed up decoding
-       var $JSFUNCTION_decodeBody = '    if (!\'\'.replace(/^/, String)) {
-        // decode all the values we need
-        while ($count--) {
-            $decode[$encode($count)] = $keywords[$count] || $encode($count);
-        }
-        // global replacement function
-        $keywords = [function ($encoded) {return $decode[$encoded]}];
-        // generic match
-        $encode = function () {return \'\\\\w+\'};
-        // reset the loop counter -  we are now doing a global replace
-        $count = 1;
-    }
-';
-//};
-/*
-'      if (!\'\'.replace(/^/, String)) {
-        // decode all the values we need
-        while ($count--) $decode[$encode($count)] = $keywords[$count] || $encode($count);
-        // global replacement function
-        $keywords = [function ($encoded) {return $decode[$encoded]}];
-        // generic match
-        $encode = function () {return\'\\\\w+\'};
-        // reset the loop counter -  we are now doing a global replace
-        $count = 1;
-    }';
-*/
-       
-        // zero encoding
-        // characters: 0123456789
-        var $JSFUNCTION_encode10 = 'function($charCode) {
-    return $charCode;
-}';//;';
-       
-        // inherent base36 support
-        // characters: 0123456789abcdefghijklmnopqrstuvwxyz
-        var $JSFUNCTION_encode36 = 'function($charCode) {
-    return $charCode.toString(36);
-}';//;';
-       
-       // hitch a ride on base36 and add the upper case alpha characters
-       // characters: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
-       var $JSFUNCTION_encode62 = 'function($charCode) {
-    return ($charCode < _encoding ? \'\' : arguments.callee(parseInt($charCode / _encoding))) +
-    (($charCode = $charCode % _encoding) > 35 ? String.fromCharCode($charCode + 29) : $charCode.toString(36));
-}';
-       
-       // use high-ascii values
-       // characters: Â¡Â¢Â£Â¤Â¥Â¦Â§Â¨Â©ÂªÂ«Â¬Â­Â®Â¯Â°Â±Â²Â³Â´ÂµÂ¶Â·Â¸Â¹ÂºÂ»Â¼Â½Â¾Â¿Ã\80Ã?Ã\82Ã\83Ã\84Ã\85Ã\86Ã\87Ã\88Ã\89Ã\8aÃ\8bÃ\8cÃ?Ã\8eÃ?Ã?Ã\91Ã\92Ã\93Ã\94Ã\95Ã\96Ã\97Ã\98Ã\99Ã\9aÃ\9bÃ\9cÃ?Ã\9eÃ\9fàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ
-       var $JSFUNCTION_encode95 = 'function($charCode) {
-    return ($charCode < _encoding ? \'\' : arguments.callee($charCode / _encoding)) +
-        String.fromCharCode($charCode % _encoding + 161);
-}'; 
-       
-}
-
-
-class ParseMaster {
-       var $ignoreCase = false;
-       var $escapeChar = '';
-       
-       // constants
-       var $EXPRESSION = 0;
-       var $REPLACEMENT = 1;
-       var $LENGTH = 2;
-       
-       // used to determine nesting levels
-       var $GROUPS = '/\\(/';//g
-       var $SUB_REPLACE = '/\\$\\d/';
-       var $INDEXED = '/^\\$\\d+$/';
-       var $TRIM = '/([\'"])\\1\\.(.*)\\.\\1\\1$/';
-       var $ESCAPE = '/\\\./';//g
-       var $QUOTE = '/\'/';
-       var $DELETED = '/\\x01[^\\x01]*\\x01/';//g
-       
-// http://doc.spip.org/@add
-       function add($expression, $replacement = '') {
-               // count the number of sub-expressions
-               //  - add one because each pattern is itself a sub-expression
-               $length = 1 + preg_match_all($this->GROUPS, $this->_internalEscape((string)$expression), $out);
-               
-               // treat only strings $replacement
-               if (is_string($replacement)) {
-                       // does the pattern deal with sub-expressions?
-                       if (preg_match($this->SUB_REPLACE, $replacement)) {
-                               // a simple lookup? (e.g. "$2")
-                               if (preg_match($this->INDEXED, $replacement)) {
-                                       // store the index (used for fast retrieval of matched strings)
-                                       $replacement = (int)(substr($replacement, 1)) - 1;
-                               } else { // a complicated lookup (e.g. "Hello $2 $1")
-                                       // build a function to do the lookup
-                                       $quote = preg_match($this->QUOTE, $this->_internalEscape($replacement))
-                                                ? '"' : "'";
-                                       $replacement = array(
-                                               'fn' => '_backReferences',
-                                               'data' => array(
-                                                       'replacement' => $replacement,
-                                                       'length' => $length,
-                                                       'quote' => $quote
-                                               )
-                                       );
-                               }
-                       }
-               }
-               // pass the modified arguments
-               if (!empty($expression)) $this->_add($expression, $replacement, $length);
-               else $this->_add('/^$/', $replacement, $length);
-       }
-       
-// http://doc.spip.org/@exec
-       function exec($string) {
-               // execute the global replacement
-               $this->_escaped = array();
-               
-               // simulate the _patterns.toSTring of Dean
-               $regexp = '/';
-               foreach ($this->_patterns as $reg) {
-                       $regexp .= '(' . substr($reg[$this->EXPRESSION], 1, -1) . ')|';
-               }
-               $regexp = substr($regexp, 0, -1) . '/';
-               $regexp .= ($this->ignoreCase) ? 'i' : '';
-               
-               $string = $this->_escape($string, $this->escapeChar);
-               $string = preg_replace_callback(
-                       $regexp,
-                       array(
-                               &$this,
-                               '_replacement'
-                       ),
-                       $string
-               );
-               $string = $this->_unescape($string, $this->escapeChar);
-               
-               return preg_replace($this->DELETED, '', $string);
-       }
-               
-// http://doc.spip.org/@reset
-       function reset() {
-               // clear the patterns collection so that this object may be re-used
-               $this->_patterns = array();
-       }
-
-       // private
-       var $_escaped = array();  // escaped characters
-       var $_patterns = array(); // patterns stored by index
-       
-       // create and add a new pattern to the patterns collection
-// http://doc.spip.org/@_add
-       function _add() {
-               $arguments = func_get_args();
-               $this->_patterns[] = $arguments;
-       }
-       
-       // this is the global replace function (it's quite complicated)
-// http://doc.spip.org/@_replacement
-       function _replacement($arguments) {
-               if (empty($arguments)) return '';
-               
-               $i = 1; $j = 0;
-               // loop through the patterns
-               while (isset($this->_patterns[$j])) {
-                       $pattern = $this->_patterns[$j++];
-                       // do we have a result?
-                       if (isset($arguments[$i]) && ($arguments[$i] != '')) {
-                               $replacement = $pattern[$this->REPLACEMENT];
-                               
-                               if (is_array($replacement) && isset($replacement['fn'])) {
-                                       
-                                       if (isset($replacement['data'])) $this->buffer = $replacement['data'];
-                                       return call_user_func(array(&$this, $replacement['fn']), $arguments, $i);
-                                       
-                               } elseif (is_int($replacement)) {
-                                       return $arguments[$replacement + $i];
-                               
-                               }
-                               $delete = ($this->escapeChar == '' ||
-                                          strpos($arguments[$i], $this->escapeChar) === false)
-                                       ? '' : "\x01" . $arguments[$i] . "\x01";
-                               return $delete . $replacement;
-                       
-                       // skip over references to sub-expressions
-                       } else {
-                               $i += $pattern[$this->LENGTH];
-                       }
-               }
-       }
-       
-// http://doc.spip.org/@_backReferences
-       function _backReferences($match, $offset) {
-               $replacement = $this->buffer['replacement'];
-               $quote = $this->buffer['quote'];
-               $i = $this->buffer['length'];
-               while ($i) {
-                       $replacement = str_replace('$'.$i--, $match[$offset + $i], $replacement);
-               }
-               return $replacement;
-       }
-       
-// http://doc.spip.org/@_replace_name
-       function _replace_name($match, $offset){
-               $length = strlen($match[$offset + 2]);
-               $start = $length - max($length - strlen($match[$offset + 3]), 0);
-               return substr($match[$offset + 1], $start, $length) . $match[$offset + 4];
-       }
-       
-// http://doc.spip.org/@_replace_encoded
-       function _replace_encoded($match, $offset) {
-               return $this->buffer[$match[$offset]];
-       }
-       
-       
-       // php : we cannot pass additional data to preg_replace_callback,
-       // and we cannot use &$this in create_function, so let's go to lower level
-       var $buffer;
-       
-       // encode escaped characters
-// http://doc.spip.org/@_escape
-       function _escape($string, $escapeChar) {
-               if ($escapeChar) {
-                       $this->buffer = $escapeChar;
-                       return preg_replace_callback(
-                               '/\\' . $escapeChar . '(.)' .'/',
-                               array(&$this, '_escapeBis'),
-                               $string
-                       );
-                       
-               } else {
-                       return $string;
-               }
-       }
-// http://doc.spip.org/@_escapeBis
-       function _escapeBis($match) {
-               $this->_escaped[] = $match[1];
-               return $this->buffer;
-       }
-       
-       // decode escaped characters
-// http://doc.spip.org/@_unescape
-       function _unescape($string, $escapeChar) {
-               if ($escapeChar) {
-                       $regexp = '/'.'\\'.$escapeChar.'/';
-                       $this->buffer = array('escapeChar'=> $escapeChar, 'i' => 0);
-                       return preg_replace_callback
-                       (
-                               $regexp,
-                               array(&$this, '_unescapeBis'),
-                               $string
-                       );
-                       
-               } else {
-                       return $string;
-               }
-       }
-// http://doc.spip.org/@_unescapeBis
-       function _unescapeBis() {
-               if (!empty($this->_escaped[$this->buffer['i']])) {
-                        $temp = $this->_escaped[$this->buffer['i']];
-               } else {
-                       $temp = '';
-               }
-               $this->buffer['i']++;
-               return $this->buffer['escapeChar'] . $temp;
-       }
-       
-// http://doc.spip.org/@_internalEscape
-       function _internalEscape($string) {
-               return preg_replace($this->ESCAPE, '', $string);
-       }
-}
-?>
diff --git a/www/plugins/crayons/modeles/uploader_item.html b/www/plugins/crayons/modeles/uploader_item.html
deleted file mode 100644 (file)
index 06d97de..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#ENV{erreur}
-<BOUCLE_d(DOCUMENTS){id_document}{tout}>
-&lt;doc#ID_DOCUMENT&gt; #TITRE - [(#LOGO_DOCUMENT|liens_absolus)]
-</BOUCLE_d>
diff --git a/www/plugins/crayons/modeles/uploader_liste.html b/www/plugins/crayons/modeles/uploader_liste.html
deleted file mode 100644 (file)
index 4a11ae5..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<style>
-.uploader {border:solid red 1px;}
-.uploader.hover {border:dotted red 1px;}
-.uploader li {border solid transparent 3px; padding-left:10px}
-.uploader li.loading {border:dotted red 3px;}
-.uploader li.ok {border:solid green 3px;}
-
-#uploader#ID_ARTICLE {
-       position: absolute;
-       top: 10px;
-       right: -180px;
-       width: 170px;
-       height: 100%;
-       max-height: 600px;
-       overflow: auto;
-       overflow-x: hidden;
-       background: #eee;
-       border: solid #ccc 1px;
-}
-
-#uploader#ID_ARTICLE.ferme {
-       width: 30px; height: 15px; overflow-x:hide;overflow-y:hide;overflow:hide;
-}
-</style>
-
-
-<div id="uploader#ID_ARTICLE" class="ferme">
-<i>Glissez un document ou une image dans cette zone pour l'ajouter à l'article.</i>
-
-<ul id="uploader_liste" >
-<BOUCLE_d(DOCUMENTS){tous}{id_article}{!par id_document}{0,10}>
-<li>#MODELE{uploader_item,id_document}</li>
-</BOUCLE_d>
-[<li class="pagination">(#PAGINATION)</li>]
-</B_d>
-</ul>
-
-
-</div>
-
-<!--
-/*
-
-$(function(){
-       var fileTemplate="<div id=\"{{id}}\">";
-       fileTemplate+="<div class=\"progressbar\"></div>";
-       fileTemplate+="<div class=\"preview\"></div>";
-       fileTemplate+="<div class=\"filename\">{{filename}}</div>";
-       fileTemplate+="</div>";
-       function slugify(text){
-               text=text.replace(/[^-a-zA-Z0-9,&\s]+/ig,'');
-               text=text.replace(/-/gi,"_");
-               text=text.replace(/\s/gi,"-");
-               return text;
-       }
-
-       $("#dropbox")
-       .html5Uploader({
-               onClientLoadStart:function(e,file){
-                       var upload=$("#upload");
-                       if(upload.is(":hidden")){
-                               upload.show();
-                       }
-                       upload.append(
-                               fileTemplate
-                                       .replace(/{{id}}/g, slugify(file.name))
-                                       .replace(/{{filename}}/g,file.name)
-                       );
-               },
-               onClientLoad:function(e,file){
-                       $("#"+slugify(file.name))
-                       .find(".preview")
-                       .append("<img src=\""+e.target.result+"\" alt=\"\">");
-               },
-               onServerLoadStart:function(e,file){
-                       $("#"+slugify(file.name))
-                       .find(".progressbar")
-                       .progressbar({value:0});
-               },
-               onServerProgress:function(e,file){
-                       if(e.lengthComputable){
-                               var percentComplete=(e.loaded/e.total)*100;
-                               $("#"+slugify(file.name))
-                               .find(".progressbar")
-                                       .progressbar({value:percentComplete});
-                       }
-               },
-               onServerLoad:function(e,file){
-                       $("#"+slugify(file.name))
-                       .find(".progressbar")
-                               .progressbar({value:100});
-               }
-       });
-
-       $(".download")
-       .mousedown(function(){
-               $(this).css({
-                       "background-image":"url('images/download-clicked.png')"
-               });
-       })
-       .mouseup(function(){
-               $(this).css({
-                       "background-image":"url('images/download.png')"
-               });
-       });
-
-
-});
-
-
-*/
--->
\ No newline at end of file
diff --git a/www/plugins/crayons/paquet.xml b/www/plugins/crayons/paquet.xml
deleted file mode 100644 (file)
index d0ad5da..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<paquet\r
-       prefix="crayons"\r
-       categorie="edition"\r
-       version="1.25.0"\r
-       etat="stable"\r
-       compatibilite="[1.9.0;3.*.*]"\r
-       logo="images/crayon-32.png"\r
-       documentation="http://contrib.spip.net/Les-Crayons"\r
->\r
-       <nom>Crayons</nom>\r
-       \r
-       <auteur>Fil</auteur>\r
-       <auteur>toggg</auteur>\r
-       \r
-       <licence>GNU/GPL</licence>\r
-\r
-       <traduire gestionnaire="salvatore" module="crayons" reference="fr" />\r
-       \r
-       <pipeline nom="affichage_final" inclure="crayons_fonctions.php" />\r
-       <pipeline nom="header_prive" inclure="crayons_fonctions.php" action="insert_head" />\r
-</paquet>\r
diff --git a/www/plugins/crayons/plugin.xml b/www/plugins/crayons/plugin.xml
deleted file mode 100644 (file)
index 6520240..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<plugin>\r
-       <nom>\r
-       <multi>\r
-       Crayons\r
-       [ar]&#1575;&#1604;&#1602;&#1604;&#1605;\r
-       [it]Pennarelli\r
-       [de]Der Stift\r
-       [en]Pencils\r
-       [ru]Карандаш\r
-       </multi>\r
-       </nom>\r
-       <auteur>\r
-       Fil, toggg\r
-       </auteur>\r
-       <licence>\r
-               &#169; 2006-2013 - GNU/GPL\r
-       </licence>\r
-       <version>\r
-       1.25.0\r
-       </version>\r
-       <etat>\r
-       stable\r
-       </etat>\r
-       <description>\r
-       <multi>\r
-       &#201;dition rapide depuis les pages publiques du site.\r
-       [it] Modifica rapida dalle pagine pubbliche del sito.\r
-       [ar]&#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1604;&#1581;&#1602;&#1548; {{&#1575;&#1604;&#1605;&#1578;&#1608;&#1575;&#1601;&#1585; &#1604;&#1604;&#1575;&#1589;&#1583;&#1575;&#1585; &#1633;.&#1641;.&#1634; &#1601;&#1602;&#1591;}} &#1610;&#1602;&#1583;&#1605; &#1608;&#1592;&#1575;&#1574;&#1601; &#1578;&#1581;&#1585;&#1610;&#1585; &#1587;&#1585;&#1610;&#1593;&#1577; &#1605;&#1606; &#1601;&#1610; &#1589;&#1601;&#1581;&#1575;&#1578; &#1575;&#1604;&#1605;&#1608;&#1602;&#1593; &#1575;&#1604;&#1593;&#1605;&#1608;&#1605;&#1610;. &#1604;&#1604;&#1575;&#1587;&#1578;&#1601;&#1575;&#1583;&#1577; &#1605;&#1606;&#1607; &#1610;&#1580;&#1576; &#1575;&#1606;&#1588;&#1575;&#1569; &#1589;&#1601;&#1581;&#1575;&#1578; &#1606;&#1605;&#1608;&#1584;&#1580;&#1610;&#1577; &#1605;&#1578;&#1608;&#1575;&#1601;&#1602;&#1577; &#1605;&#1593;&#1607;.\r
-\r
-&#1603;&#1605;&#1575; &#1601;&#1610; &#1589;&#1601;&#1581;&#1575;&#1578; &#1575;&#1604;&#1575;&#1589;&#1583;&#1575;&#1585; 1.9.2 &#1575;&#1604;&#1606;&#1605;&#1608;&#1584;&#1580;&#1610;&#1577; &#1610;&#1603;&#1601;&#1610; &#1575;&#1583;&#1582;&#1575;&#1604; &#1593;&#1604;&#1575;&#1605;&#1577; {#EDIT} &#1601;&#1610; &#1603;&#1604; &#1605;&#1603;&#1575;&#1606; &#1606;&#1585;&#1610;&#1583; &#1578;&#1581;&#1585;&#1610;&#1585;&#1607;. &#1605;&#1579;&#1604;&#1575;&#1611;&#1548; &#1604;&#1610;&#1589;&#1576;&#1581; &#1575;&#1604;&#1593;&#1606;&#1608;&#1575;&#1606; &#1602;&#1575;&#1576;&#1604; &#1604;&#1604;&#1578;&#1581;&#1585;&#1610;&#1585;:\r
-_ <code><h1 class="#EDIT{titre} &#1593;&#1604;&#1575;&#1605;&#1575;&#1578; &#1575;&#1582;&#1585;&#1609;">#TITRE</h1></code>.\r
-       [de]&#196;nderungen in &#246;ffentlichen Seiten direkt erledigen, Vorausetzung f&#252;r Wikis mit SPIP\r
-       [en]Quick editing from the public pages of the site.\r
-       [ru]Позволяет редактировать информацию прямо на сайте, не заходя в административную часть.\r
-       </multi>\r
-       </description>\r
-       <lien>http://contrib.spip.net/Les-Crayons</lien>\r
-       <prefix>\r
-       Crayons\r
-       </prefix>\r
-       <icon>\r
-       images/crayon-128.png\r
-       </icon>\r
-       <fonctions>crayons_fonctions.php</fonctions>\r
-       <pipeline>\r
-               <nom>affichage_final</nom>\r
-               <inclure>crayons_fonctions.php</inclure>\r
-       </pipeline>\r
-       <pipeline>\r
-               <nom>header_prive</nom>\r
-               <action>insert_head</action>\r
-               <inclure>crayons_fonctions.php</inclure>\r
-       </pipeline>\r
-       <chemin dir='' />\r
-       <categorie>edition</categorie>\r
-       <necessite id="SPIP" version="[1.9.0;3.99.99]" />\r
-       <!-- utilise id="cfg" version="[1.14.1;]" / -->\r
-       <traduire gestionnaire="salvatore" module="crayons" reference="fr" />\r
-</plugin>\r
diff --git a/www/plugins/crayons/prive/squelettes/contenu/configurer_crayons.html b/www/plugins/crayons/prive/squelettes/contenu/configurer_crayons.html
deleted file mode 100644 (file)
index 14a7388..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#CACHE{0}\r
-[(#AUTORISER{configurer}|sinon_interdire_acces)]\r
-<div class="ajax">\r
-#FORMULAIRE_CONFIGURER_CRAYONS\r
-</div>\r
diff --git a/www/plugins/crayons/svn.revision b/www/plugins/crayons/svn.revision
deleted file mode 100644 (file)
index bf4b8fc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/crayons
-Revision: 98168
-Dernier commit: 2016-06-02 06:04:03 +0200 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/crayons</origine>
-<revision>98168</revision>
-<commit>2016-06-02 06:04:03 +0200 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/crayons/tetecrayons.php b/www/plugins/crayons/tetecrayons.php
deleted file mode 100644 (file)
index ec1504f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Crayons
- * plugin for spip
- * (c) Fil, toggg 2006-2013
- * licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// Compatibilite eventuelle pour les plugins.
-// Ce fichier est normallement inutile.
-
-include_spip('crayons_fonctions');
diff --git a/www/plugins/crayons/vues/article_intro.html b/www/plugins/crayons/vues/article_intro.html
deleted file mode 100644 (file)
index f9fcdbf..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'article_intro'
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-#INTRODUCTION
-</BOUCLE_a>
diff --git a/www/plugins/crayons/vues/article_intro2.html b/www/plugins/crayons/vues/article_intro2.html
deleted file mode 100644 (file)
index 9e62a1f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'article_intro3'
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-#INTRODUCTION
-</BOUCLE_a>
diff --git a/www/plugins/crayons/vues/article_intro3.html b/www/plugins/crayons/vues/article_intro3.html
deleted file mode 100644 (file)
index 9e62a1f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'article_intro3'
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-#INTRODUCTION
-</BOUCLE_a>
diff --git a/www/plugins/crayons/vues/article_introduction.html b/www/plugins/crayons/vues/article_introduction.html
deleted file mode 100644 (file)
index d5ae81e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'article_introduction'
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-#INTRODUCTION
-</BOUCLE_a>
diff --git a/www/plugins/crayons/vues/article_texte.html b/www/plugins/crayons/vues/article_texte.html
deleted file mode 100644 (file)
index 5cf10fc..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'article_texte'
-
-       Juste pour le bonheur de tester les limites : la classe
-       imagereduire.NNN associee a #EDIT{texte} provoque l'application
-       du filtre |image_reduire{NNN,0}
-
-]
-#CACHE{0}
-
-[(#REM) met dans la variable r la valeur de la class ]
-[(#SET{r,[(#ENV{class}|match{\bimagereduire\.\d+\b}|match{\b\d+\b})]})]
-
-<BOUCLE_a(ARTICLES){id_article}{statut==.}>
-[(#GET{r}|?{
-       [(#TEXTE|image_reduire{#GET{r},0})]
-,
-       [(#TEXTE|image_reduire{500,0})]
-})]
-</BOUCLE_a>
-
-[<div class="notes">(#NOTES)</div>]
diff --git a/www/plugins/crayons/vues/document_fichier.html b/www/plugins/crayons/vues/document_fichier.html
deleted file mode 100644 (file)
index 4dc25c2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Vue pour le controleur de document
-
-]
-
-<BOUCLE_d(DOCUMENTS){id_document}{tout}>
-
-[(#VAL{<img}|concat{#ID_DOCUMENT}|concat{>}|propre)]
-
-</BOUCLE_d>
\ No newline at end of file
diff --git a/www/plugins/crayons/vues/extra.html b/www/plugins/crayons/vues/extra.html
deleted file mode 100644 (file)
index 4e80b8f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'extra'
-
-]
-#CACHE{0}
-
-<BOUCLE_a(AUTEURS){id_auteur}{tous}>
-[(#EXTRA**|extra_affichage{auteurs})]
-</BOUCLE_a>
-
-<BOUCLE_b(ARTICLES){id_article}{statut==.}>
-[(#EXTRA**|extra_affichage{articles})]
-</BOUCLE_b>
-
-<BOUCLE_c(BREVES){id_breve}{statut==.}>
-[(#EXTRA**|extra_affichage{breves})]
-</BOUCLE_c>
-
-<BOUCLE_d(RUBRIQUES){id_rubrique}{statut==.}>
-[(#EXTRA**|extra_affichage{rubriques})]
-</BOUCLE_d>
-
-<BOUCLE_e(SITES){id_syndic=#ENV{id_site}}{statut==.}>
-[(#EXTRA**|extra_affichage{sites})]
-</BOUCLE_e>
-
-<//B_d>
-<//B_c>
-<//B_b>
-<//B_a>
diff --git a/www/plugins/crayons/vues/extra_fonctions.php b/www/plugins/crayons/vues/extra_fonctions.php
deleted file mode 100644 (file)
index 30dc4c4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-
-include_spip('inc/extra');
-include_spip('inc/presentation');
diff --git a/www/plugins/crayons/vues/hyperlien.html b/www/plugins/crayons/vues/hyperlien.html
deleted file mode 100644 (file)
index 2c1d352..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'hyperlien'
-
-]
-#CACHE{0}
-
-[(#REM) Cas general ]
-#SET{titre,#ENV*{nom_site}}
-#SET{url,#ENV*{url_site}}
-
-[(#REM) syndic-article ]
-[(#ENV{id_syndic_article}|?{
-       [(#SET{titre,#ENV*{titre}})]
-       [(#SET{url,#ENV*{url}})]
-})]
-
-[(#REM) breve ]
-[(#ENV{id_breve}|?{
-       [(#SET{titre,#ENV*{lien_titre}})]
-       [(#SET{url,#ENV*{lien_url}})]
-})]
-
-[(#ENV{id_article}|?{' '})<:voir_en_ligne:>&nbsp;:]
-
-[(#GET{url}|?{
-       <a href="[(#GET{url})]" class="spip_out">[(#GET{titre}|typo|sinon{[(#GET{url}|couper{80})]})]</a>
-,
-       [(#GET{titre}|typo|sinon{<:info_sans_titre:>})]
-})]
\ No newline at end of file
diff --git a/www/plugins/crayons/vues/id_parent.html b/www/plugins/crayons/vues/id_parent.html
deleted file mode 100644 (file)
index 046d205..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon id_parent
-       Cf. controleurs/id_parent.html
-
-       nb: teste sur les articles uniquement
-]
-
-<BOUCLE_r(RUBRIQUES){id_rubrique=#ENV{id_rubrique}}>
-#TITRE
-</BOUCLE_r>
diff --git a/www/plugins/crayons/vues/logo.html b/www/plugins/crayons/vues/logo.html
deleted file mode 100644 (file)
index 57183f2..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-[(#REM)
-
-       Vue du logo qu'on vient d'uploader
-
-       On doit hacker l'url du logo avec sa date pour eviter le cache du navigateur
-
-]
-
-[(#REM) En fonction de du contexte, choisir un logo ]
-
-[(#SET{image,[(#ID_ARTICLE|?{#LOGO_ARTICLE_NORMAL}
-       |sinon{[(#ID_AUTEUR|?{#LOGO_AUTEUR_NORMAL})]}
-       |sinon{[(#ID_BREVE|?{#LOGO_BREVE_NORMAL})]}
-       |sinon{[(#ID_RUBRIQUE|?{#LOGO_RUBRIQUE_NORMAL})]}
-       |sinon{[(#ID_SYNDIC_ARTICLE|?{#LOGO_SYNDIC_ARTICLE_NORMAL})]}
-       |sinon{[(#ID_SYNDIC|?{#LOGO_SITE_NORMAL})]}
-       |sinon{[(#ID_MOT|?{#LOGO_MOT_NORMAL})]})]})]
-
-
-[(#REM) Si la class contient resize-XXX, on appliquera ce filtre au logo ]
-
-[(#SET{resize,[(#ENV{class}|match{\bresize-\d+\b}|replace{resize-})]})]
-
-
-[(#GET{image}|?{
-
-       [(#SET{logo,[(#GET{image}
-               |image_reduire{#GET{resize,0},#GET{resize,120}})]})]
-       [(#SET{url,[(#GET{logo}|extraire_attribut{src}|replace{\?.*$})]})]
-       [(#SET{url,[(#GET{url}|parametre_url{s,#EVAL{time()}})]})]
-       [(#SET{width,[(#GET{logo}|extraire_attribut{width})]})]
-
-       [(#GET{logo}|inserer_attribut{src,#GET{url}})]
-
-,
-       '<small><abbr title="logo">?</abbr></small>'
-})]
diff --git a/www/plugins/crayons/vues/mots_article_brut.html b/www/plugins/crayons/vues/mots_article_brut.html
deleted file mode 100644 (file)
index 4b0d461..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'mots_article_brut'
-
-]
-#CACHE{0}
-<BOUCLE_a(ARTICLES){id_article}{lang}{statut==.}>
-<B_moex>
-<ul class="mots_article"><p>Mots-clé pour #TITRE (#ID_ARTICLE)</p>
-<BOUCLE_moex(MOTS){id_article}{doublons}>
-       <li class="#EDIT{id_mot} mots_article">#ID_GROUPE:#ID_MOT : [(#TITRE|entites_html)] </li>
-</BOUCLE_moex>
-</ul>
-</B_moex>
-<p>Pas de mot-clé existant</p>
-<//B_moex>
-</BOUCLE_a>
diff --git a/www/plugins/crayons/vues/qui.html b/www/plugins/crayons/vues/qui.html
deleted file mode 100644 (file)
index a9b0b62..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'qui'
-
-]
-#CACHE{0}
-
-<BOUCLE_a(AUTEURS){id_auteur}{tous}>
-[<a title="(#EMAIL|texte_backend)">][(#NOM|sinon{#EMAIL})][(#EMAIL|?{</a>})]
-</BOUCLE_a>
-
-<BOUCLE_c(SIGNATURES){id_signature}{statut==.}>
-[<a title="(#EMAIL|texte_backend)">][(#NOM|sinon{#EMAIL})][(#EMAIL|?{</a>})]
-</BOUCLE_c>
-
-<BOUCLE_d(FORUMS){id_forum}{statut==.}>
-[<a title="(#EMAIL|texte_backend)">][(#NOM|sinon{#EMAIL})][(#EMAIL|?{</a>})]
-</BOUCLE_d>
-
-<//B_c>
-<//B_a>
diff --git a/www/plugins/crayons/vues/rubrique_id_parent.html b/www/plugins/crayons/vues/rubrique_id_parent.html
deleted file mode 100644 (file)
index bc18685..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-<BOUCLE_parent(RUBRIQUES){id_rubrique=#ID_PARENT}>
-#TITRE
-</BOUCLE_parent>
-
diff --git a/www/plugins/crayons/vues/rubrique_introduction.html b/www/plugins/crayons/vues/rubrique_introduction.html
deleted file mode 100644 (file)
index 3dd8fe8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'rubrique_introduction'
-
-]
-#CACHE{0}
-<BOUCLE_a(RUBRIQUES){id_rubrique}{statut==.}>
-#INTRODUCTION
-</BOUCLE_a>
diff --git a/www/plugins/crayons/vues/vignette.html b/www/plugins/crayons/vues/vignette.html
deleted file mode 100644 (file)
index 8d2225f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-[(#REM)
-
-       Vue pour le crayon 'vignette',
-       Ce crayons ne s'applique qu'aux documents
-
-]
-[(#SET{resize,[(#ENV{class}|match{\bresize-\d+\b}|replace{resize-})]})]
-
-[(#SET{image,[(#LOGO_DOCUMENT||image_reduire{#GET{resize,0},#GET{resize,120}})]})]
-
-[(#GET{image}|?{
-
-       [(#SET{url,[(#GET{image}|extraire_attribut{src}|replace{\?.*$})]})]
-       [(#SET{url,[(#GET{url}|parametre_url{s,#EVAL{time()}})]})]
-       [(#SET{width,[(#GET{image}|extraire_attribut{width})]})]
-
-       [(#GET{image}|inserer_attribut{src,#GET{url}})]
-})]
\ No newline at end of file
diff --git a/www/plugins/facteur b/www/plugins/facteur
new file mode 160000 (submodule)
index 0000000..60e524a
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 60e524a189ac3d1a9b686eab17bdb0a032356d68
diff --git a/www/plugins/facteur/classes/facteur.php b/www/plugins/facteur/classes/facteur.php
deleted file mode 100755 (executable)
index 46b5dee..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-<?php\r
-/*\r
- * Plugin Facteur 2\r
- * (c) 2009-2011 Collectif SPIP\r
- * Distribue sous licence GPL\r
- *\r
- */\r
-\r
-if (!defined("_ECRIRE_INC_VERSION")) return;\r
-\r
-include_spip('inc/charsets');\r
-include_spip('inc/texte');\r
-include_spip('inc/filtres');\r
-\r
-if (!class_exists('PHPMailer')) {\r
-       include_spip('phpmailer-php5/class.phpmailer');\r
-       include_spip('phpmailer-php5/class.smtp');\r
-}\r
-\r
-include_spip('facteur_fonctions');\r
-\r
-/**\r
- * Wrapper de spip_log pour par PHPMailer\r
- * @param $message\r
- * @param $level\r
- */\r
-function facteur_log_debug($message,$level){\r
-       spip_log("$level: ".trim($message),"facteur"._LOG_DEBUG);\r
-}\r
-\r
-\r
-class Facteur extends PHPMailer {\r
-       /**\r
-        * From force si From pas dans le bon domaine\r
-        * @var string\r
-        */\r
-       public $ForceFrom = '';\r
-\r
-       /**\r
-        * FromName force si From pas dans le bon domaine\r
-        * @var string\r
-        */\r
-       public $ForceFromName = '';\r
-\r
-       /**\r
-        * @param $email\r
-        * @param $objet\r
-        * @param $message_html\r
-        * @param $message_texte\r
-        * @param array $options\r
-        *\r
-        */\r
-       public function __construct($email, $objet, $message_html, $message_texte, $options = array()) {\r
-               // On récupère toutes les options par défaut depuis le formulaire de config\r
-               $defaut = array();\r
-               foreach (array(\r
-                       'adresse_envoi', 'adresse_envoi_email', 'adresse_envoi_nom', 'forcer_from',\r
-                       'cc', 'bcc',\r
-                       'smtp', 'smtp_host', 'smtp_port', 'smtp_auth',\r
-                       'smtp_username', 'smtp_password', 'smtp_secure', 'smtp_sender', 'smtp_tls_allow_self_signed',\r
-                       'filtre_images', 'filtre_iso_8859',\r
-               ) as $config) {\r
-                       $defaut[$config] = isset($GLOBALS['meta']["facteur_$config"]) ? $GLOBALS['meta']["facteur_$config"] : '';\r
-               }\r
-               // On fusionne les options avec d'éventuelles surcharges lors de l'appel\r
-               $options = array_merge($defaut, $options);\r
-\r
-               // par defaut on log rien car tres verbeux\r
-               // on utilise facteur_log_debug qui filtre log SPIP en _LOG_DEBUG\r
-               $this->SMTPDebug = 0;\r
-               $this->Debugoutput = "facteur_log_debug";\r
-               // Il est possible d'avoir beaucoup plus de logs avec 2, 3 ou 4, ce qui logs les échanges complets avec le serveur\r
-               // utiliser avec un define('_MAX_LOG',1000); car sinon on est limite a 100 lignes par hit et phpMailer est tres verbeux\r
-               if (defined('_FACTEUR_DEBUG_SMTP')) {\r
-                       $this->SMTPDebug = _FACTEUR_DEBUG_SMTP ;\r
-               }\r
-               $this->exceptions = false;\r
-\r
-\r
-               if (\r
-                       $options['adresse_envoi'] == 'oui'\r
-                       and $options['adresse_envoi_email']\r
-               ) {\r
-                       $this->From = $options['adresse_envoi_email'];\r
-               }\r
-               else {\r
-                       $this->From = (isset($GLOBALS['meta']["email_envoi"]) AND $GLOBALS['meta']["email_envoi"]) ?\r
-                               $GLOBALS['meta']["email_envoi"]\r
-                               : $GLOBALS['meta']['email_webmaster'];\r
-               }\r
-\r
-               // Si plusieurs emails dans le from, pas de Name !\r
-               if (strpos($this->From,",") === false) {\r
-                       if (\r
-                               $options['adresse_envoi'] == 'oui'\r
-                               and $options['adresse_envoi_nom']\r
-                       ) {\r
-                               $this->FromName = $options['adresse_envoi_nom'];\r
-                       }\r
-                       // Par défaut, l'envoyeur est le nom du site\r
-                       else {\r
-                               $this->FromName = strip_tags(extraire_multi($GLOBALS['meta']['nom_site']));\r
-                       }\r
-               }\r
-\r
-               // si forcer_from, on sauvegarde le From et FromName par defaut, qui seront utilises\r
-               // si From n'est pas dans le meme domaine\r
-               // (utiliser le facteur avec un service externe qui necessite la validation des domaines d'envoi)\r
-               if ($options['forcer_from']=='oui'){\r
-                       $this->ForceFrom = $this->From;\r
-                       $this->ForceFromName = $this->FromName;\r
-               }\r
-\r
-               $this->CharSet = "utf-8";\r
-               $this->Mailer = 'mail';\r
-               $this->Subject = unicode_to_utf_8(charset2unicode($objet,$GLOBALS['meta']['charset']));\r
-\r
-               //Pour un envoi multiple de mail, $email doit être un tableau avec les adresses.\r
-               if (is_array($email)) {\r
-                       foreach ($email as $cle => $adresseMail) {\r
-                               if (!$this->AddAddress($adresseMail)) {\r
-                                       spip_log("Erreur AddAddress $adresseMail : ".print_r($this->ErrorInfo, true), 'facteur.'._LOG_ERREUR);\r
-                               }\r
-                       }\r
-               }\r
-               elseif (!$this->AddAddress($email)) {\r
-                       spip_log("Erreur AddAddress $email : ".print_r($this->ErrorInfo, true), 'facteur.'._LOG_ERREUR);\r
-               }\r
-\r
-               // Retour des erreurs\r
-               if (!empty($options['smtp_sender'])) {\r
-                       $this->Sender = $options['smtp_sender'];\r
-                       $this->AddCustomHeader("Errors-To: ".$this->Sender);\r
-               }\r
-\r
-               // Destinataires en copie, seulement s'il n'y a pas de destinataire de test\r
-               if (!defined('_TEST_EMAIL_DEST')){\r
-                       if (!empty($options['cc'])) {\r
-                               $this->AddCC($options['cc']);\r
-                       }\r
-                       if (!empty($options['bcc'])) {\r
-                               $this->AddBCC($options['bcc']);\r
-                       }\r
-               }\r
-\r
-               // Si on envoie avec un SMTP explicite\r
-               if (isset($options['smtp']) AND $options['smtp'] == 'oui') {\r
-                       $this->Mailer   = 'smtp';\r
-                       $this->Host     = $options['smtp_host'];\r
-                       $this->Port     = $options['smtp_port'];\r
-\r
-                       // SMTP authentifié\r
-                       if ($options['smtp_auth'] == 'oui') {\r
-                               $this->SMTPAuth = true;\r
-                               $this->Username = $options['smtp_username'];\r
-                               $this->Password = $options['smtp_password'];\r
-                       }\r
-                       else {\r
-                               $this->SMTPAuth = false;\r
-                       }\r
-\r
-                       if ($options['smtp_secure'] == 'ssl') {\r
-                               $this->SMTPSecure = 'ssl';\r
-                       }\r
-                       if ($options['smtp_secure'] == 'tls') {\r
-                               $this->SMTPSecure = 'tls';\r
-                       }\r
-\r
-                       if ( $options['smtp_secure'] == 'tls' && $options['smtp_tls_allow_self_signed'] == 'oui' ) {\r
-                               $this->SMTPOptions = array(\r
-                                       'ssl' => array('allow_self_signed' => true)\r
-                               );\r
-                       }\r
-\r
-                       // Pour le moment on remet l'ancien fonctionnement :\r
-                       // on ne doit pas tester les certificats si pas demandé explicitement avec l'option TLS !\r
-                       $this->SMTPAutoTLS = false;\r
-               }\r
-\r
-               // S'il y a un contenu HTML\r
-               if (!empty($message_html)) {\r
-                       $message_html = unicode_to_utf_8(charset2unicode($message_html, $GLOBALS['meta']['charset']));\r
-\r
-                       $this->Body = $message_html;\r
-                       $this->IsHTML(true);\r
-                       if ($options['filtre_images']) {\r
-                               $this->JoindreImagesHTML();\r
-                       }\r
-\r
-                       $this->UrlsAbsolues();\r
-               }\r
-\r
-               // S'il y a un contenu texte brut\r
-               if (!empty($message_texte)) {\r
-                       $message_texte = unicode_to_utf_8(charset2unicode($message_texte, $GLOBALS['meta']['charset']));\r
-\r
-                       // Si pas de HTML on le remplace en tant que contenu principal\r
-                       if (!$this->Body) {\r
-                               $this->IsHTML(false);\r
-                               $this->Body = $message_texte;\r
-                       }\r
-                       // Sinon on met le texte brut en contenu alternatif\r
-                       else {\r
-                               $this->AltBody = $message_texte;\r
-                       }\r
-               }\r
-\r
-               if ($options['filtre_iso_8859']) {\r
-                       $this->ConvertirUtf8VersIso8859();\r
-               }\r
-       }\r
-\r
-       /**\r
-        * @param bool $exceptions\r
-        */\r
-       public function SetExceptions($exceptions){\r
-               $this->exceptions = ($exceptions?true:false);\r
-       }\r
-\r
-       /**\r
-        * Transforme du HTML en texte brut, mais proprement\r
-        * utilise le filtre facteur_mail_html2text\r
-        * @uses facteur_mail_html2text()\r
-        *\r
-        * @param string $html Le HTML à transformer\r
-        * @param bool $advanced Inutilisé\r
-        * @return string Retourne un texte brut formaté correctement\r
-        */\r
-       public function html2text($html, $advanced = false){\r
-               return facteur_mail_html2text($html);\r
-       }\r
-\r
-       /**\r
-        * Compat ascendante, obsolete\r
-        * @deprecated\r
-        */\r
-       public function ConvertirStylesEnligne() {\r
-               $this->Body = facteur_convertir_styles_inline($this->Body);\r
-       }\r
-\r
-       /**\r
-        * Transformer les urls des liens et des images en url absolues\r
-        * sans toucher aux images embarquees de la forme "cid:..."\r
-        */\r
-       protected function UrlsAbsolues($base=null){\r
-               include_spip('inc/filtres_mini');\r
-               if (preg_match_all(',(<(a|link)[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS',\r
-                 $this->Body, $liens, PREG_SET_ORDER)) {\r
-                       foreach ($liens as $lien) {\r
-                               if (strncmp($lien[3],"cid:",4)!==0){\r
-                                       $abs = url_absolue($lien[3], $base);\r
-                                       if ($abs <> $lien[3] and !preg_match('/^#/',$lien[3]))\r
-                                               $this->Body = str_replace($lien[0], $lien[1].$abs.$lien[4], $this->Body);\r
-                               }\r
-                       }\r
-               }\r
-               if (preg_match_all(',(<(img|script)[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS',\r
-                 $this->Body, $liens, PREG_SET_ORDER)) {\r
-                       foreach ($liens as $lien) {\r
-                               if (strncmp($lien[3],"cid:",4)!==0){\r
-                                       $abs = url_absolue($lien[3], $base);\r
-                                       if ($abs <> $lien[3])\r
-                                               $this->Body = str_replace($lien[0], $lien[1].$abs.$lien[4], $this->Body);\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Embed les images HTML dans l'email\r
-        */\r
-       protected function JoindreImagesHTML() {\r
-               $image_types = array(\r
-                                                       'gif'   => 'image/gif',\r
-                                                       'jpg'   => 'image/jpeg',\r
-                                                       'jpeg'  => 'image/jpeg',\r
-                                                       'jpe'   => 'image/jpeg',\r
-                                                       'bmp'   => 'image/bmp',\r
-                                                       'png'   => 'image/png',\r
-                                                       'tif'   => 'image/tiff',\r
-                                                       'tiff'  => 'image/tiff',\r
-                                                       'swf'   => 'application/x-shockwave-flash'\r
-                                               );\r
-               $src_found = array();\r
-               $images_embeded = array();\r
-               if (preg_match_all(\r
-                       '/["\'](([^"\']+)\.('.implode('|', array_keys($image_types)).'))([?][^"\']+)?([#][^"\']+)?["\']/Uims',\r
-                       $this->Body, $images, PREG_SET_ORDER)) {\r
-\r
-                       $adresse_site = $GLOBALS['meta']['adresse_site'].'/';\r
-                       foreach($images as $im){\r
-                               $im = array_pad($im, 6, null);\r
-                               $src_orig = $im[1].$im[4].$im[5];\r
-                               if (!isset($src_found[$src_orig])){ // deja remplace ? rien a faire (ie la meme image presente plusieurs fois)\r
-                                       // examiner le src et voir si embedable\r
-                                       $src = $im[1];\r
-                                       if ($src AND strncmp($src,$adresse_site,strlen($adresse_site))==0)\r
-                                               $src = _DIR_RACINE . substr($src,strlen($adresse_site));\r
-                                       if ($src\r
-                                         AND !preg_match(",^[a-z0-9]+://,i",$src)\r
-                                         AND (\r
-                                             file_exists($f=$src) // l'image a ete generee depuis le meme cote que l'envoi\r
-                                             OR (_DIR_RACINE AND file_exists($f=_DIR_RACINE.$src)) // l'image a ete generee dans le public et on est dans le prive\r
-                                             OR (!_DIR_RACINE AND file_exists($f=_DIR_RESTREINT.$src)) // l'image a ete generee dans le prive et on est dans le public\r
-                                            )\r
-                                         ){\r
-                                               if (!isset($images_embeded[$f])){\r
-                                                       $extension = strtolower($im[3]);\r
-                                                       $header_extension = $image_types[$extension];\r
-                                                       $cid = md5($f); // un id unique pour un meme fichier\r
-                                                       $images_embeded[$f] = $cid; // marquer l'image comme traitee, inutile d'y revenir\r
-                                                       $this->AddEmbeddedImage($f, $cid, basename($f),'base64',$header_extension);\r
-                                               }\r
-\r
-                                               $this->Body = str_replace($src_orig, "cid:".$images_embeded[$f], $this->Body);\r
-                                               $src_found[$src_orig] = $f;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-\r
-       /**\r
-        * Conversion safe d'un texte utf en isotruc\r
-        * @param string $text\r
-        * @param string $mode\r
-        * @return string\r
-        */\r
-       protected function safe_utf8_decode($text,$mode='texte_brut') {\r
-               if (!is_utf8($text))\r
-                       return ($text);\r
-\r
-               if (function_exists('iconv') && $mode == 'texte_brut') {\r
-                       $text = str_replace('’',"'",$text);\r
-                       $text = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text);\r
-                       return str_replace('&#8217;',"'",$text);\r
-               }\r
-               else {\r
-                       if ($mode == 'texte_brut') {\r
-                               $text = str_replace('’',"'",$text);\r
-                       }\r
-                       $text = unicode2charset(utf_8_to_unicode($text),'iso-8859-1');\r
-                       return str_replace('&#8217;',"'",$text);\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Convertir tout le mail utf en isotruc\r
-        */\r
-       protected function ConvertirUtf8VersIso8859() {\r
-               $this->CharSet  = 'iso-8859-1';\r
-               $this->Body             = str_ireplace('charset=utf-8', 'charset=iso-8859-1', $this->Body);\r
-               $this->Body             = $this->safe_utf8_decode($this->Body,'html');\r
-               $this->AltBody  = $this->safe_utf8_decode($this->AltBody);\r
-               $this->Subject  = $this->safe_utf8_decode($this->Subject);\r
-               $this->FromName = $this->safe_utf8_decode($this->FromName);\r
-       }\r
-\r
-       /**\r
-        * Convertir les accents du body en entites html\r
-        */\r
-       protected function ConvertirAccents() {\r
-               // tableau à compléter au fur et à mesure\r
-               $cor = array(\r
-                                               'à' => '&agrave;',\r
-                                               'â' => '&acirc;',\r
-                                               'ä' => '&auml;',\r
-                                               'ç' => '&ccedil;',\r
-                                               'é' => '&eacute;',\r
-                                               'è' => '&egrave;',\r
-                                               'ê' => '&ecirc;',\r
-                                               'ë' => '&euml;',\r
-                                               'î' => '&icirc;',\r
-                                               'ï' => '&iuml;',\r
-                                               'ò' => '&ograve;',\r
-                                               'ô' => '&ocirc;',\r
-                                               'ö' => '&ouml;',\r
-                                               'ù' => '&ugrave;',\r
-                                               'û' => '&ucirc;',\r
-                                               'œ' => '&oelig;',\r
-                                               '€' => '&euro;'\r
-                                       );\r
-\r
-               $this->Body = strtr($this->Body, $cor);\r
-       }\r
-\r
-\r
-       /**\r
-        * Une fonction wrapper pour appeler une methode de phpMailer\r
-        * en recuperant l'erreur eventuelle, en la loguant via SPIP et en lancant une exception si demandee\r
-        * @param string $function\r
-        * @param array $args\r
-        * @return bool\r
-        * @throws phpmailerException\r
-        */\r
-       protected function callWrapper($function,$args){\r
-               $exceptions = $this->exceptions;\r
-               $this->exceptions = true;\r
-               try {\r
-                       $retour = call_user_func_array($function,$args);\r
-                       $this->exceptions = $exceptions;\r
-               }\r
-               catch (phpmailerException $exc) {\r
-                       spip_log((is_array($function)?implode('::',$function):$function)."() : ".$exc->getMessage(),'facteur.'._LOG_ERREUR);\r
-                       $this->exceptions = $exceptions;\r
-                       if ($this->exceptions) {\r
-                               throw $exc;\r
-                       }\r
-                       return false;\r
-               }\r
-               if ($this->ErrorInfo){\r
-                       spip_log((is_array($function)?implode('::',$function):$function)."() : ".$this->ErrorInfo,'facteur.'._LOG_ERREUR);\r
-               }\r
-\r
-               return $retour;\r
-       }\r
-\r
-       /*\r
-        * Appel des fonctions parents via le callWrapper qui se charge de loger les erreurs\r
-        */\r
-\r
-       /**\r
-        * Avant le Send() on force le From si besoin\r
-        * @return bool\r
-        * @throws phpmailerException\r
-        */\r
-       public function Send() {\r
-               if ($this->ForceFrom\r
-                       AND $this->From!==$this->ForceFrom){\r
-                       $forcedomain = explode('@',$this->ForceFrom);\r
-                       $forcedomain = end($forcedomain);\r
-                       $domain = explode('@',$this->From);\r
-                       $domain = end($domain);\r
-                       if ($domain!==$forcedomain){\r
-                               // le From passe en ReplyTo\r
-                               $this->AddReplyTo($this->From,$this->FromName);\r
-                               // on force le From\r
-                               $this->From = $this->ForceFrom;\r
-                               $this->FromName = $this->ForceFromName;\r
-                       }\r
-               }\r
-               $args = func_get_args();\r
-               return $this->callWrapper(array('parent','Send'),$args);\r
-       }\r
-       public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment') {\r
-               $args = func_get_args();\r
-               return $this->callWrapper(array('parent','AddAttachment'),$args);\r
-       }\r
-       public function AddReplyTo($address, $name = '') {\r
-               $args = func_get_args();\r
-               return $this->callWrapper(array('parent','AddReplyTo'),$args);\r
-       }\r
-       public function AddBCC($address, $name = '') {\r
-               $args = func_get_args();\r
-               return $this->callWrapper(array('parent','AddBCC'),$args);\r
-       }\r
-       public function AddCC($address, $name = '') {\r
-               $args = func_get_args();\r
-               return $this->callWrapper(array('parent','AddCC'),$args);\r
-       }\r
-}\r
diff --git a/www/plugins/facteur/emails/css.html b/www/plugins/facteur/emails/css.html
deleted file mode 100755 (executable)
index ace3aa9..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<style type="text/css" media="screen">
-.faux_body {
-       background-color: #fff;
-       font-size: 12px;
-       font-family: verdana, sans-serif;
-}
-
-.titre {
-       text-align: center;
-       color: #000;
-       font-size: 24px;
-}
-
-h2 {
-       font-size: 18px;
-}
-
-h3 {
-       font-size: 16px;
-       clear: both;
-}
-
-a {
-       text-decoration: none;
-}
-
-a:hover {
-       text-decoration: underline;
-}
-
-a:visited {
-}
-
-.spip_documents_left {
-       float: left;
-       margin-right: 10px;
-}
-
-.spip_documents_center {
-       display: block;
-       text-align: center;
-       margin: 10px 0;
-}
-
-.spip_documents_right {
-       float: right;
-       margin-left: 10px;
-}
-
-.petit {
-       padding-top: 20px;
-       text-align: center;
-       font-size: 10px;
-}
-
-ul {
-       clear: both;
-}
-
-.invisible {
-       color: #eee;
-}
-</style>
\ No newline at end of file
diff --git a/www/plugins/facteur/emails/inc-bas.html b/www/plugins/facteur/emails/inc-bas.html
deleted file mode 100755 (executable)
index b8a8c19..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-</td>
-<td width="20" style="background-color: #fff;">&nbsp;</td>
-</tr>
-[<tr>
-<td colspan="3" width="580" style="background-color: #fff;"><a href="#URL_SITE_SPIP" title="[(#DESCRIPTIF_SITE_SPIP|textebrut)]"><img src="(#LOGO_NOTIFICATION_SURVOL||extraire_attribut{src})" alt="[(#NOM_SITE_SPIP|textebrut)]" border="0" width="[(#LOGO_NOTIFICATION_SURVOL||extraire_attribut{width})]" height="[(#LOGO_NOTIFICATION_SURVOL||extraire_attribut{height})]" /></a></td>
-</tr>
-]<tr>
-<td colspan="3" width="580" height="20">&nbsp;</td>
-</tr>
-</table>
-
-
-</center>
-
-
-</div><!-- fin faux_body -->
-
-
-</body>
-
-
-</html>
\ No newline at end of file
diff --git a/www/plugins/facteur/emails/inc-button.html b/www/plugins/facteur/emails/inc-button.html
deleted file mode 100644 (file)
index 1146a36..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-[(#REM)
-       Bulletproof button code for email html
-       from https://buttons.cm/
-
-       Arguments :
-       url
-       label
-       color (#ffffff par defaut)
-       bgcolor (#556270 par defaut)
-       bordercolor (#1e3650 par defaut)
-       borderradius (4px par defaut)
-       width (200px par defaut)
-       height (40px par defaut)
-       bgurl (rien par defaut)
-       fontsize (13px par défaut)
-]
-<span style="display: inline-block;"><!--[if mso]>
-  <v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="#ENV*{url}" style="height:#ENV{height,40px};v-text-anchor:middle;width:#ENV{width,200px};"[(#ENV{borderradius,4px}|intval|oui)arcsize="[(#ENV{borderradius,4px}|intval|mult{100}|div{#ENV{height,40px}|intval}|intval)%]"] strokecolor="#ENV{bordercolor,#1e3650}" [(#ENV{bgurl,''}|?{'fill="t"',[fillcolor="(#ENV{bgcolor,#556270})"]})]>
-    [<v:fill type="tile" src="(#ENV{bgurl,''})" color="#ENV{bgcolor,#556270}" />
-    ]<w:anchorlock/>
-    <center style="color:#ENV{color,#ffffff};font-family:sans-serif;[font-size:(#ENV{fontsize,13px});]font-weight:bold;">#ENV*{label}</center>
-  </v:roundrect>
-<![endif]--><a href="#ENV*{url}"
-style="background-color:#ENV{bgcolor,#556270};[background-image:url\((#ENV{bgurl,''})\);]border:1px solid #ENV{bordercolor,#1e3650};[border-radius:(#ENV{borderradius,4px});]color:#ENV{color,#ffffff};display:inline-block;font-family:sans-serif;[font-size:(#ENV{fontsize,13px});]font-weight:bold;line-height:#ENV{height,40px};text-align:center;text-decoration:none;width:#ENV{width,200px};-webkit-text-size-adjust:none;mso-hide:all;">#ENV*{label}</a></span>
diff --git a/www/plugins/facteur/emails/inc-haut.html b/www/plugins/facteur/emails/inc-haut.html
deleted file mode 100755 (executable)
index 21f4ee1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" dir="#LANG_DIR" xml:lang="#LANG" lang="#LANG">
-
-
-<head>
-<meta http-equiv="content-type" content="text/html; charset=#CHARSET" />
-<meta name="language" content="#LANG" />
-<INCLURE {fond=emails/css}>
-</head>
-
-
-<body>
-
-
-<div class="faux_body">
-       
-
-<center>
-
-
-<table border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td colspan="3" width="580" height="10">&nbsp;</td>
-</tr>
-[<tr>
-<td colspan="3" width="580" style="background-color: #fff; text-align: center;"><a class="titre" href="#URL_SITE_SPIP" title="[(#DESCRIPTIF_SITE_SPIP|textebrut)]"><img class="titre" src="(#LOGO_NOTIFICATION_NORMAL||extraire_attribut{src})" alt="[(#NOM_SITE_SPIP|textebrut)]" border="0" width="[(#LOGO_NOTIFICATION_NORMAL||extraire_attribut{width})]" height="[(#LOGO_NOTIFICATION_NORMAL||extraire_attribut{height})]" /></a></td>
-</tr>
-]<tr>
-<td width="20" style="background-color: #fff;">&nbsp;</td>
-<td width="540" style="background-color: #fff;">
diff --git a/www/plugins/facteur/emails/test_email_html.html b/www/plugins/facteur/emails/test_email_html.html
deleted file mode 100755 (executable)
index 75760b2..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#HTTP_HEADER{Content-Type:text/html}
-<body>
-       <h2><:facteur:corps_email_de_test:></h2>
-
-       <p><:facteur:version_html:></p>
-
-       <BOUCLE_art(ARTICLES){texte==<img}{0,1}>
-                       [(#TEXTE|image_reduire{550,0})]
-                       <hr />
-                       [(#NOTES|image_reduire{550,0})]
-       </BOUCLE_art>
-               <BOUCLE_art2(ARTICLES){0,1}>
-                       [(#TEXTE|image_reduire{550,0})]
-                       <hr />
-                       [(#NOTES|image_reduire{550,0})]
-               </BOUCLE_art2>
-       <//B_art>
-
-       <BOUCLE_image(DOCUMENTS){extension IN jpg,png,gif}{0,1}>
-               [(#MODELE{img}|image_reduire{550,0})]
-       </BOUCLE_image>
-
-       <BOUCLE_pdf(DOCUMENTS){extension=pdf}{0,1}>
-               [(#MODELE{doc}|image_reduire{550,0})]
-       </BOUCLE_pdf>
-</body>
-#FILTRE{facteur_email_wrap_to_html}
diff --git a/www/plugins/facteur/emails/test_email_texte.html b/www/plugins/facteur/emails/test_email_texte.html
deleted file mode 100755 (executable)
index e8953af..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<:facteur:corps_email_de_test:>
---------------------------------
-
-<:facteur:version_texte:>
-
-<BOUCLE_art(ARTICLES){texte==<img}{0,1}>
-               [(#TEXTE|textebrut)]
-</BOUCLE_art>
-       <BOUCLE_art2(ARTICLES){0,1}>
-                       [(#TEXTE|textebrut)]
-       </BOUCLE_art2>
-<//B_art>
diff --git a/www/plugins/facteur/emails/texte.html b/www/plugins/facteur/emails/texte.html
deleted file mode 100644 (file)
index d169454..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-<head>
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-       <title>[(#ENV*{sujet})]</title>
-       <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-       <style type="text/css">[
-               (#SET{siteColor,[#(#LOGO_SITE_SPIP|couleur_extraire|couleur_foncer_si_claire{88}|couleur_eclaircir_si_foncee{168}|sinon{BBB})]})][
-               (#VAL{_COULEUR_EMAILS_HTML}|defined|oui)#SET{siteColor,#VAL{_COULEUR_EMAILS_HTML}|constant}]
-               #outlook a {padding: 0;}
-               body {width: 100% !important;}
-               body {margin: 0;padding: 0;}
-               img {border: none;font-size: inherit;font-weight: bold;height: auto;line-height: 100%;outline: none;text-decoration: none;text-transform: capitalize;}
-               #backgroundTable {height: 100% !important;margin: 0;padding: 0;width: 100% !important;}
-               body, .backgroundTable {background-color: #DDDDDD;}
-               #templateContainer {border: 1px solid #CCCCCC;max-width: 600px !important;}
-               h1,.h1,h2,.h2,h3,.h3,h4,.h4 {color: #202020;display: block;font-family: Verdana, Geneva, sans-serif;margin-bottom: 0.5em;text-align: left;}
-               #templateHeader {background-color: #FFFFFF;border-bottom: 0;}
-               #templateContainer, .bodyContent {background-color: #FFFFFF;margin-top: 40px;}
-               .bodyContent {padding:30px;border-bottom:10px solid #GET{siteColor};}
-               .bodyContent div {color: #222222;font-family: Verdana, Geneva, sans-serif;line-height: 150%;text-align: left;}
-               .bodyContent div a:link, .bodyContent div a:visited {color: #336699;font-weight: normal;text-decoration: underline;}
-               .bodyContent img {display: inline;margin-bottom: 10px;}
-               .bodyContent img.puce {display: inline;margin-bottom: 0;}
-               hr { height: 1px; margin: 1.5em 0; border: 0; background: #222222; color: #222222; }
-               .spip_code, .spip_cadre {color: #606060;font-family: Courier,"Courier New",monospace;font-size: 1em;word-wrap:break-word;max-width: 100%;overflow: auto;}
-               .coloration_code ol {list-style: none;}
-               .spip_logos {float: right;margin-left: 10px;}
-               .text {word-wrap:break-word;}
-               .header,.footer {padding: 20px 40px;margin-left: -40px;margin-right: -40px;}
-               .text > .header:first-child {margin-top: -40px;}
-               .header {background: #e9e9e9;}
-               .footer {border-top:2px solid #e9e9e9;margin-top: 40px;}
-               .header hr,.footer hr {display: none}
-               @media only screen and (max-width: 600px) {
-                       html,body {width: 100% !important;}
-                       body, .backgroundTable {background-color: #ffffff !important;}
-                       .bodyContent {padding:0 0 10px !important;border-top:0;border-bottom:0;}
-                       #templateHead {display: none}
-                       #templateContainer {width: 100% !important;border: 0 !important;margin-top: 0}
-                       #templateBody {width: 100% !important;}
-                       .padding {padding-left:0 !important;padding-right:0 !important;}
-                       .text {color: #101010 !important;}
-                       .header,.footer {padding: 10px;margin-left: -10px;margin-right: -10px;}
-                       .text > .header:first-child {margin-top: -10px;}
-               }
-               @media only screen and (max-device-width: 480px) {
-                       html,body {width: 320px !important;}
-                       body, .backgroundTable {background-color: #ffffff !important;}
-                       .bodyContent {padding: 0 0 10px !important;border-top:0;border-bottom:0;}
-                       #templateContainer {width: 320px !important;border: 0 !important;margin-top: 0;}
-                       #templateBody {width: 320px !important;}
-                       .padding {padding-left:0 !important;padding-right:0 !important;}
-                       .text {color: #101010 !important;}
-               }
-       </style>
-</head>
-<body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0"
-                       style="margin: 0;padding: 0;width: 100% !important;background-color: #DDDDDD;">
-<center>
-       [<div style="display:none;display:none !important;">(#ENV{intro,''})</div>]
-       <table border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" id="backgroundTable"
-                                style="margin: 0;padding: 0;height: 100% !important;width: 100% !important;background-color: #DDDDDD;">
-               <tr>
-                       <td align="center" valign="top">
-                               <!-- // End Template Preheader \\ -->
-                               <table border="0" cellpadding="0" cellspacing="0" width="600" id="templateContainer"
-                                                        style="border: 1px solid #CCCCCC;background-color: #FFFFFF;max-width: 600px !important;">
-                                       <tr id="templateHead">
-                                               <td class="headContent" style="padding:10px 40px;background: #GET{siteColor};"><strong style="color:#fff;text-transform:uppercase">#NOM_SITE_SPIP</strong></td>
-                                       </tr>
-                                       <tr>
-                                               <td align="center" valign="top">
-                                                       <!-- // Begin Template Body \\ -->
-                                                       <table border="0" cellpadding="0" cellspacing="0" width="600" id="templateBody">
-                                                               <tr>
-                                                                       <td valign="top" class="bodyContent" style="background-color: #FFFFFF;padding:30px;">
-
-                                                                               <!-- // Begin Module: Standard Content \\ -->
-                                                                               <table border="0" cellpadding="10" cellspacing="0" width="100%">
-                                                                                       <tr>
-                                                                                               <td valign="top">
-                                                                                                       <div class='text' style="color:#222222;font-family: Verdana, Geneva, sans-serif;font-size:100%;line-height:150%;text-align:left;word-wrap:break-word;">
-                                                                                                               [(#ENV*{html,#ENV*{texte}|replace{'<','&lt;'}|facteur_nl2br_si_pas_autobr|propre|replace{'<br />\s*<br />(\s*<br />)+?','<br /> <br />'}|concat{'<br /> <br />'}})]
-                                                                                                       </div>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                                       <tr>
-                                                                                               <td align="left" valign="top"
-                                                                                                               style="color:#A39F9A !important;font-family: Verdana, Geneva, sans-serif; !important;font-size:90% !important;font-weight:normal !important;font-style:normal !important;text-decoration:none !important;vertical-align:top !important;text-align:left !important;">
-                                                                                                       <br/>
-                                                                                                       <br/>
-                                                                                                       &mdash; #SET{site,<a href="#URL_SITE_SPIP/">#NOM_SITE_SPIP</a>}<:facteur:email_envoye_par{site=#GET{site}}:>
-                                                                                                       <br/>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </table>
-                                                                               <!-- // End Module: Standard Content \\ -->
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                                       <!-- // End Template Body \\ -->
-                                               </td>
-                                       </tr>
-                               </table>
-                               <br>
-                       </td>
-               </tr>
-       </table>
-</center>
-</body>
-</html>
diff --git a/www/plugins/facteur/erreurs et exceptions.txt b/www/plugins/facteur/erreurs et exceptions.txt
deleted file mode 100644 (file)
index 192c8a2..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-Avril 2012\r
-Yffic\r
-\r
-Petit point sur la gestion des erreurs et les exceptions de phpMailer 5. "Parce que c'est pénible de ne pas savoir pourquoi ça ne marche pas"\r
-\r
-Constat :\r
-- Les problèmes de connexion smtp ne sont pas affichées dans l'interface privée de SPIP après un test d'envoi via la page de config de Facteur. On a juste le message "Erreur: consultez le fichier log pour plus de détails" dans un cadre rouge.\r
-\r
-- Dans formulaires/configurer_facteur.php, facteur_envoyer_mail_test() renvoie true/false. Donc on n'a pas accès aux messages d'erreurs de phpMailer dans l'espace privé.\r
-\r
-- La gestion des exceptions via la classe phpmailerException n'est pas activée par défaut dans phpMailer (Cf le constructeur). Elle sert surtout à faire remonter les messages d'erreur.\r
-\r
-- Après avoir activé la gestion des exceptions et le mode debug de la classe smtp (qui ne fait que des echo), on peut remarquer que les messages d'erreurs affichés par les exceptions dans phpMailer ne reprennent pas les vraies causes d'erreurs relevées dans la classe smtp. Si par exemple, on n'active pas ssl dans php, le debug "echo" affiche "SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?", mais l'exception se contente d'un "SMTP Error: Could not connect to SMTP host" dans le fichier log. C'est quand même dommage de ne pas avoir accès au premier message d'erreur.\r
-\r
-- Voir aussi :\r
-http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=50\r
-http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=5\r
-\r
-En attendant une éventuelle amélioration de phpMailer, on peut :\r
-\r
-- Upgrader phpMailer 5.2.1. J'ai testé, ca ne change rien au niveau de la gestion des messages d'erreur, mais ça corrige d'autres trucs. \r
-05/04/12 : Un cas foireux avec la version 5.2.1 : Si comme hôte on met un serveur ssl (ssl0.ovh.net), mais qu'on ne coche pas ssl au dessous, lors d'un test d'envoi, la roue Ajax tourne en rond indéfiniment... Pas de retour, aucune trace meme avec de simples echo... Je pense que ca tourne en rond au niveau de la fonction feof de get_lines. Cf les Notes de http://php.net/manual/fr/function.feof.php... Il n'est pas donc pas si urgent d'upgrader...\r
-\r
-- Redéfinir dans la classe Facteur, les fonctions Send, AddAttachment, AddReplyTo, AddBCC, AddCC, de la classe PhpMailer de cette façon :\r
-public function Send() {\r
-       ob_start();\r
-       parent::Send();\r
-       $error = ob_get_contents();\r
-       ob_end_clean();\r
-       if( !empty($error) ) {\r
-               spip_log("Erreur Facteur->Send : $error",'facteur.err');\r
-       }\r
-}\r
-Avec une constante pour activer ce mode et rajouter au début du constructeur de Facteur :\r
-if (defined('_FACTEUR_DEBUG_SMTP')) {\r
-       $this->SMTPDebug = _FACTEUR_DEBUG_SMTP ;\r
-}\r
-Ajouter la ligne qui suit dans mes_options.php permet donc de retrouver les erreurs dans le fichier facteur.err.log. \r
-define('_FACTEUR_DEBUG_SMTP','5'); // Le niveau peut varier de 1 à 5, 5 affichant tout le dialogue lors de la connexion smtp avec le serveur\r
-\r
-\r
-\r
diff --git a/www/plugins/facteur/facteur_administrations.php b/www/plugins/facteur/facteur_administrations.php
deleted file mode 100755 (executable)
index 9cd9f3a..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/*
- * Plugin Facteur 2
- * (c) 2009-2011 Collectif SPIP
- * Distribue sous licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function facteur_upgrade($nom_meta_base_version, $version_cible) {
-       $maj = array();
-
-       $maj['create'] = array(
-               array('ecrire_meta','facteur_smtp', 'non'),
-               array('ecrire_meta','facteur_smtp_auth', 'non'),
-               array('ecrire_meta','facteur_smtp_secure', 'non'),
-               array('ecrire_meta','facteur_smtp_sender', ''),
-               array('ecrire_meta','facteur_filtre_images', 1),
-               array('ecrire_meta','facteur_filtre_css', 0),
-               array('ecrire_meta','facteur_filtre_iso_8859', 0),
-               array('ecrire_meta','facteur_adresse_envoi', 'non'),
-               array('facteur_vieil_upgrade'),
-       );
-
-       include_spip('base/upgrade');
-       maj_plugin($nom_meta_base_version, $version_cible, $maj);
-}
-
-function facteur_vieil_upgrade() {
-       // migration depuis tres ancienne version, a la main
-       if (isset($GLOBALS['meta']['spip_notifications_version'])) {
-               ecrire_meta('facteur_smtp', $GLOBALS['meta']['spip_notifications_smtp']);
-               ecrire_meta('facteur_smtp_auth', $GLOBALS['meta']['spip_notifications_smtp_auth']);
-               ecrire_meta('facteur_smtp_secure', $GLOBALS['meta']['spip_notifications_smtp_secure']);
-               ecrire_meta('facteur_smtp_sender', $GLOBALS['meta']['spip_notifications_smtp_sender']);
-               ecrire_meta('facteur_filtre_images', $GLOBALS['meta']['spip_notifications_filtre_images']);
-               ecrire_meta('facteur_filtre_css', $GLOBALS['meta']['spip_notifications_filtre_css']);
-               ecrire_meta('facteur_filtre_iso_8859', $GLOBALS['meta']['spip_notifications_filtre_iso_8859']);
-               ecrire_meta('facteur_adresse_envoi', $GLOBALS['meta']['spip_notifications_adresse_envoi']);
-               ecrire_meta('facteur_adresse_envoi_nom', $GLOBALS['meta']['spip_notifications_adresse_envoi_nom']);
-               ecrire_meta('facteur_adresse_envoi_email', $GLOBALS['meta']['spip_notifications_adresse_envoi_email']);
-               // supprimer l'ancien nommage
-               effacer_meta('spip_notifications_smtp');
-               effacer_meta('spip_notifications_smtp_auth');
-               effacer_meta('spip_notifications_smtp_secure');
-               effacer_meta('spip_notifications_smtp_sender');
-               effacer_meta('spip_notifications_filtre_images');
-               effacer_meta('spip_notifications_filtre_css');
-               effacer_meta('spip_notifications_filtre_iso_8859');
-               effacer_meta('spip_notifications_adresse_envoi');
-               effacer_meta('spip_notifications_adresse_envoi_nom');
-               effacer_meta('spip_notifications_adresse_envoi_email');
-               effacer_meta('spip_notifications_version');
-               // KEZAKO ?
-               include_spip('base/abstract_sql');
-               sql_drop_table('spip_notifications', true);
-       }
-}
-
-
-function facteur_vider_tables($nom_meta_base_version) {
-       // cfg la dessus, ca serait mieux !
-       effacer_meta('facteur_version');
-       effacer_meta('facteur_smtp');
-       effacer_meta('facteur_smtp_auth');
-       effacer_meta('facteur_smtp_secure');
-       effacer_meta('facteur_smtp_sender');
-       effacer_meta('facteur_filtre_images');
-       effacer_meta('facteur_filtre_css');
-       effacer_meta('facteur_filtre_iso_8859');
-       effacer_meta('facteur_adresse_envoi');
-       effacer_meta('facteur_adresse_envoi_nom');
-       effacer_meta('facteur_adresse_envoi_email');
-       effacer_meta('facteur_cc');
-       effacer_meta('facteur_bcc');
-       effacer_meta($nom_meta_base_version);
-}
diff --git a/www/plugins/facteur/facteur_fonctions.php b/www/plugins/facteur/facteur_fonctions.php
deleted file mode 100755 (executable)
index 54a2d25..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-<?php
-/*
- * Plugin Facteur 2
- * (c) 2009-2011 Collectif SPIP
- * Distribue sous licence GPL
- *
- */
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-function facteur_affiche_password_masque($pass){
-       $l = strlen($pass);
-       if ($l<=8){
-               return str_pad('',$l,'*');
-       }
-       $e = intval(ceil($l/10));
-       $mid = str_pad('',$l-2*$e,'*');
-       if (strlen($mid)>8){
-               $mid = '***...***';
-       }
-       return substr($pass,0,$e) . $mid . substr($pass,-$e);
-}
-
-/**
- * Transformer un mail texte ou HTML simplifie en mail HTML complet avec le wrapper emails/texte.html
- * Si le mail est un mail texte :
- *   la premiere ligne est le sujet
- *   le reste est le corps du mail
- *
- * Si le mail est un mail HTML simplifie :
- *   le sujet est entre <title></title>
- *   le corps est entre <body></body>
- *   une eventuelle intro peut etre fournie entre <intro></intro>
- *
- * @param string $texte_ou_html
- * @return string
- */
-function facteur_email_wrap_to_html($texte_ou_html){
-       $texte_ou_html = trim($texte_ou_html);
-       // attention : si pas de contenu on renvoi du vide aussi (mail vide = mail vide)
-       if (!strlen(trim($texte_ou_html)))
-               return $texte_ou_html;
-
-       $contexte = array("sujet"=>"","texte"=>"","intro"=>"");
-
-       // tester si le mail est en html (simplifie)
-       if (substr($texte_ou_html,0,1)=="<"
-         AND substr($texte_ou_html,-1,1)==">"
-         AND stripos($texte_ou_html,"</body>")!==false){
-
-               // dans ce cas on ruse un peu : extraire le sujet du title
-               $sujet = "";
-               if (preg_match(",<title>(.*)</title>,Uims",$texte_ou_html,$m)){
-                       $contexte['sujet'] = $m[1];
-                       $texte_ou_html = preg_replace(",<title>(.*)</title>,Uims","",$texte_ou_html,1);
-                       $texte_ou_html = trim($texte_ou_html);
-               }
-               if (preg_match(",<intro>(.*)</intro>,Uims",$texte_ou_html,$m)){
-                       $contexte['intro'] = $m[1];
-                       $texte_ou_html = preg_replace(",<intro>(.*)</intro>,Uims","",$texte_ou_html,1);
-                       $texte_ou_html = trim($texte_ou_html);
-               }
-               $contexte['html'] = preg_replace(",</?body>,ims","",$texte_ou_html);
-       }
-       else {
-               // la premiere ligne est toujours le sujet
-               $texte_ou_html = explode("\n",$texte_ou_html);
-               $contexte['sujet'] = trim(array_shift($texte_ou_html));
-               $contexte['texte'] = trim(implode("\n",$texte_ou_html));
-       }
-
-       // attention : si pas de contenu on renvoi du vide aussi (mail vide = mail vide)
-       if (!strlen(trim(implode("",$contexte))))
-               return "";
-
-       return recuperer_fond("emails/texte",$contexte);
-}
-
-       /*
-
-       Written by Eric Dols - edols@auditavenue.com
-
-       You may freely use or modify this, provided
-       you leave credits to the original coder.
-       Feedback about (un)successfull uses, bugs and improvements done
-       are much appreciated, but don't expect actual support.
-
-       PURPOSE OF THIS FUNCTION
-               It is designed to process html emails relying
-               on a css stylesheet placed in the <head> for layout in
-               order to enhance compatibility with email clients,
-               including webmail services.
-               Provided you use minimal css, you can keep styling separate
-               from the content in your email template, and let this function
-               "inject" those styles inline in your email html tags on-the-fly,
-               just before sending.
-               Technically, it grabs the style declarations found in the
-               <head> section and inserts each declaration inline,
-               inside the corresponding html tags in the email message.
-
-               Supports both HTML and XHTML markup seamlessly. Thus
-               tolerant to email message writers using non-xhtml tag,
-               even when template is xhtml compliant (e.g. they would
-               add <img ...> instead of a xhtml compliant <img ... />).
-
-       NEW 10 dec. 2003:
-               - code revised, including a few regexp bugs fixed.
-               - multiple class for a tag are now allowed <p class="firstclass secondclass">
-               - all unsupported css styles are now moved to the body section (not just a:hover etc...)
-
-       USE
-               Add this function to a function library include, like "inline.inc"
-               and include it near the beginning of your php page:
-               require ("inline.inc");
-
-               load the html source of message into a variable
-               like $html_source and process it using:
-               $html_source = sheet2inline($html_source)
-
-
-       STYLE DEFINITIONS SUPPORTED
-               TAG { ... }
-               TAG1, TAG2, ... { ... }
-               TAG.class { ... }
-               .class { ...)
-               TAG:pseudo { ... }
-
-
-               CSS definitions may be freely formatted (spaces, tabs, linefeeds...),
-               they are converted to oneliners before inserting them inline in the html tags.
-
-               .class definitions are processed AFTER tag definitions,
-               thus appended inline after any existing tag styling to
-               preserve the normal css priority behavior.
-
-               Existing style="..." attributes in tags are NOT stripped. However they MUST
-               be with double quotes. If not, an addtional style="..." attribute will be added
-
-
-       KNOWN LIMITATIONS
-               - style info should be placed in <head> section. I believe
-                       it shouldnt be too hard to modify to point to an external
-                       stylesheet instead.
-               - no support (yet?):
-                       * chains like P UL LI { .... } or P UL LI.class { .... }
-                       * #divname p { ... } and <tag id="...">
-                       * a:hover, a:visited {...} multiple class:pseudo
-                       They require a significantly more complicated processing likely
-                       based on stylesheet and document trees parsing.
-                       Many email clients don't handle more than what is supported
-                       by this script anyway.
-               - pseudo-classes like a:hover {...} can't be inserted inline
-                       in the html tags: they are moved to a <style> declaration in
-                       the <body> instead. This is a limitation from html, not this script.
-               - It is still up to you to check if target email clients render
-                       your css styled templates correctly, especially webmail services
-                       like Hotmail, in which the email becomes a sub-part of an html page,
-                       with styles already in place.
-       */
-function facteur_convertir_styles_inline($body){
-       // variables to be accessed in the callback sub-function too
-       global $styledefinition, $styletag, $styleclass;
-
-       // Let's first load the stylesheet information in a $styles array using a regexp
-       preg_match_all ( "/^[ \t]*([.]?)([\w, #]+)([.:])?(\S*)\s+{([^}]+)}/mi", $body , $styles);
-       /*
-               $styles[1] = . or ''  => .class or tag (empty)
-               $styles[2] = name of class or tag(s)
-               $styles[3] = : . or '' => followed by pseudo-element, class separator or nothing (empty)
-               $styles[4] = name of pseudo-element after a tag, if any
-               $styles[5] = the style definition itself, i.e. what's between the { }
-       */
-
-       // Now loop through the styles found and act accordingly;
-
-       // process TAG {...} & TAG1, TAG2,... {...} definitions only first by order of appearance
-       foreach ($styles[1] as $i => $type) {
-               if ($type=="" && $styles[3][$i]=="") {
-                       $styledefinition = trim($styles[5][$i]);
-                       $styletag = preg_replace("/ *, */", "|", trim($styles[2][$i])); //echo $styletag."<br />";
-                       $styleclass = "";
-                       // process TAG {...} and TAG1, TAG2 {...} but not TAG1 TAG2 {...} or #divname styles
-                       if (!preg_match("/ /", $styletag) && !preg_match("/#/", $styletag)) {
-                               $pattern = "!<(".$styletag.")([^>]*(?= /)|[^>]*)( /)?>!mi";
-                               $body = preg_replace_callback ($pattern, 'facteur_addstyle' , $body);
-                               $styles[6][$i]=1; // mark as injected inline
-                       }
-               }
-       }
-
-       // append additional .CLASS {...} and TAG.CLASS {...} styling by order of appearance
-       // important to do so after TAG {...} definitions, so that class attributes override TAG styles when needed
-       foreach ($styles[1] as $i => $type) {
-               if ($type!="." && $styles[3][$i]=="." ) {       // class definition for a specific tag
-                       $styledefinition = trim($styles[5][$i]);
-                       $styletag = trim($styles[2][$i]);
-                       $styleclass = trim($styles[4][$i]);
-                       $pattern = "!<(".$styletag.")([^>]* class\=['\"][^'\"]*".$styleclass."[^'\"]*['\"][^>]*(?= /)|[^>]* class\=['\"][^'\"]*".$styleclass."[^'\"]*['\"][^>]*)( />)?>!mi";
-                       $body = preg_replace_callback ($pattern, 'facteur_addstyle' , $body);
-                       $styles[6][$i]=1; // mark as injected inline
-
-               }
-               elseif ($type=="." && $styles[3][$i]=="" ) {    // general class definition for any tag
-                       $styledefinition = trim($styles[5][$i]);
-                       $styletag = "";
-                       $styleclass = trim($styles[2][$i]);
-                       $pattern = "!<(\w+)([^>]* class\=['\"]".$styleclass."['\"][^>]*(?= /)|[^>]* class\=['\"]".$styleclass."['\"][^>]*)( />)?>!mi";
-                       $body = preg_replace_callback ($pattern, 'facteur_addstyle' , $body);
-                       $styles[6][$i]=1; // mark as injected inline
-               }
-       }
-
-
-       /* move all style declarations that weren't injected from <head> to a <body> <style> section,
-                including but not limited to:
-                - pseudo-classes like a:hover {...} as they can't be set inline
-                - declaration chains like UL LI {...}
-                - #divname {...}. These are not supported by email clients like Mac/Entourage anyway, it seems. */
-       foreach ($styles[1] as $i => $type) {
-               if ($styles[6][$i]=="") {
-                       // add a <style type="text/css"> section after <body> if there's isn't one yet
-                       if (preg_match ("!<body[^>]*>\s*<style!mi", $body)==0) {
-                               $body = preg_replace ("/(<body[^>]*>)/i", "\n\$1\n".'<style type="text/css">'."\n<!--\n-->\n</style>\n", $body);
-                       }
-                       // append a copy of the pseudo-element declaration to that body style section
-                       $styledefinition = trim($styles[5][$i]);
-                       $styledefinition = preg_replace ("!\s+!mi", " ", $styledefinition ); // convert style definition to a one-liner (optional)
-                       $declaration = $styles[1][$i].trim($styles[2][$i]).$styles[3][$i].trim($styles[4][$i])." { ".$styledefinition." }";
-                       $body = preg_replace ("!(<body[^>]*>\s*<style[^>]*>\s*<\!\-\-[^>]*)"."(\s*\-\->\s*</style>)!si", "\$1".$declaration."\n\$2", $body);
-                       $styles[6][$i]= 2; // mark as moved to <style> section in <body>
-               }
-       }
-
-       // remove stylesheet declaration(s) from <head> section (comment following line out if not wanted)
-       //$body = preg_replace ("!(<head>.*)<style type.*</style>(.*</head>)!si", "\$1\$2" , $body);
-
-       // check what styles have been injected
-#                      print_r($styles);
-
-       return $body;
-}
-
-/**
- * facteur_addstyle
- * @author Eric Dols
- *
- * @param $matches
- * @return string
- */
-function facteur_addstyle($matches) {
-
-       // $matches[1]=tag, $matches[2]=tag attributes (if any), $matches[3]=xhtml closing (if any)
-
-       // variables values set in calling function
-       global $styledefinition, $styletag, $styleclass;
-
-       // convert the style definition to a one-liner
-       $styledefinition = preg_replace ("!\s+!mi", " ", $styledefinition );
-       // convert all double-quotes to single-quotes
-       $styledefinition = preg_replace ('/"/','\'', $styledefinition );
-
-       if (preg_match ("/style\=/i", $matches[2])) {
-                       // add styles to existing style attribute if any already in the tag
-                       $pattern = "!(.* style\=)[\"]([^\"]*)[\"](.*)!mi";
-                       $replacement = "\$1".'"'."\$2 ".$styledefinition.'"'."\$3";
-                       $attributes = preg_replace ($pattern, $replacement , $matches[2]);
-       } else {
-                       // otherwise add new style attribute to tag (none was present)
-                       $attributes = $matches[2].' style="'.$styledefinition.'"';
-       }
-
-       if ($styleclass!="") {
-               // if we were injecting a class style, remove the now useless class attribute from the html tag
-
-               // Single class in tag case (class="classname"): remove class attribute altogether
-               $pattern = "!(.*) class\=['\"]".$styleclass."['\"](.*)!mi";
-               $replacement = "\$1\$2";
-               $attributes = preg_replace ( $pattern, $replacement, $attributes);
-
-               // Multiple classes in tag case (class="classname anotherclass..."): remove class name from class attribute.
-               // classes are injected inline and removed by order of appearance in <head> stylesheet
-               // exact same behavior as where last declared class attributes in <style> take over (IE6 tested only)
-               $pattern = "!(.* class\=['\"][^\"]*)(".$styleclass." | ".$styleclass.")([^\"]*['\"].*)!mi";
-               $replacement = "\$1\$3";
-               $attributes = preg_replace ( $pattern, $replacement, $attributes);
-
-       }
-
-       return "<".$matches[1].$attributes.$matches[3].">";
-}
-
-/**
- * Un filtre pour transformer les retour ligne texte en br si besoin (si pas autobr actif)
- *
- * @param string $texte
- * @return string
- */
-function facteur_nl2br_si_pas_autobr($texte){
-       if (_AUTOBR) return $texte;
-       include_spip("inc/filtres");
-       $texte = post_autobr($texte);
-       return $texte;
-}
-
-/**
- * Transformer un mail HTML en mail Texte proprement :
- * - les tableaux de mise en page sont utilis�s pour structurer le mail texte
- * - le reste du HTML est markdownifie car c'est un format texte lisible et conventionnel
- *
- * @param string $html
- * @return string
- */
-function facteur_mail_html2text($html){
-       // nettoyer les balises de mise en page html
-       $html = preg_replace(",</(td|th)>,Uims","<br/>",$html);
-       $html = preg_replace(",</(table)>,Uims","@@@hr@@@",$html);
-       $html = preg_replace(",</?(html|body|table|td|th|tbody|thead|center|article|section|span)[^>]*>,Uims","\n\n",$html);
-
-       // commentaires html et conditionnels
-       $html = preg_replace(",<!--.*-->,Uims","\n",$html);
-       $html = preg_replace(",<!\[.*\]>,Uims","\n",$html);
-
-       $html = preg_replace(",<(/?)(div|tr|caption)([^>]*>),Uims","<\\1p>",$html);
-       $html = preg_replace(",(<p>\s*)+,ims","<p>",$html);
-       $html = preg_replace(",<br/?>\s*</p>,ims","</p>",$html);
-       $html = preg_replace(",</p>\s*<br/?>,ims","</p>",$html);
-       $html = preg_replace(",(</p>\s*(@@@hr@@@)?\s*)+,ims","</p>\\2",$html);
-       $html = preg_replace(",(<p>\s*</p>),ims","",$html);
-
-       // succession @@@hr@@@<hr> et <hr>@@@hr@@@
-       $html = preg_replace(",@@@hr@@@\s*(<[^>]*>\s*)?<hr[^>]*>,ims","@@@hr@@@\n",$html);
-       $html = preg_replace(",<hr[^>]*>\s*(<[^>]*>\s*)?@@@hr@@@,ims","\n@@@hr@@@",$html);
-
-       $html = preg_replace(",<textarea[^>]*spip_cadre[^>]*>(.*)</textarea>,Uims","<code>\n\\1\n</code>",$html);
-
-       // vider le contenu de qqunes :
-       $html = preg_replace(",<head[^>]*>.*</head>,Uims","\n",$html);
-
-       // Liens :
-       // Nettoyage des liens des notes de bas de page
-       $html = preg_replace("@<a href=\"#n(b|h)[0-9]+-[0-9]+\" name=\"n(b|h)[0-9]+-[0-9]+\" class=\"spip_note\">([0-9]+)</a>@", "\\3", $html);
-       // Supprimer tous les liens internes
-       $html = preg_replace("/\<a href=['\"]#(.*?)['\"][^>]*>(.*?)<\/a>/ims","\\2", $html);
-       // Remplace tous les liens
-       preg_match_all("/\<a href=['\"](.*?)['\"][^>]*>(.*?)<\/a>/ims", $html,$matches,PREG_SET_ORDER);
-       $prelinks = $postlinks = array();
-       if (!function_exists('url_absolue'))
-               include_spip('inc/filtres');
-       foreach ($matches as $k => $match){
-               $link = "@@@link$k@@@";
-               $url = str_replace("&amp;","&",$match[1]);
-               if ($match[2]==$match[1] OR $match[2]==$url){
-                       // si le texte est l'url :
-                       $prelinks[$match[0]] = "$link";
-               }
-               else {
-                       // texte + url
-                       $prelinks[$match[0]] = $match[2] . " ($link)";
-               }
-               // passer l'url en absolu dans le texte sinon elle n'est pas clicable ni utilisable
-               $postlinks[$link] = url_absolue($url);
-       }
-       $html = str_replace(array_keys($prelinks), array_values($prelinks),$html);
-
-       // les images par leur alt ?
-       // au moins les puces
-       $html = preg_replace(',<img\s[^>]*alt="-"[^>]*>,Uims','-',$html);
-       // les autres
-       $html = preg_replace(',<img\s[^>]*alt=[\'"]([^\'"]*)[\'"][^>]*>,Uims',"\\1",$html);
-       // on vire celles sans alt
-       $html = preg_replace(",</?(img)[^>]*>,Uims","\n",$html);
-
-       // espaces
-       $html = str_replace("&nbsp;"," ",$html);
-       $html = preg_replace(",<p>\s+,ims","<p>",$html);
-
-       #return $html;
-       include_spip("lib/markdownify/markdownify");
-       $parser = new Markdownify('inline',false,false);
-       $texte = $parser->parseString($html);
-
-       $texte = str_replace(array_keys($postlinks), array_values($postlinks),$texte);
-
-
-       // trim et sauts de ligne en trop ou pas assez
-       $texte = trim($texte);
-       $texte = str_replace("<br />\n","\n",$texte);
-       $texte = preg_replace(",(@@@hr@@@\s*)+\Z,ims","",$texte);
-       $texte = preg_replace(",(@@@hr@@@\s*\n)+,ims","\n\n\n".str_pad("-",75,"-")."\n\n\n",$texte);
-       $texte = preg_replace(",(\n#+\s),ims","\n\n\\1",$texte);
-       $texte = preg_replace(",(\n\s*)(\n\s*)+(\n)+,ims","\n\n\n",$texte);
-
-
-       // <p> et </p> restants
-       $texte = str_replace(array("<p>","</p>"),array("",""),$texte);
-
-       // entites restantes ? (dans du code...)
-       include_spip('inc/charsets');
-       $texte = unicode2charset($texte);
-       $texte = str_replace(array('&#039;', '&#034;'),array("'",'"'), $texte);
-
-
-       // Faire des lignes de 75 caracteres maximum
-       return trim(wordwrap($texte));
-}
-?>
diff --git a/www/plugins/facteur/facteur_ieconfig_metas.php b/www/plugins/facteur/facteur_ieconfig_metas.php
deleted file mode 100644 (file)
index 1217c61..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-/**
- * Plugin Facteur 2
- * (c) 2009-2011 Collectif SPIP
- * Distribue sous licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function facteur_ieconfig_metas($table) {
-       $table['facteur']['titre'] = _T('facteur:configuration_facteur');
-       $table['facteur']['icone'] = 'facteur-16.png';
-       $table['facteur']['metas_brutes'] = 'facteur_adresse_envoi,facteur_adresse_envoi_nom,facteur_adresse_envoi_email,facteur_smtp,facteur_smtp_host,facteur_smtp_port,facteur_smtp_auth,facteur_smtp_username,facteur_smtp_password,facteur_smtp_secure,facteur_smtp_sender,facteur_filtre_images,facteur_filtre_css,facteur_filtre_iso_8859';
-       return $table;
-}
diff --git a/www/plugins/facteur/facteur_pipelines.php b/www/plugins/facteur/facteur_pipelines.php
deleted file mode 100644 (file)
index e0110f8..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Plugin Facteur
- * (c) 2009-2013 Collectif SPIP
- * Distribue sous licence GPL
- *
- * @package SPIP\Facteur\Pipelines
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Insertion dans le pipeline recuperer_fond (SPIP)
- *
- * On indique dans le formulaire de configuration de l'identité du site
- * que facteur surchargera l'email configuré ici pour envoyer les emails
- *
- * @param array $flux
- *             Le contexte du pipeline
- * @return array $flux
- *             Le contexte du pipeline modifé
- */
-function facteur_formulaire_fond($flux) {
-       if (($flux['args']['form'] == 'configurer_identite')
-               && (isset($GLOBALS['meta']['facteur_adresse_envoi']) && $GLOBALS['meta']['facteur_adresse_envoi'] == 'oui')
-               && (isset($GLOBALS['meta']['facteur_adresse_envoi_email']) && strlen($GLOBALS['meta']['facteur_adresse_envoi_email']) > 0)) {
-               $ajout = '<p class="notice">'._T('facteur:message_identite_email').'</p>';
-               $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_email_webmaster.*>)(.*<label),Uims", "\\1".$ajout."\\2", $flux['data'], 1);
-       }
-       return $flux;
-}
diff --git a/www/plugins/facteur/formulaires/configurer_facteur.html b/www/plugins/facteur/formulaires/configurer_facteur.html
deleted file mode 100644 (file)
index 049d1e7..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-
-       [(#ENV{tester,''}|et{#ENV*{message_erreur}|non})
-       <iframe style='width:95%;height:500px;margin:10px;' src='#URL_PAGE{emails/test_email_html,var_mode=calcul}'></iframe>
-       ]
-       <form method="post" action="#ENV{action}"><div>
-               #ACTION_FORMULAIRE{#ENV{action}}
-               <ul class="editer-groupe">
-                       <li class="fieldset">
-                               <fieldset>
-                                       <legend><:facteur:configuration_adresse_envoi:></legend>
-                                       <ul class="editer-groupe">
-                                               <li class="editer editer_facteur_adresse_envoi [ (#ENV**{erreurs}|table_valeur{facteur_adresse_envoi}|oui)erreur]">
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_adresse_envoi})</span>]
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_adresse_envoi" class="radio" value="non" id="facteur_adresse_envoi_non"[(#ENV{facteur_adresse_envoi,'non'}|=={non}|oui)checked="checked"]/>
-                                                               <label for="facteur_adresse_envoi_non"><:facteur:utiliser_reglages_site{from=#ENV{_from_defaut}}:></label>
-                                                       </div>
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_adresse_envoi" class="radio" value="oui" id="facteur_adresse_envoi_oui"[(#ENV{facteur_adresse_envoi,'non'}|=={oui}|oui)checked="checked"]/>
-                                                               <label for="facteur_adresse_envoi_oui"><:facteur:personnaliser:></label>
-                                                       </div>
-                                               </li>
-                                               <li class="editer editer_facteur_adresse_envoi_perso editer_facteur_adresse_envoi_nom [ (#ENV**{erreurs}|table_valeur{facteur_adresse_envoi_nom}|oui)erreur]"[(#ENV{facteur_adresse_envoi,'non'}|=={non}|oui)style='display:none;']>
-                                                       <label for="facteur_adresse_envoi_nom"><:facteur:facteur_adresse_envoi_nom:></label>[
-                                                       <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_adresse_envoi_nom})</span>]
-                                                       <input type="text" name="facteur_adresse_envoi_nom" class="text" value="#ENV**{facteur_adresse_envoi_nom}" id="facteur_adresse_envoi_nom" />
-                                               </li>
-                                               <li class="editer editer_facteur_adresse_envoi_perso editer_facteur_adresse_envoi_email [ (#ENV**{erreurs}|table_valeur{facteur_adresse_envoi_email}|oui)erreur]"[(#ENV{facteur_adresse_envoi,'non'}|=={non}|oui)style='display:none;']>
-                                                       <label for="facteur_adresse_envoi_email"><:facteur:facteur_adresse_envoi_email:></label>[
-                                                       <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_adresse_envoi_email})</span>]
-                                                       <input type="text" name="facteur_adresse_envoi_email" class="text" value="#ENV**{facteur_adresse_envoi_email}" id="facteur_adresse_envoi_email" />
-                                               </li>
-                                               #SET{name,facteur_forcer_from}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                                               <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[
-                                                       <span class='erreur_message'>(#GET{erreurs})</span>
-                                                       ]
-                                                       <div class="choix">
-                                                               #SET{val,non}
-                                                               <input type="hidden" name="#GET{name}" value="#GET{val}" />
-                                                               #SET{val,oui}
-                                                               <input type="checkbox" name="#GET{name}" class="checkbox" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
-                                                               <label for="#GET{name}_#GET{val}"><:facteur:label_facteur_forcer_from:></label>
-                                                       </div>
-                                               </li>
-                                       </ul>
-                               </fieldset>
-                       </li>
-                       <li class="fieldset">
-                               <fieldset>
-                                       <legend><:facteur:configuration_mailer:></legend>
-                                       <ul class="editer-groupe">
-                                               <li class="editer editer_facteur_smtp [ (#ENV**{erreurs}|table_valeur{facteur_smtp}|oui)erreur]">
-                                                       <label><:facteur:configuration_smtp:></label>
-                                                       <p class="explication"><:facteur:configuration_smtp_descriptif:></p>
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp})</span>]
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp" class="radio" value="non" id="facteur_smtp_non"[(#ENV{facteur_smtp,'non'}|=={non}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_non"><:facteur:utiliser_mail:></label>
-                                                       </div>
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp" class="radio" value="oui" id="facteur_smtp_oui"[(#ENV{facteur_smtp,'non'}|=={oui}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_oui"><:facteur:utiliser_smtp:></label>
-                                                       </div>
-                                               </li>
-                                               <li class="editer editer_facteur_smtp_param editer_facteur_smtp_host [ (#ENV**{erreurs}|table_valeur{facteur_smtp_host}|oui)erreur]"[(#ENV{facteur_smtp,'non'}|=={non}|oui)style='display:none;']>
-                                                       <label for="facteur_smtp_host"><:facteur:facteur_smtp_host:></label>[
-                                                       <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_host})</span>]
-                                                       <input type="text" name="facteur_smtp_host" class="text" value="#ENV**{facteur_smtp_host}" id="facteur_smtp_host" />
-                                               </li>
-                                               <li class="editer editer_facteur_smtp_param editer_facteur_smtp_port [ (#ENV**{erreurs}|table_valeur{facteur_smtp_port}|oui)erreur]"[(#ENV{facteur_smtp,'non'}|=={non}|oui)style='display:none;']>
-                                                       <label for="facteur_smtp_port"><:facteur:facteur_smtp_port:></label>[
-                                                       <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_port})</span>]
-                                                       <input type="text" name="facteur_smtp_port" class="text" value="#ENV**{facteur_smtp_port}" id="facteur_smtp_port" />
-                                               </li>
-                                               <li class="editer editer_facteur_smtp_param editer_facteur_smtp_auth [ (#ENV**{erreurs}|table_valeur{facteur_smtp_auth}|oui)erreur]"[(#ENV{facteur_smtp,'non'}|=={non}|oui)style='display:none;']>
-                                                       <label><:facteur:facteur_smtp_auth:></label>
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_auth})</span>]
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp_auth" class="radio" value="non" id="facteur_smtp_auth_non"[(#ENV{facteur_smtp_auth,'non'}|=={non}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_auth_non"><:facteur:facteur_smtp_auth_non:></label>
-                                                       </div>
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp_auth" class="radio" value="oui" id="facteur_smtp_auth_oui"[(#ENV{facteur_smtp_auth,'non'}|=={oui}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_auth_oui"><:facteur:facteur_smtp_auth_oui:></label>
-                                                       </div>
-                                                       <ul class="editer-groupe" id="smtp-auth"[(#ENV{facteur_smtp_auth,'non'}|=={non}|oui)style='display:none;']>
-                                                               <li class="editer editer_facteur_smtp_username [ (#ENV**{erreurs}|table_valeur{facteur_smtp_username}|oui)erreur]">
-                                                                       <label for="facteur_smtp_username"><:facteur:facteur_smtp_username:></label>[
-                                                                       <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_username})</span>]
-                                                                       <input type="text" name="facteur_smtp_username" class="text" value="#ENV**{facteur_smtp_username}" id="facteur_smtp_username" />
-                                                               </li>
-                                                               <li class="editer editer_facteur_smtp_password [ (#ENV**{erreurs}|table_valeur{facteur_smtp_password}|oui)erreur]">
-                                                                       <label for="facteur_smtp_password"><:facteur:facteur_smtp_password:></label>[
-                                                                       <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_password})</span>]
-                                                                       <input type="password" name="facteur_smtp_password" class="text" value="#ENV**{facteur_smtp_password}" id="facteur_smtp_password"
-                                                                       [placeholder="(#ENV**{_facteur_smtp_password}|facteur_affiche_password_masque|attribut_html)"] />
-                                                               </li>
-                                                       </ul>
-                                               </li>
-                                               <li class="editer editer_facteur_smtp_param editer_facteur_smtp_secure [ (#ENV**{erreurs}|table_valeur{facteur_smtp_secure}|oui)erreur]"[(#ENV{facteur_smtp,'non'}|=={non}|oui)style='display:none;']>
-                                                       <label><:facteur:facteur_smtp_secure:></label>
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_secure})</span>]
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp_secure" class="radio" value="non" id="facteur_smtp_secure_non"[(#ENV{facteur_smtp_secure,'non'}|=={non}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_secure_non"><:facteur:facteur_smtp_secure_non:></label>
-                                                       </div>
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp_secure" class="radio" value="tls" id="facteur_smtp_secure_tls"[(#ENV{facteur_smtp_secure,'non'}|=={tls}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_secure_tls"><:facteur:facteur_smtp_secure_tls:></label>
-                                                       </div>
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp_secure" class="radio" value="ssl" id="facteur_smtp_secure_ssl"[(#ENV{facteur_smtp_secure,'non'}|=={ssl}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_secure_ssl"><:facteur:facteur_smtp_secure_ssl:></label>
-                                                       </div>
-                                               </li>
-                                               <li class="editer editer_facteur_smtp_tls_allow_self_signed [ (#ENV**{erreurs}|table_valeur{facteur_smtp_tls_allow_self_signed}|oui)erreur]">
-                                                       <label><:facteur:configuration_facteur_smtp_tls_allow_self_signed:></label>
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_tls_allow_self_signed})</span>]
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp_tls_allow_self_signed" class="radio" value="non" id="facteur_smtp_tls_allow_self_signed_non"[(#ENV{facteur_smtp_tls_allow_self_signed,'non'}|=={non}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_tls_allow_self_signed_non"><:facteur:facteur_smtp_tls_allow_self_signed_non:></label>
-                                                       </div>
-                                                       <div class="choix">
-                                                               <input type="radio" name="facteur_smtp_tls_allow_self_signed" class="radio" value="oui" id="facteur_smtp_tls_allow_self_signed_oui"[(#ENV{facteur_smtp_tls_allow_self_signed,'non'}|=={oui}|oui)checked="checked"]/>
-                                                               <label for="facteur_smtp_tls_allow_self_signed_oui"><:facteur:facteur_smtp_tls_allow_self_signed_oui:></label>
-                                                       </div>
-                                               </li>
-                                               <li class="editer editer_facteur_smtp_sender [ (#ENV**{erreurs}|table_valeur{facteur_smtp_sender}|oui)erreur]">
-                                                       <label for="facteur_smtp_sender"><:facteur:facteur_smtp_sender:></label>[
-                                                       <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_sender})</span>]
-                                                       <p class="explication"><:facteur:facteur_smtp_sender_descriptif:></p>
-                                                       <input type="text" name="facteur_smtp_sender" class="text" value="#ENV**{facteur_smtp_sender}" id="facteur_smtp_sender" />
-                                               </li>
-                                       </ul>
-                               </fieldset>
-                       </li>
-                       <li class="fieldset">
-                               <fieldset>
-                                       <legend><:facteur:facteur_filtres:></legend>
-                                       <ul class="editer-groupe">
-                                               <li class="editer editer_facteur_filtres[ (#ENV**{erreurs}|table_valeur{facteur_filtres}|oui)erreur]">
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_smtp_secure})</span>]
-                                                       <p class="explication"><:facteur:facteur_filtres_descriptif:></p>
-                                                       <div class="choix">
-                                                               <input type="checkbox" name="facteur_filtre_images" class="checkbox" value="1" id="facteur_filtre_images"[(#ENV{facteur_filtre_images,''}|=={1}|oui)checked="checked"]/>
-                                                               <label for="facteur_filtre_images"><:facteur:facteur_filtre_images:></label>
-                                                       </div>
-                                                       <div class="choix">
-                                                               <input type="checkbox" name="facteur_filtre_iso_8859" class="checkbox" value="1" id="facteur_filtre_iso_8859"[(#ENV{facteur_filtre_iso_8859,''}|=={1}|oui)checked="checked"]/>
-                                                               <label for="facteur_filtre_iso_8859"><:facteur:facteur_filtre_iso_8859:></label>
-                                                       </div>
-                                               </li>
-                                       </ul>
-                               </fieldset>
-                       </li>
-                       <li class="fieldset">
-                               <fieldset>
-                                       <legend><:facteur:facteur_copies:></legend>
-                                       <ul class="editer-groupe">
-                                               <li class="editer editer_facteur_copies editer_facteur_desc">
-                                                       <p class="explication"><:facteur:facteur_copies_descriptif:></p>
-                                               </li>
-                                               <li class="editer editer_facteur_copies editer_facteur_cc [ (#ENV**{erreurs}|table_valeur{facteur_cc}|oui)erreur]">
-                                                       <label for="facteur_cc"><:facteur:facteur_cc:></label>
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_cc})</span>]
-                                                       <input type="text" name="facteur_cc" class="text" value="#ENV**{facteur_cc}" id="facteur_cc" />
-                                               </li>
-                                               <li class="editer editer_facteur_copies editer_facteur_bcc [ (#ENV**{erreurs}|table_valeur{facteur_bcc}|oui)erreur]">
-                                                       <label for="facteur_bcc"><:facteur:facteur_bcc:></label>
-                                                       [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{facteur_bcc})</span>]
-                                                       <input type="text" name="facteur_bcc" class="text" value="#ENV**{facteur_bcc}" id="facteur_bcc" />
-                                               </li>
-                                       </ul>
-                               </fieldset>
-                       </li>
-               </ul>
-               <p class="boutons">
-                       <input type="submit" name="valider" class="submit" value="<:bouton_valider:>" />
-               </p>
-               <ul class="editer-groupe">
-                       <li class="fieldset">
-                               <fieldset>
-                                       <h3 class="legend"><:facteur:tester_la_configuration:></h3>
-                                       <ul class="editer-groupe">
-                                               #SET{name,email_test}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                                               <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
-                                                       <label for="#GET{name}"><:facteur:facteur_email_test:></label>[
-                                                       <span class='erreur_message'>(#GET{erreurs})</span>
-                                                       ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
-                                                       <p class="explication"><:facteur:note_test_configuration:></p>
-                                               </li>
-                                       </ul>
-                               </fieldset>
-                       </li>
-               </ul>
-               <p class="boutons">
-                       <input type="submit" name="tester" class="submit" value="<:facteur:tester:>" />
-               </p>
-       </div></form>
-</div>
-<script type="text/javascript">
-jQuery(function(){
-       jQuery('input[name=facteur_adresse_envoi]').change(function(){
-                       if (jQuery(this).attr('value')=='oui')
-                               jQuery('.editer_facteur_adresse_envoi_perso').show('fast');
-                       else
-                               jQuery('.editer_facteur_adresse_envoi_perso').hide('fast');
-       });
-       jQuery('input[name=facteur_smtp]').change(function(){
-                       if (jQuery(this).attr('value')=='oui')
-                               jQuery('.editer_facteur_smtp_param').show('fast');
-                       else
-                               jQuery('.editer_facteur_smtp_param').hide('fast');
-       });
-       jQuery('input[name=facteur_smtp_secure]').change(function(){
-               if (jQuery(this).attr('value')=='tls')
-                       jQuery('.editer_facteur_smtp_tls_allow_self_signed').show('fast');
-               else
-                       jQuery('.editer_facteur_smtp_tls_allow_self_signed').hide('fast');
-       });
-       jQuery('input[name=facteur_smtp_auth]').change(function(){
-                       if (jQuery(this).attr('value')=='oui')
-                               jQuery('#smtp-auth').show('fast');
-                       else
-                               jQuery('#smtp-auth').hide('fast');
-       });
-})
-</script>
diff --git a/www/plugins/facteur/formulaires/configurer_facteur.php b/www/plugins/facteur/formulaires/configurer_facteur.php
deleted file mode 100644 (file)
index 2b731d1..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-/**
- * Plugin Facteur 2
- * (c) 2009-2011 Collectif SPIP
- * Distribue sous licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function formulaires_configurer_facteur_charger_dist() {
-       include_spip('inc/config');
-       $valeurs = array(
-               'facteur_adresse_envoi'             => lire_config('facteur_adresse_envoi'),
-               'facteur_adresse_envoi_nom'         => lire_config('facteur_adresse_envoi_nom'),
-               'facteur_adresse_envoi_email'       => lire_config('facteur_adresse_envoi_email'),
-               'facteur_forcer_from'               => lire_config('facteur_forcer_from'),
-               'facteur_smtp'                      => lire_config('facteur_smtp'),
-               'facteur_smtp_host'                 => lire_config('facteur_smtp_host'),
-               'facteur_smtp_port'                 => lire_config('facteur_smtp_port', 25),
-               'facteur_smtp_auth'                 => lire_config('facteur_smtp_auth'),
-               'facteur_smtp_username'             => lire_config('facteur_smtp_username'),
-               'facteur_smtp_password'             => '',
-               '_facteur_smtp_password'            => lire_config('facteur_smtp_password'),
-               'facteur_smtp_secure'               => lire_config('facteur_smtp_secure'),
-               'facteur_smtp_tls_allow_self_signed'=> lire_config('facteur_smtp_tls_allow_self_signed'),
-               'facteur_smtp_sender'               => lire_config('facteur_smtp_sender'),
-               'facteur_filtre_images'             => lire_config('facteur_filtre_images'),
-               'facteur_filtre_iso_8859'           => lire_config('facteur_filtre_iso_8859'),
-               'facteur_cc'                        => lire_config('facteur_cc'),
-               'facteur_bcc'                       => lire_config('facteur_bcc'),
-               'email_test'                        => lire_config('facteur_adresse_envoi') == 'oui' ? lire_config('facteur_adresse_envoi_email') : $GLOBALS['meta']['email_webmaster'],
-               'tester'                            => '',
-       );
-
-       // recuperer le from par defaut actuel pour l'indiquer dans le formulaire
-       include_spip('classes/facteur');
-       $facteur = new Facteur('test@example.org', 'Test', '', '', array('adresse_envoi' => 'non'));
-       $valeurs['_from_defaut'] = $facteur->From;
-       if ($facteur->FromName) {
-               $valeurs['_from_defaut'] = $facteur->FromName . ' &lt;'.$valeurs['_from_defaut'].'&gt;';
-       }
-
-       return $valeurs;
-}
-
-function formulaires_configurer_facteur_verifier_dist() {
-       $erreurs = array();
-       include_spip('inc/config');
-       if ($email = _request('facteur_adresse_envoi_email')
-               and !email_valide($email)) {
-               $erreurs['facteur_adresse_envoi_email'] = _T('form_email_non_valide');
-               set_request('facteur_adresse_envoi', 'oui');
-       }
-       if (_request('facteur_smtp') == 'oui') {
-               if (!($h = _request('facteur_smtp_host'))) {
-                       $erreurs['facteur_smtp_host'] = _T('info_obligatoire');
-               } else {
-                       $h = trim($h);
-                       $regexp_ip_valide = '#^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$#';
-                       // Source : http://www.d-sites.com/2008/10/09/regex-ipv4-et-ipv6/
-                       if (!preg_match($regexp_ip_valide, $h)) { // ce n'est pas une IP
-                               if (!preg_match(';^([^.\s/?:]+[.])*[^.\s/?:]+$;', $h)
-                                       or gethostbyname($h) == $h) {
-                                       $erreurs['facteur_smtp_host'] = _T('facteur:erreur_invalid_host');
-                               }
-                       } else {
-                               if (gethostbyaddr($h) == $h) {
-                                       $erreurs['facteur_smtp_host'] = _T('facteur:erreur_invalid_host');
-                               }
-                       }
-                       set_request('facteur_smtp_host', $h);
-               }
-               if (!($p=_request('facteur_smtp_port'))) {
-                       $erreurs['facteur_smtp_port'] = _T('info_obligatoire');
-               } elseif (!preg_match(';^[0-9]+$;', $p) or !intval($p)) {
-                       $erreurs['facteur_smtp_port'] = _T('facteur:erreur_invalid_port');
-               }
-
-               if (!_request('facteur_smtp_auth')) {
-                       $erreurs['facteur_smtp_auth'] = _T('info_obligatoire');
-               }
-
-               if (_request('facteur_smtp_auth')=='oui') {
-                       if (!_request('facteur_smtp_username')) {
-                               $erreurs['facteur_smtp_username'] = _T('info_obligatoire');
-                       }
-                       if (!_request('facteur_smtp_password') and !lire_config('facteur_smtp_password')) {
-                               $erreurs['facteur_smtp_password'] = _T('info_obligatoire');
-                       }
-               }
-       }
-       if ($emailcc = _request('facteur_cc')
-               and !email_valide($emailcc)) {
-               $erreurs['facteur_cc'] = _T('form_email_non_valide');
-       }
-       if ($emailbcc = _request('facteur_bcc')
-               and !email_valide($emailbcc)) {
-               $erreurs['facteur_bcc'] = _T('form_email_non_valide');
-       }
-
-       if (_request('tester')) {
-               if (!$email = _request('email_test')) {
-                       $erreurs['email_test'] = _T('info_obligatoire');
-               } elseif (!email_valide($email)) {
-                       $erreurs['email_test'] = _T('form_email_non_valide');
-               }
-       }
-
-
-       if (count($erreurs) > 0) {
-               $erreurs['message_erreur'] = _T('facteur:erreur_generale');
-       }
-       return $erreurs;
-}
-
-function formulaires_configurer_facteur_traiter_dist() {
-       include_spip('inc/meta');
-
-       $facteur_adresse_envoi = _request('facteur_adresse_envoi');
-       ecrire_meta('facteur_adresse_envoi', ($facteur_adresse_envoi=='oui')?'oui':'non');
-
-       $facteur_adresse_envoi_nom = _request('facteur_adresse_envoi_nom');
-       ecrire_meta('facteur_adresse_envoi_nom', $facteur_adresse_envoi_nom?$facteur_adresse_envoi_nom:'');
-
-       $facteur_adresse_envoi_email = _request('facteur_adresse_envoi_email');
-       ecrire_meta('facteur_adresse_envoi_email', $facteur_adresse_envoi_email?$facteur_adresse_envoi_email:'');
-
-       $facteur_forcer_from = _request('facteur_forcer_from');
-       ecrire_meta('facteur_forcer_from', ($facteur_forcer_from=='oui')?'oui':'non');
-
-       $facteur_smtp = _request('facteur_smtp');
-       ecrire_meta('facteur_smtp', ($facteur_smtp=='oui')?'oui':'non');
-
-       $facteur_smtp_host = _request('facteur_smtp_host');
-       ecrire_meta('facteur_smtp_host', $facteur_smtp_host?$facteur_smtp_host:'');
-
-       $facteur_smtp_port = _request('facteur_smtp_port');
-       ecrire_meta('facteur_smtp_port', strlen($facteur_smtp_port)?intval($facteur_smtp_port):'');
-
-       $facteur_smtp_auth = _request('facteur_smtp_auth');
-       ecrire_meta('facteur_smtp_auth', ($facteur_smtp_auth=='oui')?'oui':'non');
-
-       $facteur_smtp_username = _request('facteur_smtp_username');
-       ecrire_meta('facteur_smtp_username', $facteur_smtp_username);
-
-       if ($facteur_smtp_password = _request('facteur_smtp_password')) {
-               ecrire_meta('facteur_smtp_password', $facteur_smtp_password);
-       }
-
-       $facteur_smtp_secure = _request('facteur_smtp_secure');
-       ecrire_meta('facteur_smtp_secure', in_array($facteur_smtp_secure, array('non', 'ssl', 'tls')) ? $facteur_smtp_secure : 'non');
-
-       $facteur_smtp_tls_allow_self_signed = _request('facteur_smtp_tls_allow_self_signed');
-       ecrire_meta('facteur_smtp_tls_allow_self_signed', ($facteur_smtp_tls_allow_self_signed=='oui')?'oui':'non');
-
-       $facteur_smtp_sender = _request('facteur_smtp_sender');
-       ecrire_meta('facteur_smtp_sender', $facteur_smtp_sender);
-
-       ecrire_meta('facteur_filtre_images', intval(_request('facteur_filtre_images')));
-       ecrire_meta('facteur_filtre_iso_8859', intval(_request('facteur_filtre_iso_8859')));
-
-       $facteur_cc = _request('facteur_cc');
-       ecrire_meta('facteur_cc', $facteur_cc?$facteur_cc:'');
-
-       $facteur_bcc = _request('facteur_bcc');
-       ecrire_meta('facteur_bcc', $facteur_bcc?$facteur_bcc:'');
-
-
-       $res = array('message_ok' => _T('facteur:config_info_enregistree'));
-
-       // faut-il envoyer un message de test ?
-       if (_request('tester')) {
-               $res = array();
-               $destinataire = _request('email_test');
-               $err = facteur_envoyer_mail_test($destinataire, _T('facteur:corps_email_de_test'));
-               if ($err) {
-                       $res['message_erreur'] = $err;
-               } else {
-                       $res['message_ok'] = _T('facteur:email_test_envoye');
-               }
-       }
-
-       return $res;
-}
-
-/**
- * Fonction pour tester un envoi de mail ver sun destinataire
- * renvoie une erreur eventuelle ou rien si tout est OK
- * @param string $destinataire
- * @param string $titre
- * @return string
- *   message erreur ou vide si tout est OK
- */
-function facteur_envoyer_mail_test($destinataire, $titre) {
-
-       include_spip('classes/facteur');
-       $message_html   = recuperer_fond('emails/test_email_html', array());
-       $message_texte  = recuperer_fond('emails/test_email_texte', array());
-       $corps = array(
-               'html' => $message_html,
-               'texte' => $message_texte,
-               'exceptions' => true,
-       );
-
-       // passer par envoyer_mail pour bien passer par les pipeline et avoir tous les logs
-       $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
-       try {
-               $retour = $envoyer_mail($destinataire, $titre, $corps);
-       } catch (Exception $e) {
-               return $e->getMessage();
-       }
-
-       // si echec mais pas d'exception, on signale de regarder dans les logs
-       if (!$retour) {
-               return _T('facteur:erreur').' '._T('facteur:erreur_dans_log');
-       }
-
-       // tout est OK, pas d'erreur
-       return '';
-}
diff --git a/www/plugins/facteur/inc/envoyer_mail.php b/www/plugins/facteur/inc/envoyer_mail.php
deleted file mode 100644 (file)
index 6c9f746..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-<?php\r
-/*\r
- * Plugin Facteur 2\r
- * (c) 2009-2011 Collectif SPIP\r
- * Distribue sous licence GPL\r
- *\r
- */\r
-\r
-if (!defined("_ECRIRE_INC_VERSION")) return;\r
-\r
-include_spip('classes/facteur');\r
-// inclure le fichier natif de SPIP, pour les fonctions annexes\r
-include_once _DIR_RESTREINT."inc/envoyer_mail.php";\r
-\r
-/**\r
- * @param string $destinataire\r
- * @param string $sujet\r
- * @param string|array $corps\r
- *   au format string, c'est un corps d'email au format texte, comme supporte nativement par le core\r
- *   au format array, c'est un corps etendu qui peut contenir\r
- *     string texte : le corps d'email au format texte\r
- *     string html : le corps d'email au format html\r
- *     string from : email de l'envoyeur (prioritaire sur argument $from de premier niveau, deprecie)\r
- *     string nom_envoyeur : un nom d'envoyeur pour completer l'email from\r
- *     string cc : destinataires en copie conforme\r
- *     string bcc : destinataires en copie conforme cachee\r
- *     string|array repondre_a : une ou plusieurs adresses à qui répondre.\r
- *       On peut aussi donner une liste de tableaux du type :\r
- *         array('email' => 'test@exemple.com', 'nom' => 'Adresse de test')\r
- *       pour spécifier un nom d'envoyeur pour chaque adresse.\r
- *     string nom_repondre_a : le nom d'envoyeur pour compléter l'email repondre_a\r
- *     string adresse_erreur : addresse de retour en cas d'erreur d'envoi\r
- *     array pieces_jointes : listes de pieces a embarquer dans l'email, chacune au format array :\r
- *       string chemin : chemin file system pour trouver le fichier a embarquer\r
- *       string nom : nom du document tel qu'apparaissant dans l'email\r
- *       string encodage : encodage a utiliser, parmi 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\r
- *       string mime : mime type du document\r
- *     array headers : tableau d'en-tetes personalises, une entree par ligne d'en-tete\r
- *     bool exceptions : lancer une exception en cas d'erreur (false par defaut)\r
- * @param string $from (deprecie, utiliser l'entree from de $corps)\r
- * @param string $headers (deprecie, utiliser l'entree headers de $corps)\r
- * @return bool\r
- */\r
-function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers = "") {\r
-       $message_html   = '';\r
-       $message_texte  = '';\r
-       $nom_envoyeur = $cc = $bcc = $repondre_a = '';\r
-       $pieces_jointes = array();\r
-\r
-       // si $corps est un tableau -> fonctionnalites etendues\r
-       // avec entrees possible : html, texte, pieces_jointes, nom_envoyeur, ...\r
-       if (is_array($corps)) {\r
-               $message_html   = isset($corps['html']) ? $corps['html'] : "";\r
-               $message_texte  = isset($corps['texte']) ? nettoyer_caracteres_mail($corps['texte']) : "";\r
-               $pieces_jointes = isset($corps['pieces_jointes']) ? $corps['pieces_jointes'] : array();\r
-               $nom_envoyeur   = isset($corps['nom_envoyeur']) ? $corps['nom_envoyeur'] : "";\r
-               $from = isset($corps['from']) ? $corps['from']: $from;\r
-               $cc   = isset($corps['cc']) ? $corps['cc'] : "";\r
-               $bcc  = isset($corps['bcc']) ? $corps['bcc'] : "";\r
-               $repondre_a = isset($corps['repondre_a']) ? $corps['repondre_a'] : "";\r
-               $nom_repondre_a = isset($corps['nom_repondre_a']) ? $corps['nom_repondre_a'] : '';\r
-               $adresse_erreur = isset($corps['adresse_erreur']) ? $corps['adresse_erreur'] : "";\r
-               $headers = isset($corps['headers']) ? $corps['headers'] : $headers;\r
-               if (is_string($headers)){\r
-                       $headers = array_map('trim',explode("\n",$headers));\r
-                       $headers = array_filter($headers);\r
-               }\r
-       }\r
-       // si $corps est une chaine -> compat avec la fonction native SPIP\r
-       // gerer le cas ou le corps est du html avec un Content-Type: text/html dans les headers\r
-       else {\r
-               if (preg_match(',Content-Type:\s*text/html,ims',$headers)){\r
-                       $message_html   = $corps;\r
-               }\r
-               else {\r
-                       // Autodetection : tester si le mail est en HTML\r
-                       if (strpos($headers,"Content-Type:")===false\r
-                               AND strpos($corps,"<")!==false // eviter les tests suivants si possible\r
-                               AND $ttrim = trim($corps)\r
-                               AND substr($ttrim,0,1)=="<"\r
-                               AND substr($ttrim,-1,1)==">"\r
-                               AND stripos($ttrim,"</html>")!==false){\r
-\r
-                               if(!strlen($sujet)){\r
-                                       // dans ce cas on ruse un peu : extraire le sujet du title\r
-                                       if (preg_match(",<title>(.*)</title>,Uims",$corps,$m))\r
-                                               $sujet = $m[1];\r
-                                       else {\r
-                                               // fallback, on prend le body si on le trouve\r
-                                               if (preg_match(",<body[^>]*>(.*)</body>,Uims",$corps,$m))\r
-                                                       $ttrim = $m[1];\r
-\r
-                                               // et on extrait la premiere ligne de vrai texte...\r
-                                               // nettoyer le html et les retours chariots\r
-                                               $ttrim = textebrut($ttrim);\r
-                                               $ttrim = str_replace("\r\n", "\r", $ttrim);\r
-                                               $ttrim = str_replace("\r", "\n", $ttrim);\r
-                                               // decouper\r
-                                               $ttrim = explode("\n",trim($ttrim));\r
-                                               // extraire la premiere ligne de texte brut\r
-                                               $sujet = array_shift($ttrim);\r
-                                       }\r
-                               }\r
-                               $message_html   = $corps;\r
-                       }\r
-                       // c'est vraiment un message texte\r
-                       else\r
-                               $message_texte  = nettoyer_caracteres_mail($corps);\r
-               }\r
-               $headers = array_map('trim',explode("\n",$headers));\r
-               $headers = array_filter($headers);\r
-       }\r
-       $sujet = nettoyer_titre_email($sujet);\r
-\r
-       // si le mail est en texte brut, on l'encapsule dans un modele surchargeable\r
-       // pour garder le texte brut, il suffit de faire un modele qui renvoie uniquement #ENV*{texte}\r
-       if ($message_texte AND ! $message_html){\r
-               $message_html = recuperer_fond("emails/texte",array('texte'=>$message_texte,'sujet'=>$sujet));\r
-       }\r
-       // si le mail est en HTML sans alternative, la generer\r
-       if ($message_html AND !$message_texte){\r
-               $message_texte = facteur_mail_html2text($message_html);\r
-       }\r
-\r
-       $exceptions = false;\r
-       if (is_array($corps) AND isset($corps['exceptions'])){\r
-               $exceptions = $corps['exceptions'];\r
-       }\r
-\r
-       // mode TEST : forcer l'email\r
-       if (defined('_TEST_EMAIL_DEST')) {\r
-               if (!_TEST_EMAIL_DEST){\r
-                       spip_log($e="Envois bloques par la constante _TEST_EMAIL_DEST", 'mail.' . _LOG_ERREUR);\r
-                       if ($exceptions) {\r
-                               throw new Exception($e);\r
-                       }\r
-                       return false;\r
-               }\r
-               else\r
-                       $destinataire = _TEST_EMAIL_DEST;\r
-       }\r
-\r
-       // plusieurs destinataires peuvent etre fournis separes par des virgules\r
-       // c'est un format standard dans l'envoi de mail\r
-       // les passer au format array pour phpMailer\r
-       // mais ne pas casser si on a deja un array en entree\r
-       // si pas destinataire du courriel on renvoie false (eviter les warning PHP : ligne 464 de phpmailer-php5/class.phpmailer.php\r
-       // suppression des adresses de courriels invalides, si aucune valide, renvoyer false (eviter un warning PHP : ligne 464 de phpmailer-php5/class.phpmailer.php)\r
-       if (is_array($destinataire))\r
-               $destinataire = implode(", ",$destinataire);\r
-\r
-       if(strlen($destinataire) > 0){\r
-               $destinataire = array_map('trim',explode(",",$destinataire));\r
-               foreach ($destinataire as $key => $value) {\r
-                       if(!email_valide($value))\r
-                               unset($destinataire[$key]);\r
-               }\r
-               if(count($destinataire) == 0) {\r
-                       spip_log($e="Aucune adresse email de destination valable pour l'envoi du courriel.", 'mail.' . _LOG_ERREUR);\r
-                       if ($exceptions) {\r
-                               throw new Exception($e);\r
-                       }\r
-                       return false;\r
-               }\r
-       }\r
-       else {\r
-               if ($bcc) {\r
-                       // On peut envoyer de mail que en bcc\r
-                       $destinataire = '';\r
-               } else {\r
-                       spip_log($e="Aucune adresse email de destination valable pour l'envoi du courriel.", 'mail.' . _LOG_ERREUR);\r
-                       if ($exceptions) {\r
-                               throw new Exception($e);\r
-                       }\r
-                       return false;\r
-               }\r
-       }\r
-\r
-       // On crée l'objet Facteur (PHPMailer) pour le manipuler ensuite\r
-       $facteur = new Facteur($destinataire, $sujet, $message_html, $message_texte);\r
-       if (is_array($corps) AND isset($corps['exceptions'])){\r
-               $facteur->SetExceptions($corps['exceptions']);\r
-       }\r
-\r
-       // On ajoute le courriel de l'envoyeur s'il est fournit par la fonction\r
-       if (empty($from) AND empty($facteur->From)) {\r
-               $from = $GLOBALS['meta']["email_envoi"];\r
-               if (empty($from) OR !email_valide($from)) {\r
-                       spip_log("Meta email_envoi invalide. Le mail sera probablement vu comme spam.", 'mail.' . _LOG_ERREUR);\r
-                       if(is_array($destinataire) && count($destinataire) > 0)\r
-                               $from = $destinataire[0];\r
-                       else\r
-                               $from = $destinataire;\r
-               }\r
-       }\r
-\r
-       // "Marie Toto <Marie@toto.com>"\r
-       if (preg_match(",^([^<>\"]*)<([^<>\"]+)>$,i",$from,$m)){\r
-               $nom_envoyeur = trim($m[1]);\r
-               $from = trim($m[2]);\r
-       }\r
-       if (!empty($from)){\r
-               $facteur->From = $from;\r
-               // la valeur par défaut de la config n'est probablement pas valable pour ce mail,\r
-               // on l'écrase pour cet envoi\r
-               $facteur->FromName = $from;\r
-       }\r
-\r
-       // On ajoute le nom de l'envoyeur s'il fait partie des options\r
-       if ($nom_envoyeur)\r
-               $facteur->FromName = $nom_envoyeur;\r
-\r
-       // Si plusieurs emails dans le from, pas de Name !\r
-       if (strpos($facteur->From,",")!==false){\r
-               $facteur->FromName = "";\r
-       }\r
-\r
-       // S'il y a des copies à envoyer\r
-       if ($cc){\r
-               if (is_array($cc))\r
-                       foreach ($cc as $courriel)\r
-                               $facteur->AddCC($courriel);\r
-               else\r
-                       $facteur->AddCC($cc);\r
-       }\r
-\r
-       // S'il y a des copies cachées à envoyer\r
-       if ($bcc){\r
-               if (is_array($bcc))\r
-                       foreach ($bcc as $courriel)\r
-                               $facteur->AddBCC($courriel);\r
-               else\r
-                       $facteur->AddBCC($bcc);\r
-       }\r
-\r
-       // S'il y a une adresse de reply-to\r
-       if ($repondre_a) {\r
-               if (is_array($repondre_a)) {\r
-                       foreach ($repondre_a as $courriel) {\r
-                               if (is_array($courriel)) {\r
-                                       $facteur->AddReplyTo($courriel['email'], $courriel['nom']);\r
-                               } else {\r
-                                       $facteur->AddReplyTo($courriel);\r
-                               }\r
-                       }\r
-               } elseif ($nom_repondre_a) {\r
-                       $facteur->AddReplyTo($repondre_a, $nom_repondre_a);\r
-               } else {\r
-                       $facteur->AddReplyTo($repondre_a);\r
-               }\r
-       }\r
-\r
-       // S'il y a des pièces jointes on les ajoute proprement\r
-       if (count($pieces_jointes)) {\r
-               foreach ($pieces_jointes as $piece) {\r
-                       $facteur->AddAttachment(\r
-                               $piece['chemin'],\r
-                               isset($piece['nom']) ? $piece['nom']:'',\r
-                               (isset($piece['encodage']) AND in_array($piece['encodage'],array('base64', '7bit', '8bit', 'binary', 'quoted-printable'))) ? $piece['encodage']:'base64',\r
-                               isset($piece['mime']) ? $piece['mime']:Facteur::_mime_types(pathinfo($piece['chemin'], PATHINFO_EXTENSION))\r
-                       );\r
-               }\r
-       }\r
-\r
-       // Si une adresse email a été spécifiée pour les retours en erreur, on l'ajoute\r
-       if (!empty($adresse_erreur))\r
-               $facteur->Sender = $adresse_erreur;\r
-\r
-       // si entetes personalises : les ajouter\r
-       // attention aux collisions : si on utilise l'option cc de $corps\r
-       // et qu'on envoie en meme temps un header Cc: xxx, yyy\r
-       // on aura 2 lignes Cc: dans les headers\r
-       if (!empty($headers)) {\r
-               foreach($headers as $h){\r
-                       // verifions le format correct : il faut au moins un ":" dans le header\r
-                       // et on filtre le Content-Type: qui sera de toute facon fourni par facteur\r
-                       if (strpos($h,":")!==false\r
-                         AND strncmp($h,"Content-Type:",13)!==0)\r
-                               $facteur->AddCustomHeader($h);\r
-               }\r
-       }\r
-\r
-       // On passe dans un pipeline pour modifier tout le facteur avant l'envoi\r
-       $facteur = pipeline('facteur_pre_envoi', $facteur);\r
-\r
-       // On génère les headers\r
-       $head = $facteur->CreateHeader();\r
-\r
-       // Et c'est parti on envoie enfin\r
-       spip_log("mail via facteur\n$head"."Destinataire:".print_r($destinataire,true),'mail');\r
-       spip_log("mail\n$head"."Destinataire:".print_r($destinataire,true),'facteur');\r
-       $retour = $facteur->Send();\r
-\r
-       if (!$retour){\r
-               spip_log("Erreur Envoi mail via Facteur : ".print_r($facteur->ErrorInfo,true),'mail.'._LOG_ERREUR);\r
-       }\r
-\r
-       return $retour ;\r
-}\r
diff --git a/www/plugins/facteur/inc/facteur_classes.php b/www/plugins/facteur/inc/facteur_classes.php
deleted file mode 100644 (file)
index 2dbd35d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Plugin Facteur 2
- * (c) 2009-2011 Collectif SPIP
- * Distribue sous licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/*
- * Compatibilite avec plugins faisant un appel direct a ce fichier
- */
-include_spip('classes/facteur');
diff --git a/www/plugins/facteur/lang/facteur.xml b/www/plugins/facteur/lang/facteur.xml
deleted file mode 100644 (file)
index 94f5619..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<traduction module="facteur" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/facteur/trunk/lang/" reference="fr">
-       <langue code="de" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=de" total="55" traduits="55" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-               <traducteur nom="Torsten Willmann" lien="https://trad.spip.net/auteur/torsten-willmann" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=en" total="55" traduits="55" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Benitron" lien="https://trad.spip.net/auteur/benitron" />
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="jack31" lien="https://trad.spip.net/auteur/jack31" />
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=es" total="55" traduits="43" relire="0" modifs="7" nouveaux="5" pourcent="78.18">
-               <traducteur nom="dani" lien="https://trad.spip.net/auteur/dani" />
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fa" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=fa" total="55" traduits="41" relire="0" modifs="9" nouveaux="5" pourcent="74.55">
-               <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=fr" total="55" traduits="55" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=fr_tu" total="55" traduits="41" relire="0" modifs="9" nouveaux="5" pourcent="74.55">
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="it" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=it" total="55" traduits="40" relire="0" modifs="9" nouveaux="6" pourcent="72.73">
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=nl" total="55" traduits="55" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="oc_ni_mis" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=oc_ni_mis" total="55" traduits="43" relire="0" modifs="7" nouveaux="5" pourcent="78.18">
-               <traducteur nom="sylvain" lien="https://trad.spip.net/auteur/sylvain" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=pt_br" total="55" traduits="52" relire="0" modifs="0" nouveaux="3" pourcent="94.55">
-               <traducteur nom="placido" lien="https://trad.spip.net/auteur/placido" />
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/facteur?lang_cible=sk" total="55" traduits="45" relire="0" modifs="6" nouveaux="4" pourcent="81.82">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/facteur/lang/facteur_de.php b/www/plugins/facteur/lang/facteur_de.php
deleted file mode 100644 (file)
index 5c1e511..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'Die Konfiguration des Briefträgers wurde gespeichert.',
-       'configuration_adresse_envoi' => 'Standard-Absenderadresse',
-       'configuration_facteur' => 'Postbote',
-       'configuration_facteur_smtp_tls_allow_self_signed' => 'Validierung des SSL-Zertifikats',
-       'configuration_mailer' => 'Versandart',
-       'configuration_smtp' => 'Auswahl der Versandmethode',
-       'configuration_smtp_descriptif' => 'Im Zweifel hier die mail() Funktion von PHP eintragen.',
-       'corps_email_de_test' => 'Das ist ein Versandtest mit Sondärzeichen: Bär Größe Maß accentué',
-
-       // E
-       'email_envoye_par' => 'Absender @site@',
-       'email_test_envoye' => 'Die Testmail wurde fehlerfrei verschickt. Falls sie nicht richtig ankommt, bearbeiten sie ihre Serverkonfiguration oder kontaktieren sie den Administrator.',
-       'erreur' => 'Fehler',
-       'erreur_dans_log' => ' : mehr Details in der Logdatei',
-       'erreur_generale' => 'Konfigurationsfehler. Bitte Inhalt des Formulars korrigieren.',
-       'erreur_invalid_host' => 'falscher Servername',
-       'erreur_invalid_port' => 'falsche Portnummer',
-
-       // F
-       'facteur_adresse_envoi_email' => 'E-Mail :',
-       'facteur_adresse_envoi_nom' => 'Name:',
-       'facteur_bcc' => 'Blindkopie (BCC) :',
-       'facteur_cc' => 'Kopie (CC) :',
-       'facteur_copies' => 'Kopien:',
-       'facteur_copies_descriptif' => 'Eine Kopie der E-Mails wird an die angegebenen Adressen geschickt. Geben sie eine Adresse als Empfänger der Kopie bzw. Blindkopie an.',
-       'facteur_email_test' => 'Eine Testmail versenden an:',
-       'facteur_filtre_accents' => 'Sonderzeichen in HTML-Entitäten umwandeln (z.B. für Hotmail).',
-       'facteur_filtre_css' => 'Stile zwischen <head> und </head> zu "inline" Stilen umwandeln, sinnvoll für Webmail die inline-Stile externen vorzieht.',
-       'facteur_filtre_images' => 'Verlinkte Bilder in E-Mail einbetten',
-       'facteur_filtre_iso_8859' => 'Nach ISO-8859-1 umwandeln',
-       'facteur_filtres' => 'Filter',
-       'facteur_filtres_descriptif' => 'Beim Versand können die Mails durch mehrere Filter behandelt werden.',
-       'facteur_smtp_auth' => 'Autorisierung erforderlich:',
-       'facteur_smtp_auth_non' => 'nein',
-       'facteur_smtp_auth_oui' => 'ja',
-       'facteur_smtp_host' => 'Server:',
-       'facteur_smtp_password' => 'Passwort:',
-       'facteur_smtp_port' => 'Port:',
-       'facteur_smtp_secure' => 'Verschlüsselte Verbindung:',
-       'facteur_smtp_secure_non' => 'nein',
-       'facteur_smtp_secure_ssl' => 'SSL (obsolet)',
-       'facteur_smtp_secure_tls' => 'TLS (empfohlen)',
-       'facteur_smtp_sender' => 'Fehlercodes (optional)',
-       'facteur_smtp_sender_descriptif' => 'Legt im Kopf der Mail die Empfängeradresse für Fehlermeldungen fest (bzw. den Return-Path).',
-       'facteur_smtp_tls_allow_self_signed_non' => 'Das SSL-Zertifikat des SMTP-Servers ist von einer Zertifizierungsstelle erstellt worden (empfohlen).',
-       'facteur_smtp_tls_allow_self_signed_oui' => 'das SSL-Zertifikat des SMTP-Servers ist selbst signiert.',
-       'facteur_smtp_username' => 'Benutzername:',
-
-       // L
-       'label_facteur_forcer_from' => 'Diese Versandadresse anzeigen wenn  die Domain im Feld <tt>From</tt> nicht identisch ist',
-
-       // M
-       'message_identite_email' => 'Die Konfiguration des Plugins Postbote (facteur) überschreibt diese Adresse für den Mailversand.',
-
-       // N
-       'note_test_configuration' => 'Eine Mail wird an diese Adresse geschickt.',
-
-       // P
-       'personnaliser' => 'Individuelle Einstellungen',
-
-       // T
-       'tester' => 'Testen',
-       'tester_la_configuration' => 'Konfiguration testen',
-
-       // U
-       'utiliser_mail' => 'Funktion mail() von PHP verwenden',
-       'utiliser_reglages_site' => 'Einstellungen von SPIP verwenden: <br /><tt>@from@</tt> ',
-       'utiliser_smtp' => 'SMTP verwenden',
-
-       // V
-       'valider' => ' OK ',
-       'version_html' => 'HTML-Version.',
-       'version_texte' => 'Textversion.'
-);
diff --git a/www/plugins/facteur/lang/facteur_en.php b/www/plugins/facteur/lang/facteur_en.php
deleted file mode 100755 (executable)
index cbfdfef..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'Postman’s configuration is now saved',
-       'configuration_adresse_envoi' => 'Default sending address',
-       'configuration_facteur' => 'Postman',
-       'configuration_facteur_smtp_tls_allow_self_signed' => 'SSL certificate validation',
-       'configuration_mailer' => 'Sending method',
-       'configuration_smtp' => 'Choose your mailer',
-       'configuration_smtp_descriptif' => 'If you’re not sure about the settings, leave them set to "PHP mail".',
-       'corps_email_de_test' => 'This is a test email',
-
-       // E
-       'email_envoye_par' => 'Sent by @site@',
-       'email_test_envoye' => 'The test email was successfully sent. If you do not receive it correctly, check the configuration of your server or contact a server administrator.',
-       'erreur' => 'Error',
-       'erreur_dans_log' => ': check the log file for more details',
-       'erreur_generale' => 'There are one or more configuration errors. Please check the contents of the form.',
-       'erreur_invalid_host' => 'This host name is not valid',
-       'erreur_invalid_port' => 'This port number is not valid',
-
-       // F
-       'facteur_adresse_envoi_email' => 'Email:',
-       'facteur_adresse_envoi_nom' => 'Name:',
-       'facteur_bcc' => 'Blind Carbon Copy (BCC):',
-       'facteur_cc' => 'Carbon Copy (CC):',
-       'facteur_copies' => 'Copies',
-       'facteur_copies_descriptif' => 'An email will be sent to specified adresses. One Carbon Copy and/or one Blind Carbon Copy.',
-       'facteur_email_test' => 'Send a test email to:',
-       'facteur_filtre_accents' => 'Transform accents into their html entities (useful for Hotmail).',
-       'facteur_filtre_css' => 'Transform styles present between &lt;head&gt; and &lt;/head&gt; into inline styles, useful for webmails because inline styles overwrite external styles.',
-       'facteur_filtre_images' => 'Embed images referenced in emails',
-       'facteur_filtre_iso_8859' => 'Convert to ISO-8859-1',
-       'facteur_filtres' => 'Filters',
-       'facteur_filtres_descriptif' => 'Some filters can be applied before sending an email.',
-       'facteur_smtp_auth' => 'Requires authentication:',
-       'facteur_smtp_auth_non' => 'no',
-       'facteur_smtp_auth_oui' => 'yes',
-       'facteur_smtp_host' => 'Host:',
-       'facteur_smtp_password' => 'Password:',
-       'facteur_smtp_port' => 'Port:',
-       'facteur_smtp_secure' => 'Secure:',
-       'facteur_smtp_secure_non' => 'no',
-       'facteur_smtp_secure_ssl' => 'SSL (depreciated)',
-       'facteur_smtp_secure_tls' => 'TLS (recommended)',
-       'facteur_smtp_sender' => 'Return-Path (optional)',
-       'facteur_smtp_sender_descriptif' => 'Define the Return-Path in the mail header, useful for error feedback.',
-       'facteur_smtp_tls_allow_self_signed_non' => 'the SSL certificate of the SMTP server is issued by a Certificate Authority (recommended).',
-       'facteur_smtp_tls_allow_self_signed_oui' => 'the SSL certificate of the SMTP server is self-signed.',
-       'facteur_smtp_username' => 'Username:',
-
-       // L
-       'label_facteur_forcer_from' => 'Force this sending address when <tt>From</tt> is not on the same domain',
-
-       // M
-       'message_identite_email' => 'The configuration of the plugin "factor" preset this email address for sending emails.',
-
-       // N
-       'note_test_configuration' => 'A test email will be sent to this address.',
-
-       // P
-       'personnaliser' => 'Customize',
-
-       // T
-       'tester' => 'Test',
-       'tester_la_configuration' => 'Test the config',
-
-       // U
-       'utiliser_mail' => 'Use mail function from PHP',
-       'utiliser_reglages_site' => 'Use the SPIP site’s settings: <br /><tt>@from@</tt>',
-       'utiliser_smtp' => 'Use SMTP',
-
-       // V
-       'valider' => 'Submit',
-       'version_html' => 'HTML version.',
-       'version_texte' => 'Text version.'
-);
diff --git a/www/plugins/facteur/lang/facteur_es.php b/www/plugins/facteur/lang/facteur_es.php
deleted file mode 100644 (file)
index d85f748..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'La configuración del cartero fue guardada correctamente',
-       'configuration_adresse_envoi' => 'Configuración de la dirección de envío', # MODIF
-       'configuration_facteur' => 'Cartero',
-       'configuration_mailer' => 'Configuración del "mailer"', # MODIF
-       'configuration_smtp' => 'Elección del método de envío del correo electrónico',
-       'configuration_smtp_descriptif' => 'Si no estás seguro, elige la función de correo electrónico de PHP.',
-       'corps_email_de_test' => 'Éste es un mensaje de prueba acentuado',
-
-       // E
-       'email_envoye_par' => 'Enviado por @site@',
-       'email_test_envoye' => 'El correo electrónico de prueba se ha enviado correctamente. Si no lo recibes, verifica la configuración de tu servidor o contacta a un administrador del servicio. ',
-       'erreur' => 'Error',
-       'erreur_dans_log' => ': consulta el archivo de registro (log) para más detalles',
-       'erreur_generale' => 'Hay uno o más errores de configuración. Por favor, compruebe el contenido del formulario. ',
-       'erreur_invalid_host' => 'Este nombre de host es incorrecto',
-       'erreur_invalid_port' => 'Este número de puerto es incorrecto',
-
-       // F
-       'facteur_adresse_envoi_email' => 'Correo electrónico:',
-       'facteur_adresse_envoi_nom' => 'Nombre:',
-       'facteur_bcc' => 'Copia Oculta (CCO):',
-       'facteur_cc' => 'Copia (CC) :',
-       'facteur_copies' => 'Copias:', # MODIF
-       'facteur_copies_descriptif' => 'Un correo electrónico será enviado en copia a las direcciones definidas. Una sola dirección en copia y/o una sola dirección en copia oculta.',
-       'facteur_filtre_accents' => 'Transformar los acentos en su versión html (especialmente útil para Hotmail).',
-       'facteur_filtre_css' => 'Transformar los estilos contenidos entre <head> y </head> en estilos en línea, útil para los webmails porque los estilos lineales tienen prioridad sobre los estilos externos. ',
-       'facteur_filtre_images' => 'Incorporar las imágenes de referencia en los correos electrónicos',
-       'facteur_filtre_iso_8859' => 'Convertir en ISO-8859-1',
-       'facteur_filtres' => 'Filtros',
-       'facteur_filtres_descriptif' => 'Filtros pueden aplicarse a los correos electrónicos al ser enviados.',
-       'facteur_smtp_auth' => 'Requiere autenticación:',
-       'facteur_smtp_auth_non' => 'no',
-       'facteur_smtp_auth_oui' => 'sí',
-       'facteur_smtp_host' => 'Host:',
-       'facteur_smtp_password' => 'Contraseña:',
-       'facteur_smtp_port' => 'Puerto:',
-       'facteur_smtp_secure' => 'Conexión segura:',
-       'facteur_smtp_secure_non' => 'no',
-       'facteur_smtp_secure_ssl' => 'SSL (obsoleto)',
-       'facteur_smtp_secure_tls' => 'TLS (recomendado)',
-       'facteur_smtp_sender' => 'Rebote de errores (opcional)', # MODIF
-       'facteur_smtp_sender_descriptif' => 'Indica en el encabezado del correo electrónico la dirección de correo electrónico de rebote de errores (o "Return-Path"), y en caso de un envío a través del método SMTP indica, también, la dirección del remitente.', # MODIF
-       'facteur_smtp_username' => 'Nombre de usuario:',
-
-       // M
-       'message_identite_email' => 'La configuración del plugin "cartero" sobrecarga esta dirección de correo para el envío de correos.',
-
-       // N
-       'note_test_configuration' => 'Un correo electrónico se enviará a la dirección de envío definida (o aquélla del webmaster).', # MODIF
-
-       // P
-       'personnaliser' => 'Personalizar esta configuración',
-
-       // T
-       'tester' => 'Probar',
-       'tester_la_configuration' => 'Testar la configuración',
-
-       // U
-       'utiliser_mail' => 'Utilizar la función de correo electrónico de PHP',
-       'utiliser_reglages_site' => 'Utilizar la configuración del sitio SPIP: el nombre mostrado será el nombre del sitio SPIP y la dirección de correo electrónico será la del webmaster', # MODIF
-       'utiliser_smtp' => 'Utilizar SMTP',
-
-       // V
-       'valider' => 'Validar',
-       'version_html' => 'Versión HTML.',
-       'version_texte' => 'Versión texto.'
-);
diff --git a/www/plugins/facteur/lang/facteur_fa.php b/www/plugins/facteur/lang/facteur_fa.php
deleted file mode 100644 (file)
index 4354657..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'پيكربندي پستجي ثبت شده است.',
-       'configuration_adresse_envoi' => 'پيكربندي نشاني نامه ', # MODIF
-       'configuration_facteur' => 'پستچي',
-       'configuration_mailer' => 'پيكربندي نامه‌ رسان', # MODIF
-       'configuration_smtp' => 'انتخاب روش ارسال نامه',
-       'configuration_smtp_descriptif' => 'اگر در مورد تنظيمات مطمئن نيستيد، بگذاريد «پي.اچ.پي ميل» تنظيم كند. ',
-       'corps_email_de_test' => 'اين يك ايميل آزمايشي است.',
-
-       // E
-       'email_envoye_par' => 'ارسال شده توسط @site@',
-       'email_test_envoye' => 'ايميل آزمايشي با موفقيت ارسال شد. اگر آن را درست دريافت نكرده‌ايد، پيكربندي سرور خود را تعديل كنيد، يا با ادمين سرور تماس بگيريد. ',
-       'erreur' => 'خطا',
-       'erreur_dans_log' => 'براي جزئيات بيشتر فايل لاگ را چك كنيد:',
-       'erreur_generale' => 'يك يا چند خطار در پيكربندي وجود دارد. لطفاض محتويات فرم را چك كنيد.',
-       'erreur_invalid_host' => 'نام اين هاست معتبر نيست',
-       'erreur_invalid_port' => 'شماره اين پورت درست نيست.',
-
-       // F
-       'facteur_adresse_envoi_email' => 'ايميل: ',
-       'facteur_adresse_envoi_nom' => 'نام:‌',
-       'facteur_bcc' => 'كپي مخفي (بي.سي.سي): ',
-       'facteur_cc' => 'كپي غيرمخفي (سي.سي): ',
-       'facteur_copies' => 'كپي‌ها:‌', # MODIF
-       'facteur_copies_descriptif' => 'يك ايميل به نشاني مشخص شده ارسال خواهد شد. يك كپي غير مخفي و/يا يك كپي مخفي.',
-       'facteur_filtre_accents' => 'تبديل اكسان‌ها به اچ.تي.ام.ال (براي هاتميل مفيد است)',
-       'facteur_filtre_css' => 'تبديل استايل‌هاي مطالب بين <head> و </head> به استايل‌هاي  درخط، مفيد براي وب‌ميل‌ها، زيرا استايل‌هاي درخط بر استايل‌هاي بيروني اولويت مي‌يابند.',
-       'facteur_filtre_images' => 'گنجاندن تصويرهاي ارسالي در داخل ايميل‌ها',
-       'facteur_filtre_iso_8859' => 'تبديل به  ISO-8859-1',
-       'facteur_filtres' => 'فيلترها',
-       'facteur_filtres_descriptif' => 'فيلتر‌ها مي‌توانند پيش از ارسال ايميل‌ها مورد استفاده قرار بگيرند. ',
-       'facteur_smtp_auth' => 'مستلزم تأييد است: ',
-       'facteur_smtp_auth_non' => 'نه',
-       'facteur_smtp_auth_oui' => 'بله',
-       'facteur_smtp_host' => 'هاست: ',
-       'facteur_smtp_password' => 'گذر واژه:',
-       'facteur_smtp_port' => 'پورت:‌',
-       'facteur_smtp_secure' => 'ارتباط امن:‌',
-       'facteur_smtp_secure_non' => 'نه',
-       'facteur_smtp_secure_ssl' => 'اس.اس.ال', # MODIF
-       'facteur_smtp_secure_tls' => 'تي.ال.اس', # MODIF
-       'facteur_smtp_sender' => 'برگشت خطاها (دلبخواه)', # MODIF
-       'facteur_smtp_sender_descriptif' => 'تعيين مسير برگشت در بالاي ايميل مفيد براي خطاي فيدبك، همچنين در حالت اس.ام.تي.پي (پروتكل انتقال ساده نامه) فرستنده نامه را مشخص مي‌كمند. ', # MODIF
-       'facteur_smtp_username' => 'نام كاربر:‌',
-
-       // M
-       'message_identite_email' => 'پيكربندي پلاگين «پستچي» نشاني اين ايميل را براي ارسال ايميل‌ها تنظيم مي‌كند',
-
-       // N
-       'note_test_configuration' => 'يك ايميل به نشاني مرسوله تعيين شده (يا به نشاني وب مستر) ارسال خواهد شد', # MODIF
-
-       // P
-       'personnaliser' => 'شخصي سازي اين تنظيمات ',
-
-       // T
-       'tester' => 'آزمايش كردن',
-       'tester_la_configuration' => 'آزمايش پيكربندي ',
-
-       // U
-       'utiliser_mail' => 'ار كاركرد نامه پي.اچ.پي استفاده كنيد',
-       'utiliser_reglages_site' => 'استفاده از تنظيمات سايت اسپيپ: نام وب سايت نام فرستنده خواهد بود و نشاني ايميل نشاني ايميل وب مستر خواهد بود. ', # MODIF
-       'utiliser_smtp' => 'از اس.ام.تي.پي (پروتكل ارسال ساده نامه)‌ اسفتاده كنيد',
-
-       // V
-       'valider' => 'معتبر كردن',
-       'version_html' => 'نسخه اچ.تي.ام.ال',
-       'version_texte' => 'نسخه متني.'
-);
diff --git a/www/plugins/facteur/lang/facteur_fr.php b/www/plugins/facteur/lang/facteur_fr.php
deleted file mode 100755 (executable)
index 401e7cb..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/facteur/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'La configuration du facteur a bien été enregistrée',
-       'configuration_adresse_envoi' => 'Adresse d’envoi par défaut',
-       'configuration_facteur' => 'Facteur',
-       'configuration_facteur_smtp_tls_allow_self_signed' => 'Validation du certificat SSL',
-       'configuration_mailer' => 'Méthode d’envoi',
-       'configuration_smtp' => 'Choix de la méthode d’envoi de mail',
-       'configuration_smtp_descriptif' => 'Si vous n’êtes pas sûrs, choisissez la fonction mail de PHP.',
-       'corps_email_de_test' => 'Ceci est un email de test accentué',
-
-       // E
-       'email_envoye_par' => 'Envoyé par @site@',
-       'email_test_envoye' => 'L’email de test a correctement été envoyé. Si vous ne le recevez pas correctement, vérifiez la configuration de votre serveur ou contactez un administrateur du serveur.',
-       'erreur' => 'Erreur',
-       'erreur_dans_log' => ' : consultez le fichier log pour plus de détails',
-       'erreur_generale' => 'Il y a une ou plusieurs erreurs de configuration. Veuillez vérifier le contenu du formulaire.',
-       'erreur_invalid_host' => 'Ce nom d’hôte n’est pas correct',
-       'erreur_invalid_port' => 'Ce numéro de port n’est pas correct',
-
-       // F
-       'facteur_adresse_envoi_email' => 'Email :',
-       'facteur_adresse_envoi_nom' => 'Nom :',
-       'facteur_bcc' => 'Copie Cachée (BCC) :',
-       'facteur_cc' => 'Copie (CC) :',
-       'facteur_copies' => 'Copies',
-       'facteur_copies_descriptif' => 'Un email sera envoyé en copie aux adresses définies. Une seule adresse en copie et/ou une seule adresse en copie cachée.',
-       'facteur_email_test' => 'Envoyer un email de test à :',
-       'facteur_filtre_accents' => 'Transformer les accents en leur entités html (utile pour Hotmail notamment).',
-       'facteur_filtre_css' => 'Transformer les styles contenus entre <head> et </head> en des styles "en ligne", utile pour les webmails car les styles en ligne ont la priorité sur les styles externes.',
-       'facteur_filtre_images' => 'Embarquer les images référencées dans les emails',
-       'facteur_filtre_iso_8859' => 'Convertir en ISO-8859-1',
-       'facteur_filtres' => 'Filtres',
-       'facteur_filtres_descriptif' => 'Des filtres peuvent être appliqués aux emails au moment de l’envoi.',
-       'facteur_smtp_auth' => 'Requiert une authentification :',
-       'facteur_smtp_auth_non' => 'non',
-       'facteur_smtp_auth_oui' => 'oui',
-       'facteur_smtp_host' => 'Hôte :',
-       'facteur_smtp_password' => 'Mot de passe :',
-       'facteur_smtp_port' => 'Port :',
-       'facteur_smtp_secure' => 'Connexion sécurisée :',
-       'facteur_smtp_secure_non' => 'non',
-       'facteur_smtp_secure_ssl' => 'SSL (déprécié)',
-       'facteur_smtp_secure_tls' => 'TLS (recommandé)',
-       'facteur_smtp_sender' => 'Adresse de retour des erreurs (optionnel)',
-       'facteur_smtp_sender_descriptif' => 'Définit dans l’entête du mail l’adresse email de retour des erreurs (ou Return-Path)',
-       'facteur_smtp_tls_allow_self_signed_non' => 'le certificat SSL du serveur SMTP est émis par une Autorité de Certification (recommandé).',
-       'facteur_smtp_tls_allow_self_signed_oui' => 'le certificat SSL du serveur SMTP est auto-signé.',
-       'facteur_smtp_username' => 'Nom d’utilisateur :',
-
-       // L
-       'label_facteur_forcer_from' => 'Forcer cette adresse d’envoi quand le <tt>From</tt> n’est pas sur le même domaine',
-
-       // M
-       'message_identite_email' => 'La configuration du plugin "facteur" surcharge cette adresse email pour l’envoi de courriels.',
-
-       // N
-       'note_test_configuration' => 'Un email sera envoyé à cette adresse.',
-
-       // P
-       'personnaliser' => 'Personnaliser ces réglages',
-
-       // T
-       'tester' => 'Tester',
-       'tester_la_configuration' => 'Tester la configuration',
-
-       // U
-       'utiliser_mail' => 'Utiliser la fonction mail de PHP',
-       'utiliser_reglages_site' => 'Utiliser les réglages du site SPIP : <br /><tt>@from@</tt>',
-       'utiliser_smtp' => 'Utiliser SMTP',
-
-       // V
-       'valider' => 'Valider',
-       'version_html' => 'Version HTML.',
-       'version_texte' => 'Version texte.'
-);
diff --git a/www/plugins/facteur/lang/facteur_fr_tu.php b/www/plugins/facteur/lang/facteur_fr_tu.php
deleted file mode 100644 (file)
index d129ddf..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'La configuration du facteur a bien été enregistrée',
-       'configuration_adresse_envoi' => 'Configuration de l’adresse d’envoi', # MODIF
-       'configuration_facteur' => 'Facteur',
-       'configuration_mailer' => 'Configuration du mailer', # MODIF
-       'configuration_smtp' => 'Choix de la méthode d’envoi de mail',
-       'configuration_smtp_descriptif' => 'Si tu n’es pas sûr, choisis la fonction mail de PHP.',
-       'corps_email_de_test' => 'Ceci est un email de test accentué',
-
-       // E
-       'email_envoye_par' => 'Envoyé par @site@',
-       'email_test_envoye' => 'L’email de test a correctement été envoyé. Si tu ne le reçois pas correctement, vérifie la configuration de ton serveur ou contacte un administrateur du serveur.',
-       'erreur' => 'Erreur',
-       'erreur_dans_log' => ' : consulte le fichier log pour plus de détails',
-       'erreur_generale' => 'Il y a une ou plusieurs erreurs de configuration. Vérifie le contenu du formulaire.',
-       'erreur_invalid_host' => 'Ce nom d’hôte n’est pas correct',
-       'erreur_invalid_port' => 'Ce numéro de port n’est pas correct',
-
-       // F
-       'facteur_adresse_envoi_email' => 'Email :',
-       'facteur_adresse_envoi_nom' => 'Nom :',
-       'facteur_bcc' => 'Copie Cachée (BCC) :',
-       'facteur_cc' => 'Copie (CC) :',
-       'facteur_copies' => 'Copies :', # MODIF
-       'facteur_copies_descriptif' => 'Un email sera envoyé en copie aux adresses définies. Une seule adresse en copie et/ou une seule adresse en copie cachée.',
-       'facteur_filtre_accents' => 'Transformer les accents en leur entités html (utile pour Hotmail notamment).',
-       'facteur_filtre_css' => 'Transformer les styles contenus entre <head> et </head> en des styles "en ligne", utile pour les webmails car les styles en ligne ont la priorité sur les styles externes.',
-       'facteur_filtre_images' => 'Embarquer les images référencées dans les emails',
-       'facteur_filtre_iso_8859' => 'Convertir en ISO-8859-1',
-       'facteur_filtres' => 'Filtres',
-       'facteur_filtres_descriptif' => 'Des filtres peuvent être appliqués aux emails au moment de l’envoi.',
-       'facteur_smtp_auth' => 'Requiert une authentification :',
-       'facteur_smtp_auth_non' => 'non',
-       'facteur_smtp_auth_oui' => 'oui',
-       'facteur_smtp_host' => 'Hôte :',
-       'facteur_smtp_password' => 'Mot de passe :',
-       'facteur_smtp_port' => 'Port :',
-       'facteur_smtp_secure' => 'Connexion sécurisée :',
-       'facteur_smtp_secure_non' => 'non',
-       'facteur_smtp_secure_ssl' => 'SSL', # MODIF
-       'facteur_smtp_secure_tls' => 'TLS', # MODIF
-       'facteur_smtp_sender' => 'Retour des erreurs (optionnel)', # MODIF
-       'facteur_smtp_sender_descriptif' => 'Définit dans l’entête du mail l’adresse email de retour des erreurs (ou Return-Path), et lors d’un envoi via la méthode SMTP cela définit aussi l’adresse de l’envoyeur.', # MODIF
-       'facteur_smtp_username' => 'Nom d’utilisateur :',
-
-       // M
-       'message_identite_email' => 'La configuration du plugin "facteur" surcharge cette adresse email pour l’envoi de courriels.',
-
-       // N
-       'note_test_configuration' => 'Un email sera envoyé à l’adresse d’envoi définie (ou celle du webmaster).', # MODIF
-
-       // P
-       'personnaliser' => 'Personnaliser ces réglages',
-
-       // T
-       'tester' => 'Tester',
-       'tester_la_configuration' => 'Tester la configuration',
-
-       // U
-       'utiliser_mail' => 'Utiliser la fonction mail de PHP',
-       'utiliser_reglages_site' => 'Utiliser les réglages du site SPIP : le nom affiché sera le nom du site SPIP et l’adresse email sera celle du webmaster', # MODIF
-       'utiliser_smtp' => 'Utiliser SMTP',
-
-       // V
-       'valider' => 'Valider',
-       'version_html' => 'Version HTML.',
-       'version_texte' => 'Version texte.'
-);
diff --git a/www/plugins/facteur/lang/facteur_it.php b/www/plugins/facteur/lang/facteur_it.php
deleted file mode 100644 (file)
index d027e15..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=it
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'La configurazione di Facteur è stata registrata',
-       'configuration_adresse_envoi' => 'Configurazione dell’indirizzo emittente', # MODIF
-       'configuration_mailer' => 'Configurazione del mailer', # MODIF
-       'configuration_smtp' => 'Scelta del metodo d’invio di mail',
-       'configuration_smtp_descriptif' => 'Se no siete sicuri, scegliete la funzione mail di PHP.',
-       'corps_email_de_test' => 'Questo è un mail di prova con accento',
-
-       // E
-       'email_envoye_par' => 'Inviato da @site@',
-       'email_test_envoye' => 'La mail di prova è stata correttamente inviata. Se non la ricevete correttamente, verficate la configurazione del server o contattate un amministratore del server.',
-       'erreur' => 'Errorr',
-       'erreur_dans_log' => ': consultate il file log per maggiori dettagli',
-       'erreur_generale' => 'Ci sono uno o più errori di configurazione. Verificate il contenuto del formulario.',
-       'erreur_invalid_host' => 'Questo nome di host non è corretto',
-       'erreur_invalid_port' => 'Questu numero di porta non è corretto',
-
-       // F
-       'facteur_adresse_envoi_email' => 'Email:',
-       'facteur_adresse_envoi_nom' => 'Cognome:',
-       'facteur_bcc' => 'Copia nascosta (CCN):',
-       'facteur_cc' => 'Copia (CC):',
-       'facteur_copies' => 'Copie:', # MODIF
-       'facteur_copies_descriptif' => 'Una mail sarà mandata in copia agli indirizzi definiti. Un solo indirizzo in copia e/o un solo indirizzo in copia nascosta.',
-       'facteur_filtre_accents' => 'Trasformate gli accenti nella loro entity html (utile sopratutto per Hotmail).',
-       'facteur_filtre_css' => 'Trasformare gli stili contenuti tra <head> e </head> negli stili "in linea", utile per le webmail perché gli stili in linea hanno la precedenza sugli stili estermi.',
-       'facteur_filtre_images' => 'Integrate le immagini citate nelle mail',
-       'facteur_filtre_iso_8859' => 'Convertire in ISO-8859-1',
-       'facteur_filtres' => 'Filtri',
-       'facteur_filtres_descriptif' => 'Alcuni filtri possono essere applicati alle mail al momento dell’invio.',
-       'facteur_smtp_auth' => 'Richiede un’autenticazione:',
-       'facteur_smtp_auth_non' => 'no',
-       'facteur_smtp_auth_oui' => 'si',
-       'facteur_smtp_host' => 'Host:',
-       'facteur_smtp_password' => 'Password:',
-       'facteur_smtp_port' => 'Porta:',
-       'facteur_smtp_secure' => 'Connessione sicura:',
-       'facteur_smtp_secure_non' => 'no',
-       'facteur_smtp_secure_ssl' => 'SSL', # MODIF
-       'facteur_smtp_secure_tls' => 'TLS', # MODIF
-       'facteur_smtp_sender' => 'Resoconto degli errori (opzionale)', # MODIF
-       'facteur_smtp_sender_descriptif' => 'Definisce nella testata della mail l’indirizzo mail di resoconto degli errori (o Return-Path), e durante l’invio tramite il metodo SMTP definisce anche l’indirizzo del mittente.', # MODIF
-       'facteur_smtp_username' => 'Nome dell’utente:',
-
-       // M
-       'message_identite_email' => 'La configurazione del plugin "facteur" sovraccarica questo indirizzo mail per l’invio della posta.',
-
-       // N
-       'note_test_configuration' => 'Una mail sarà inviata all’indirizzo definito (o all’indirizzo del webmaster).', # MODIF
-
-       // P
-       'personnaliser' => 'Personnalizzate questi impostazioni',
-
-       // T
-       'tester' => 'Provare',
-       'tester_la_configuration' => 'Provare la configurazione',
-
-       // U
-       'utiliser_mail' => 'Usare la funzione mail di PHP',
-       'utiliser_reglages_site' => 'Usare le impostazioni del sito SPIP: il nome visualizzato sarà il nome del sito SPIP e l’indirizzo mail sarà quello del webmaster', # MODIF
-       'utiliser_smtp' => 'Utilisare SMTP',
-
-       // V
-       'valider' => 'Confermare',
-       'version_html' => 'Versione HTML.',
-       'version_texte' => 'Versione testo.'
-);
diff --git a/www/plugins/facteur/lang/facteur_nl.php b/www/plugins/facteur/lang/facteur_nl.php
deleted file mode 100644 (file)
index bed0fee..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'De configuratie is opgeslagen',
-       'configuration_adresse_envoi' => 'Configuratie van het verzendadres',
-       'configuration_facteur' => 'Postbode',
-       'configuration_facteur_smtp_tls_allow_self_signed' => 'Validatie van het SSL certificaat',
-       'configuration_mailer' => 'Configuratie van de mailer',
-       'configuration_smtp' => 'Verzendwijze',
-       'configuration_smtp_descriptif' => 'Kies, wanneer je twijfelt voor de functie PHP mail.',
-       'corps_email_de_test' => 'Dit is een geaccentueerd testbericht',
-
-       // E
-       'email_envoye_par' => 'Verzonden door @site@',
-       'email_test_envoye' => 'Het testbericht is verzonden. Ontvang je het niet juist, controleer dan de configuratie van de server.',
-       'erreur' => 'Fout',
-       'erreur_dans_log' => ': meer details in het logbestand',
-       'erreur_generale' => 'Een of meerdere fouten in de configuratie. Controleer de inhoud van dit formulier.',
-       'erreur_invalid_host' => 'Deze hostnaam is onjuist',
-       'erreur_invalid_port' => 'Dit poortnummer is onjuist',
-
-       // F
-       'facteur_adresse_envoi_email' => 'Email:',
-       'facteur_adresse_envoi_nom' => 'Naam:',
-       'facteur_bcc' => 'Verborgen (BCC) :',
-       'facteur_cc' => 'Kopie (CC) :',
-       'facteur_copies' => 'Kopieën:',
-       'facteur_copies_descriptif' => 'Deze adressen worden in kopie van de email gezet. Niet meer dan één adres in kopie en/of in verborgen kopie.',
-       'facteur_email_test' => 'Een test email sturen naar:',
-       'facteur_filtre_accents' => 'Zet tekens met accenten om in hun html-code (met name voor Hotmail).',
-       'facteur_filtre_css' => 'Zet de stijlen binnen &lt;head&gt; en &lt;/head&gt; om in "inline" stijlen, wat zinvol is voor webmails.',
-       'facteur_filtre_images' => 'Voeg afbeeldingen in',
-       'facteur_filtre_iso_8859' => 'Omzetten in ISO-8859-1',
-       'facteur_filtres' => 'Filters',
-       'facteur_filtres_descriptif' => 'Bij het verzenden kunnen bepaalde filters worden toegepast.',
-       'facteur_smtp_auth' => 'Vereist authentificatie:',
-       'facteur_smtp_auth_non' => 'nee',
-       'facteur_smtp_auth_oui' => 'ja',
-       'facteur_smtp_host' => 'Host:',
-       'facteur_smtp_password' => 'Wachtwoord:',
-       'facteur_smtp_port' => 'Poort:',
-       'facteur_smtp_secure' => 'Beveiligde verbinding:',
-       'facteur_smtp_secure_non' => 'nee',
-       'facteur_smtp_secure_ssl' => 'SSL (gedeprecieerd)',
-       'facteur_smtp_secure_tls' => 'TLS (aanbevolen)',
-       'facteur_smtp_sender' => 'Return-Path (optioneel)',
-       'facteur_smtp_sender_descriptif' => 'Geef het Return-Path voor de mail aan, bv voor feedback. In SMTP bepaalt het het emailadres van de verzender.',
-       'facteur_smtp_tls_allow_self_signed_non' => 'het SSL certificaat van de SMTP server is uitgegeven door een Certificaatautoriteit (aanbevolen).',
-       'facteur_smtp_tls_allow_self_signed_oui' => 'het SSL certificaat van de SMTP server is auto-signé.',
-       'facteur_smtp_username' => 'Naam van de gebruiker:',
-
-       // L
-       'label_facteur_forcer_from' => 'Forceer dit verzendadres wanneer de <tt>From</tt> niet tot hetzelfde domein behoort',
-
-       // M
-       'message_identite_email' => 'De configuratie van plugin "facteur" laadt dit e-mailadres voor het verzenden van mails.',
-
-       // N
-       'note_test_configuration' => 'Een mail wordt naar het aangegeven adres (of naar de webmaster) verzonden.',
-
-       // P
-       'personnaliser' => 'Personaliseren',
-
-       // T
-       'tester' => 'Testen',
-       'tester_la_configuration' => 'Configuratietest',
-
-       // U
-       'utiliser_mail' => 'Gebruik de PHP mail functie',
-       'utiliser_reglages_site' => 'Gebruik de instellingen van SPIP: <br /><tt>@from@</tt><br/>De getoonde naam is die van de site en het adres dat van de webmaster',
-       'utiliser_smtp' => 'Gebruik SMTP',
-
-       // V
-       'valider' => 'Bevestigen',
-       'version_html' => 'HTML-versie.',
-       'version_texte' => 'Tekstversie.'
-);
diff --git a/www/plugins/facteur/lang/facteur_oc_ni_mis.php b/www/plugins/facteur/lang/facteur_oc_ni_mis.php
deleted file mode 100644 (file)
index 90fe4f2..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=oc_ni_mis
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'La counfiguracioun dóu fatour es ben estada registrada',
-       'configuration_adresse_envoi' => 'Counfiguracioun de l’adressa de spedissioun', # MODIF
-       'configuration_facteur' => 'Fatour',
-       'configuration_mailer' => 'Counfiguracioun dóu mailer', # MODIF
-       'configuration_smtp' => 'Chausida de la mètodou de spedissioun de mail',
-       'configuration_smtp_descriptif' => 'Se noun sias segur, chaussissès la founcioun mail de PHP.',
-       'corps_email_de_test' => 'Aiçòt es un e-mail de prova achentat',
-
-       // E
-       'email_envoye_par' => 'Mandat da @site@',
-       'email_test_envoye' => 'L’e-mail de prova es ben estat mandat. Se noun lou recevès courretamen, verificàs la counfiguracioun dóu vouòstre servidou o countatàs un aministratour dóu servidou.',
-       'erreur' => 'Errour',
-       'erreur_dans_log' => ' : counsultàs lou fichié log per mai de detai',
-       'erreur_generale' => 'Lì a, au màncou, un errour de counfiguracioun. Vourguès verificà lou countengut dóu fourmulari.',
-       'erreur_invalid_host' => 'Aquestou noum d’oste es pas courret',
-       'erreur_invalid_port' => 'Aquestou nùmero de pouòrt es pas courret',
-
-       // F
-       'facteur_adresse_envoi_email' => 'E-mail :',
-       'facteur_adresse_envoi_nom' => 'Noum :',
-       'facteur_bcc' => 'Còpia Escounduda (BCC) :',
-       'facteur_cc' => 'Còpia (CC) :',
-       'facteur_copies' => 'Còpia :', # MODIF
-       'facteur_copies_descriptif' => 'Un e-mail serà mandat en còpia ai adressa definidi. Basta una adressa en còpia e/o basta una adressa en còpia escounduda.',
-       'facteur_filtre_accents' => 'Trasfourmà lu achent en li siéu entità html (utile per Hotmail per isemple).',
-       'facteur_filtre_css' => 'Trasfourmà lu estil countengut tra <head> e </head> en dei estil "en ligna", utile per lu webmail perqué lu estil en ligna an la priourità soubre lu estil estèrnou.',
-       'facteur_filtre_images' => 'Embarcà li image referençadi en lu e-mail',
-       'facteur_filtre_iso_8859' => 'Counvertì en ISO-8859-1',
-       'facteur_filtres' => 'Filtre',
-       'facteur_filtres_descriptif' => 'Dei filtre pouòdon estre aplicat ai e-mail au moumen de la spedissioun.',
-       'facteur_smtp_auth' => 'Necessita una autentificacioun :',
-       'facteur_smtp_auth_non' => 'noun',
-       'facteur_smtp_auth_oui' => 'ahì',
-       'facteur_smtp_host' => 'Oste :',
-       'facteur_smtp_password' => 'Mot de passa :',
-       'facteur_smtp_port' => 'Pouòrt :',
-       'facteur_smtp_secure' => 'Counessioun seguritada :',
-       'facteur_smtp_secure_non' => 'noun',
-       'facteur_smtp_secure_ssl' => 'SSL (oussoulet)',
-       'facteur_smtp_secure_tls' => 'TLS (racoumandat)',
-       'facteur_smtp_sender' => 'Retour dei errour (oupciounal)', # MODIF
-       'facteur_smtp_sender_descriptif' => 'Definit en l’entestacioun dóu e-mail de retour dei errour  (o Return-Path), e dóu tems d’una spedissioun vìa lou mètodou SMTP acò definit finda l’adressa de l’espeditour.', # MODIF
-       'facteur_smtp_username' => 'Noum d’utilisaire :',
-
-       // M
-       'message_identite_email' => 'Lou counfiguracioun dóu plugin "fatour" soubre-scriéu aquela adressa e-mail per la spedissioun.',
-
-       // N
-       'note_test_configuration' => 'Un e-mail serà mandat a l’adressa de spedissioun definida (o aquela dóu webmèstre).', # MODIF
-
-       // P
-       'personnaliser' => 'Persounalisà aquestu reglage',
-
-       // T
-       'tester' => 'Prouvà',
-       'tester_la_configuration' => 'Prouvà la counfiguracioun',
-
-       // U
-       'utiliser_mail' => 'Utilisà la founcioun mail de PHP',
-       'utiliser_reglages_site' => 'Utilisà lu reglage dóu sit SPIP : lou noum afichat serà lou noum dóu sit SPIP et l’adressa e-mail serà aquela dóu webmèstre', # MODIF
-       'utiliser_smtp' => 'Utilisà SMTP',
-
-       // V
-       'valider' => 'Validà',
-       'version_html' => 'Versioun HTML.',
-       'version_texte' => 'Versioun tèst.'
-);
diff --git a/www/plugins/facteur/lang/facteur_pt_br.php b/www/plugins/facteur/lang/facteur_pt_br.php
deleted file mode 100644 (file)
index 4aed573..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'A configuração do Carteiro foi gravada corretamente',
-       'configuration_adresse_envoi' => 'Endereço de envio padrão',
-       'configuration_facteur' => 'Carteiro',
-       'configuration_mailer' => 'Método de envio',
-       'configuration_smtp' => 'Seleção do método de envio de e-mail',
-       'configuration_smtp_descriptif' => 'Se tiver dúvida, escolha a função mail do PHP.',
-       'corps_email_de_test' => 'Este é um e-mail de teste acentuado',
-
-       // E
-       'email_envoye_par' => 'Enviado por @site@',
-       'email_test_envoye' => 'O e-mail de teste foi enviado corretamente. Se você não o receber, verifique a configuração do seu servidor ou contate o administrador do servidor.',
-       'erreur' => 'Erro',
-       'erreur_dans_log' => ' : consulte o arquivo de log para obter mais detalhes',
-       'erreur_generale' => 'Há um ou mais erros de configuração. Por favor, verifique o conteúdo do formulário.',
-       'erreur_invalid_host' => 'Este nome de host não está correto',
-       'erreur_invalid_port' => 'Este número de porta não está correto',
-
-       // F
-       'facteur_adresse_envoi_email' => 'E-mail:',
-       'facteur_adresse_envoi_nom' => 'Nome:',
-       'facteur_bcc' => 'Cópia Oculta (BCC):',
-       'facteur_cc' => 'Cópia (CC):',
-       'facteur_copies' => 'Cópias',
-       'facteur_copies_descriptif' => 'Um e-mail será enviado em cópia para os endereços especificados. Um único endereço em cópia e/ou um único endereço em cópia oculta.',
-       'facteur_email_test' => 'Enviar um e-mail de teste para:',
-       'facteur_filtre_accents' => 'Transformar os acentos em entidades HTML (útil especialmente para o Hotmail).',
-       'facteur_filtre_css' => 'Transformaros estílos contidos entre <head> e </head> em estilos "em linha", útil para os webmails, já que os estilos em linha têm prioridade sobre os estilos externos.',
-       'facteur_filtre_images' => 'Embutir as imagens referenciadas no próprio e-mail',
-       'facteur_filtre_iso_8859' => 'Converter em ISO-8859-1',
-       'facteur_filtres' => 'Filtros',
-       'facteur_filtres_descriptif' => 'Filtros podem ser aplicados aos e-mails, no momento do envio.',
-       'facteur_smtp_auth' => 'Requer autenticação:',
-       'facteur_smtp_auth_non' => 'não',
-       'facteur_smtp_auth_oui' => 'sim',
-       'facteur_smtp_host' => 'Host:',
-       'facteur_smtp_password' => 'Senha:',
-       'facteur_smtp_port' => 'Porta:',
-       'facteur_smtp_secure' => 'Conexão segura:',
-       'facteur_smtp_secure_non' => 'náo',
-       'facteur_smtp_secure_ssl' => 'SSL (obsoleto)',
-       'facteur_smtp_secure_tls' => 'TLS (recomendado)',
-       'facteur_smtp_sender' => 'Endereço pelo retorno dos erros (opcional)',
-       'facteur_smtp_sender_descriptif' => 'Informa, no cabeçalho da mensagem, o endereço de e-mail de retorno dos erros (ou Return-Path)',
-       'facteur_smtp_username' => 'Nome do usuário:',
-
-       // L
-       'label_facteur_forcer_from' => 'Forçar o endereço de envio quando o <tt>From</tt> não é no mesmo domínio.',
-
-       // M
-       'message_identite_email' => 'A configuração do plugin "Carteiro" define este endereço de e-mail para o envio das mensagens.',
-
-       // N
-       'note_test_configuration' => 'Um e-mail será enviado a este endereço.',
-
-       // P
-       'personnaliser' => 'Personalizar essas configurações',
-
-       // T
-       'tester' => 'Testar',
-       'tester_la_configuration' => 'Testar a configuração',
-
-       // U
-       'utiliser_mail' => 'Usar a função mail do PHP',
-       'utiliser_reglages_site' => 'Usar as configurações do site SPIP:  : <br /><tt>@from@</tt> ',
-       'utiliser_smtp' => 'Usar SMTP',
-
-       // V
-       'valider' => 'Validar',
-       'version_html' => 'Versão HTML.',
-       'version_texte' => 'Versão texto.'
-);
diff --git a/www/plugins/facteur/lang/facteur_sk.php b/www/plugins/facteur/lang/facteur_sk.php
deleted file mode 100644 (file)
index 37fdbe5..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/facteur?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'config_info_enregistree' => 'Nastavenia Poštára sa uložili správne',
-       'configuration_adresse_envoi' => 'Nastavenie adresy odosielateľa', # MODIF
-       'configuration_facteur' => 'Poštár',
-       'configuration_mailer' => 'Nastavenia Poštára', # MODIF
-       'configuration_smtp' => 'Výber spôsobu odoslania e-mailu',
-       'configuration_smtp_descriptif' => 'Ak si nie ste istý, zvoľte si funkciu mail jazyka PHP.',
-       'corps_email_de_test' => 'Toto je testovací e-mail s diakritikou',
-
-       // E
-       'email_envoye_par' => 'Odoslané z @site@',
-       'email_test_envoye' => 'Testovací e-mail bol úspešne odoslaný. Ak ho nedostanete, skontrolujte nastavenia svojho servera alebo sa obráťte na administrátora servera.',
-       'erreur' => 'Chyba',
-       'erreur_dans_log' => ' : viac podrobností nájdete v súbore log',
-       'erreur_generale' => 'V nastaveniach je jedna alebo viac chýb. Prosím, skontrolujte obsah formulára.',
-       'erreur_invalid_host' => 'Názov servera nie je správny',
-       'erreur_invalid_port' => 'Toto číslo portu nie je správne',
-
-       // F
-       'facteur_adresse_envoi_email' => 'E-mail:',
-       'facteur_adresse_envoi_nom' => '(Obchodné) meno:',
-       'facteur_bcc' => 'Skrytá kópia (BCC):',
-       'facteur_cc' => 'Kópia (CC):',
-       'facteur_copies' => 'Kópie:', # MODIF
-       'facteur_copies_descriptif' => 'Kópia e-mailu sa pošle na zadané adresy. Na jednu adresu bude odoslaná bežná kópia a/lebo skrytá kópia.',
-       'facteur_email_test' => 'Skúšobný e-mail poslať na adresu:',
-       'facteur_filtre_accents' => 'Diakritiku meniť na entity html (užitočné najmä pre Hotmail).',
-       'facteur_filtre_css' => 'Zmeniť štýly medzi <head> a </head> na "in-line" štýly, užitočné pre webmaily, lebo in-line štýly majú prednosť pred externými.',
-       'facteur_filtre_images' => 'Do e-mailov pridávať obrázky, na ktoré sa v nich odkazuje',
-       'facteur_filtre_iso_8859' => 'Zmeniť na ISO-8859-1',
-       'facteur_filtres' => 'Filtre',
-       'facteur_filtres_descriptif' => 'Pri posielaní sa na e-maily môžu použiť filtre.',
-       'facteur_smtp_auth' => 'Vyžaduje sa prihlásenie:',
-       'facteur_smtp_auth_non' => 'nie',
-       'facteur_smtp_auth_oui' => 'áno',
-       'facteur_smtp_host' => 'Host:',
-       'facteur_smtp_password' => 'Heslo:',
-       'facteur_smtp_port' => 'Port:',
-       'facteur_smtp_secure' => 'Zabezpečené pripojenie:',
-       'facteur_smtp_secure_non' => 'nie',
-       'facteur_smtp_secure_ssl' => 'SSL (zastarané)',
-       'facteur_smtp_secure_tls' => 'TLS (odporúča sa)',
-       'facteur_smtp_sender' => 'Vypísanie chýb (nepovinné)', # MODIF
-       'facteur_smtp_sender_descriptif' => 'Zadané v hlavičke návratnej e-mailovej adresy pri chybe (alebo Return-Path) a pri jej odoslaní metódou SMTP je aj adresou odosielateľa.', # MODIF
-       'facteur_smtp_username' => 'Používateľské meno:',
-
-       // M
-       'message_identite_email' => 'Nastavenia zásuvného modulu "Poštár" predvolili túto e-mailovú adresu na posielanie e-mailov.',
-
-       // N
-       'note_test_configuration' => 'E-mail bude odoslaný na túto adresu.',
-
-       // P
-       'personnaliser' => 'Prispôsobiť si tieto nastavenia',
-
-       // T
-       'tester' => 'Otestovať',
-       'tester_la_configuration' => 'Otestovať nastavenia',
-
-       // U
-       'utiliser_mail' => 'Používať funkciu mail z PHP',
-       'utiliser_reglages_site' => 'Použiť nastavenia stránky v SPIPe: zobrazovaný názov je názov stránky a e-mailová adresa je e-mail webmastera', # MODIF
-       'utiliser_smtp' => 'Používať SMTP',
-
-       // V
-       'valider' => 'Potvrdiť',
-       'version_html' => 'HTML verzia.',
-       'version_texte' => 'Textová verzia.'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur.xml b/www/plugins/facteur/lang/paquet-facteur.xml
deleted file mode 100644 (file)
index e85115b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<traduction module="paquet-facteur" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/facteur/trunk/lang/" reference="fr">
-       <langue code="de" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=de" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=en" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=es" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=fr" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=fr_tu" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=nl" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=pt_br" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=ru" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=sk" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/facteur/lang/paquet-facteur_de.php b/www/plugins/facteur/lang/paquet-facteur_de.php
deleted file mode 100755 (executable)
index c45d214..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'Der Postbote befördert Emails im HTML-Format, im Nur-Text-Format oder in beiden, egal ob per SMTP oder nicht.',
-       'facteur_nom' => 'Postbote',
-       'facteur_slogan' => 'Er befördert ihre Emails'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_en.php b/www/plugins/facteur/lang/paquet-facteur_en.php
deleted file mode 100644 (file)
index 3e458c7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'Postman delivers emails in HTML, text or mixed format; via SMTP or not',
-       'facteur_nom' => 'Postman',
-       'facteur_slogan' => 'He delivers emails'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_es.php b/www/plugins/facteur/lang/paquet-facteur_es.php
deleted file mode 100644 (file)
index 7bf6260..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => '"Cartero" se ocupa de la distribución de correos electrónicos en formato HTML, texto o mixto; vía SMTP o no',
-       'facteur_nom' => 'Cartero',
-       'facteur_slogan' => 'Distribuye sus correos electrónicos'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_fr.php b/www/plugins/facteur/lang/paquet-facteur_fr.php
deleted file mode 100644 (file)
index b903c88..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/facteur/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'Facteur s’occupe de la distribution des courriels au format HTML, texte ou mixte ; via SMTP ou non',
-       'facteur_nom' => 'Facteur',
-       'facteur_slogan' => 'Il distribue vos courriels'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_fr_tu.php b/www/plugins/facteur/lang/paquet-facteur_fr_tu.php
deleted file mode 100644 (file)
index 9bc7ed8..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'Facteur s’occupe de la distribution des courriels au format HTML, texte ou mixte ; via SMTP ou non',
-       'facteur_nom' => 'Facteur',
-       'facteur_slogan' => 'Il distribue tes courriels'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_nl.php b/www/plugins/facteur/lang/paquet-facteur_nl.php
deleted file mode 100644 (file)
index 1d0d7dc..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'Postbode (Facteur) houdt zich bezig met de distributie van email in HTML, tekst of gemengd formaat; al dan niet via SMTP',
-       'facteur_nom' => 'Postbode',
-       'facteur_slogan' => 'Hij verzendt uw mail'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_pt_br.php b/www/plugins/facteur/lang/paquet-facteur_pt_br.php
deleted file mode 100644 (file)
index 0ef1d7a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'O Carteiro cuida da distribuição de e-mails no formato HTML, texto ou misto; via SMTP ou não',
-       'facteur_nom' => 'Carteiro',
-       'facteur_slogan' => 'Distribue os seus e-mails'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_ru.php b/www/plugins/facteur/lang/paquet-facteur_ru.php
deleted file mode 100644 (file)
index db108ce..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'Плагин отправляет письма в текстовом, HTML или смешанном формате; при помощи SMTP или функции mail',
-       'facteur_nom' => 'Почтальон (Facteur)',
-       'facteur_slogan' => 'Он отправляет письма'
-);
diff --git a/www/plugins/facteur/lang/paquet-facteur_sk.php b/www/plugins/facteur/lang/paquet-facteur_sk.php
deleted file mode 100644 (file)
index ce771d9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-facteur?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'facteur_description' => 'Poštár slúži na doručovanie e-mailov vo formáte HTML, v textovej alebo v zmiešanej podobe či už cez SMTP, alebo nie',
-       'facteur_nom' => 'Poštár',
-       'facteur_slogan' => 'Posiela vašu poštu'
-);
diff --git a/www/plugins/facteur/lib/markdownify/LICENSE_LGPL.txt b/www/plugins/facteur/lib/markdownify/LICENSE_LGPL.txt
deleted file mode 100644 (file)
index 5ab7695..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/www/plugins/facteur/lib/markdownify/markdownify.php b/www/plugins/facteur/lib/markdownify/markdownify.php
deleted file mode 100644 (file)
index c5c0410..0000000
+++ /dev/null
@@ -1,1192 +0,0 @@
-<?php
-/**
- * Markdownify converts HTML Markup to [Markdown][1] (by [John Gruber][2]. It
- * also supports [Markdown Extra][3] by [Michel Fortin][4] via Markdownify_Extra.
- *
- * It all started as `html2text.php` - a port of [Aaron Swartz'][5] [`html2text.py`][6] - but
- * got a long way since. This is far more than a mere port now!
- * Starting with version 2.0.0 this is a complete rewrite and cannot be
- * compared to Aaron Swatz' `html2text.py` anylonger. I'm now using a HTML parser
- * (see `parsehtml.php` which I also wrote) which makes most of the evil
- * RegEx magic go away and additionally it gives a much cleaner class
- * structure. Also notably is the fact that I now try to prevent regressions by
- * utilizing testcases of Michel Fortin's [MDTest][7].
- *
- * [1]: http://daringfireball.com/projects/markdown
- * [2]: http://daringfireball.com/
- * [3]: http://www.michelf.com/projects/php-markdown/extra/
- * [4]: http://www.michelf.com/
- * [5]: http://www.aaronsw.com/
- * [6]: http://www.aaronsw.com/2002/html2text/
- * [7]: http://article.gmane.org/gmane.text.markdown.general/2540
- *
- * @version 2.0.0 alpha
- * @author Milian Wolff (<mail@milianw.de>, <http://milianw.de>)
- * @license LGPL, see LICENSE_LGPL.txt and the summary below
- * @copyright (C) 2007  Milian Wolff
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/**
- * HTML Parser, see http://sf.net/projects/parseHTML
- */
-require_once dirname(__FILE__) . '/parsehtml/parsehtml.php';
-
-/**
- * default configuration
- */
-define('MDFY_LINKS_EACH_PARAGRAPH', false);
-define('MDFY_BODYWIDTH', false);
-define('MDFY_KEEPHTML', true);
-
-/**
- * HTML to Markdown converter class
- */
-class Markdownify {
-  /**
-   * html parser object
-   *
-   * @var parseHTML
-   */
-  var $parser;
-  /**
-   * markdown output
-   *
-   * @var string
-   */
-  var $output;
-  /**
-   * stack with tags which where not converted to html
-   *
-   * @var array<string>
-   */
-  var $notConverted = array();
-  /**
-   * skip conversion to markdown
-   *
-   * @var bool
-   */
-  var $skipConversion = false;
-  /* options */
-  /**
-   * keep html tags which cannot be converted to markdown
-   *
-   * @var bool
-   */
-  var $keepHTML = false;
-  /**
-   * wrap output, set to 0 to skip wrapping
-   *
-   * @var int
-   */
-  var $bodyWidth = 0;
-  /**
-   * minimum body width
-   *
-   * @var int
-   */
-  var $minBodyWidth = 25;
-  /**
-   * display links after each paragraph
-   *
-   * @var bool
-   */
-  var $linksAfterEachParagraph = false;
-  /**
-   * constructor, set options, setup parser
-   *
-   * @param bool $linksAfterEachParagraph wether or not to flush stacked links after each paragraph
-   *             defaults to false
-   * @param int $bodyWidth wether or not to wrap the output to the given width
-   *             defaults to false
-   * @param bool $keepHTML wether to keep non markdownable HTML or to discard it
-   *             defaults to true (HTML will be kept)
-   * @return void
-   */
-  function __construct($linksAfterEachParagraph = MDFY_LINKS_EACH_PARAGRAPH, $bodyWidth = MDFY_BODYWIDTH, $keepHTML = MDFY_KEEPHTML) {
-    $this->linksAfterEachParagraph = $linksAfterEachParagraph;
-    $this->keepHTML = $keepHTML;
-
-    if ($bodyWidth > $this->minBodyWidth) {
-      $this->bodyWidth = intval($bodyWidth);
-    } else {
-      $this->bodyWidth = false;
-    }
-
-    $this->parser = new parseHTML;
-    $this->parser->noTagsInCode = true;
-
-    # we don't have to do this every time
-    $search = array();
-    $replace = array();
-    foreach ($this->escapeInText as $s => $r) {
-      array_push($search, '#(?<!\\\)'.$s.'#U');
-      array_push($replace, $r);
-    }
-    $this->escapeInText = array(
-      'search' => $search,
-      'replace' => $replace
-    );
-  }
-  /**
-   * parse a HTML string
-   *
-   * @param string $html
-   * @return string markdown formatted
-   */
-  function parseString($html) {
-    $this->parser->html = $html;
-    $this->parse();
-    return $this->output;
-  }
-  /**
-   * tags with elements which can be handled by markdown
-   *
-   * @var array<string>
-   */
-  var $isMarkdownable = array(
-    'p' => array(),
-    'ul' => array(),
-    'ol' => array(),
-    'li' => array(),
-    'br' => array(),
-    'blockquote' => array(),
-    'code' => array(),
-    'pre' => array(),
-    'a' => array(
-      'href' => 'required',
-      'title' => 'optional',
-    ),
-    'strong' => array(),
-    'b' => array(),
-    'em' => array(),
-    'i' => array(),
-    'img' => array(
-      'src' => 'required',
-      'alt' => 'optional',
-      'title' => 'optional',
-    ),
-    'h1' => array(),
-    'h2' => array(),
-    'h3' => array(),
-    'h4' => array(),
-    'h5' => array(),
-    'h6' => array(),
-    'hr' => array(),
-  );
-  /**
-   * html tags to be ignored (contents will be parsed)
-   *
-   * @var array<string>
-   */
-  var $ignore = array(
-    'html',
-    'body',
-  );
-  /**
-   * html tags to be dropped (contents will not be parsed!)
-   *
-   * @var array<string>
-   */
-  var $drop = array(
-    'script',
-    'head',
-    'style',
-    'form',
-    'area',
-    'object',
-    'param',
-    'iframe',
-  );
-  /**
-   * Markdown indents which could be wrapped
-   * @note: use strings in regex format
-   *
-   * @var array<string>
-   */
-  var $wrappableIndents = array(
-    '\*   ', # ul
-    '\d.  ', # ol
-    '\d\d. ', # ol
-    '> ', # blockquote
-    '', # p
-  );
-  /**
-   * list of chars which have to be escaped in normal text
-   * @note: use strings in regex format
-   *
-   * @var array
-   *
-   * TODO: what's with block chars / sequences at the beginning of a block?
-   */
-  var $escapeInText = array(
-    '([-*_])([ ]{0,2}\1){2,}' => '\\\\$0|', # hr
-    '\*\*([^*\s]+)\*\*' => '\*\*$1\*\*', # strong
-    '\*([^*\s]+)\*' => '\*$1\*', # em
-    '__(?! |_)(.+)(?!<_| )__' => '\_\_$1\_\_', # em
-    '_(?! |_)(.+)(?!<_| )_' => '\_$1\_', # em
-    '`(.+)`' => '\`$1\`', # code
-    '\[(.+)\](\s*\()' => '\[$1\]$2', # links: [text] (url) => [text\] (url)
-    '\[(.+)\](\s*)\[(.*)\]' => '\[$1\]$2\[$3\]', # links: [text][id] => [text\][id\]
-  );
-  /**
-   * wether last processed node was a block tag or not
-   *
-   * @var bool
-   */
-  var $lastWasBlockTag = false;
-  /**
-   * name of last closed tag
-   *
-   * @var string
-   */
-  var $lastClosedTag = '';
-  /**
-   * iterate through the nodes and decide what we
-   * shall do with the current node
-   *
-   * @param void
-   * @return void
-   */
-  function parse() {
-    $this->output = '';
-    # drop tags
-    $this->parser->html = preg_replace('#<('.implode('|', $this->drop).')[^>]*>.*</\\1>#sU', '', $this->parser->html);
-    while ($this->parser->nextNode()) {
-      switch ($this->parser->nodeType) {
-        case 'doctype':
-          break;
-        case 'pi':
-        case 'comment':
-          if ($this->keepHTML) {
-            $this->flushLinebreaks();
-            $this->out($this->parser->node);
-            $this->setLineBreaks(2);
-          }
-          # else drop
-          break;
-        case 'text':
-          $this->handleText();
-          break;
-        case 'tag':
-          if (in_array($this->parser->tagName, $this->ignore)) {
-            break;
-          }
-          if ($this->parser->isStartTag) {
-            $this->flushLinebreaks();
-          }
-          if ($this->skipConversion) {
-            $this->isMarkdownable(); # update notConverted
-            $this->handleTagToText();
-            continue;
-          }
-          if (!$this->parser->keepWhitespace && $this->parser->isBlockElement && $this->parser->isStartTag) {
-            $this->parser->html = ltrim($this->parser->html);
-          }
-          if ($this->isMarkdownable()) {
-            if ($this->parser->isBlockElement && $this->parser->isStartTag && !$this->lastWasBlockTag && !empty($this->output)) {
-              if (!empty($this->buffer)) {
-                $str =& $this->buffer[count($this->buffer) -1];
-              } else {
-                $str =& $this->output;
-              }
-              if (substr($str, -strlen($this->indent)-1) != "\n".$this->indent) {
-                $str .= "\n".$this->indent;
-              }
-            }
-            $func = 'handleTag_'.$this->parser->tagName;
-            $this->$func();
-            if ($this->linksAfterEachParagraph && $this->parser->isBlockElement && !$this->parser->isStartTag && empty($this->parser->openTags)) {
-              $this->flushStacked();
-            }
-            if (!$this->parser->isStartTag) {
-              $this->lastClosedTag = $this->parser->tagName;
-            }
-          } else {
-            $this->handleTagToText();
-            $this->lastClosedTag = '';
-          }
-          break;
-        default:
-          trigger_error('invalid node type', E_USER_ERROR);
-          break;
-      }
-      $this->lastWasBlockTag = $this->parser->nodeType == 'tag' && $this->parser->isStartTag && $this->parser->isBlockElement;
-    }
-    if (!empty($this->buffer)) {
-      trigger_error('buffer was not flushed, this is a bug. please report!', E_USER_WARNING);
-      while (!empty($this->buffer)) {
-        $this->out($this->unbuffer());
-      }
-    }
-    ### cleanup
-    $this->output = rtrim(str_replace('&amp;', '&', str_replace('&lt;', '<', str_replace('&gt;', '>', $this->output))));
-    # end parsing, flush stacked tags
-    $this->flushStacked();
-    $this->stack = array();
-  }
-  /**
-   * check if current tag can be converted to Markdown
-   *
-   * @param void
-   * @return bool
-   */
-  function isMarkdownable() {
-    if (!isset($this->isMarkdownable[$this->parser->tagName])) {
-      # simply not markdownable
-      return false;
-    }
-    if ($this->parser->isStartTag) {
-      $return = true;
-      if ($this->keepHTML) {
-        $diff = array_diff(array_keys($this->parser->tagAttributes), array_keys($this->isMarkdownable[$this->parser->tagName]));
-        if (!empty($diff)) {
-          # non markdownable attributes given
-          $return = false;
-        }
-      }
-      if ($return) {
-        foreach ($this->isMarkdownable[$this->parser->tagName] as $attr => $type) {
-          if ($type == 'required' && !isset($this->parser->tagAttributes[$attr])) {
-            # required markdown attribute not given
-            $return = false;
-            break;
-          }
-        }
-      }
-      if (!$return) {
-        array_push($this->notConverted, $this->parser->tagName.'::'.implode('/', $this->parser->openTags));
-      }
-      return $return;
-    } else {
-      if (!empty($this->notConverted) && end($this->notConverted) === $this->parser->tagName.'::'.implode('/', $this->parser->openTags)) {
-        array_pop($this->notConverted);
-        return false;
-      }
-      return true;
-    }
-  }
-  /**
-   * output all stacked tags
-   *
-   * @param void
-   * @return void
-   */
-  function flushStacked() {
-    # links
-    foreach ($this->stack as $tag => $a) {
-      if (!empty($a)) {
-        call_user_func(array(&$this, 'flushStacked_'.$tag));
-      }
-    }
-  }
-  /**
-   * output link references (e.g. [1]: http://example.com "title");
-   *
-   * @param void
-   * @return void
-   */
-  function flushStacked_a() {
-    $out = false;
-    foreach ($this->stack['a'] as $k => $tag) {
-      if (!isset($tag['unstacked'])) {
-        if (!$out) {
-          $out = true;
-          $this->out("\n\n", true);
-        } else {
-          $this->out("\n", true);
-        }
-        $this->out(' ['.$tag['linkID'].']: '.$tag['href'].(isset($tag['title']) ? ' "'.$tag['title'].'"' : ''), true);
-        $tag['unstacked'] = true;
-        $this->stack['a'][$k] = $tag;
-      }
-    }
-  }
-  /**
-   * flush enqued linebreaks
-   *
-   * @param void
-   * @return void
-   */
-  function flushLinebreaks() {
-    if ($this->lineBreaks && !empty($this->output)) {
-      $this->out(str_repeat("\n".$this->indent, $this->lineBreaks), true);
-    }
-    $this->lineBreaks = 0;
-  }
-  /**
-   * handle non Markdownable tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTagToText() {
-    if (!$this->keepHTML) {
-      if (!$this->parser->isStartTag && $this->parser->isBlockElement) {
-        $this->setLineBreaks(2);
-      }
-    } else {
-      # dont convert to markdown inside this tag
-      /** TODO: markdown extra **/
-      if (!$this->parser->isEmptyTag) {
-        if ($this->parser->isStartTag) {
-          if (!$this->skipConversion) {
-            $this->skipConversion = $this->parser->tagName.'::'.implode('/', $this->parser->openTags);
-          }
-        } else {
-          if ($this->skipConversion == $this->parser->tagName.'::'.implode('/', $this->parser->openTags)) {
-            $this->skipConversion = false;
-          }
-        }
-      }
-
-      if ($this->parser->isBlockElement) {
-        if ($this->parser->isStartTag) {
-          if (in_array($this->parent(), array('ins', 'del'))) {
-            # looks like ins or del are block elements now
-            $this->out("\n", true);
-            $this->indent('  ');
-          }
-          if ($this->parser->tagName != 'pre') {
-            $this->out($this->parser->node."\n".$this->indent);
-            if (!$this->parser->isEmptyTag) {
-              $this->indent('  ');
-            } else {
-              $this->setLineBreaks(1);
-            }
-            $this->parser->html = ltrim($this->parser->html);
-          } else {
-            # don't indent inside <pre> tags
-            $this->out($this->parser->node);
-            static $indent;
-            $indent =  $this->indent;
-            $this->indent = '';
-          }
-        } else {
-          if (!$this->parser->keepWhitespace) {
-            $this->output = rtrim($this->output);
-          }
-          if ($this->parser->tagName != 'pre') {
-            $this->indent('  ');
-            $this->out("\n".$this->indent.$this->parser->node);
-          } else {
-            # reset indentation
-            $this->out($this->parser->node);
-            static $indent;
-            $this->indent = $indent;
-          }
-
-          if (in_array($this->parent(), array('ins', 'del'))) {
-            # ins or del was block element
-            $this->out("\n");
-            $this->indent('  ');
-          }
-          if ($this->parser->tagName == 'li') {
-            $this->setLineBreaks(1);
-          } else {
-            $this->setLineBreaks(2);
-          }
-        }
-      } else {
-        $this->out($this->parser->node);
-      }
-      if (in_array($this->parser->tagName, array('code', 'pre'))) {
-        if ($this->parser->isStartTag) {
-          $this->buffer();
-        } else {
-          # add stuff so cleanup just reverses this
-          $this->out(str_replace('&lt;', '&amp;lt;', str_replace('&gt;', '&amp;gt;', $this->unbuffer())));
-        }
-      }
-    }
-  }
-  /**
-   * handle plain text
-   *
-   * @param void
-   * @return void
-   */
-  function handleText() {
-    if ($this->hasParent('pre') && strpos($this->parser->node, "\n") !== false) {
-      $this->parser->node = str_replace("\n", "\n".$this->indent, $this->parser->node);
-    }
-    if (!$this->hasParent('code') && !$this->hasParent('pre')) {
-      # entity decode
-      $this->parser->node = $this->decode($this->parser->node);
-      if (!$this->skipConversion) {
-        # escape some chars in normal Text
-        $this->parser->node = preg_replace($this->escapeInText['search'], $this->escapeInText['replace'], $this->parser->node);
-      }
-    } else {
-      $this->parser->node = str_replace(array('&quot;', '&apos'), array('"', '\''), $this->parser->node);
-    }
-    $this->out($this->parser->node);
-    $this->lastClosedTag = '';
-  }
-  /**
-   * handle <em> and <i> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_em() {
-    $this->out('*', true);
-  }
-  function handleTag_i() {
-    $this->handleTag_em();
-  }
-  /**
-   * handle <strong> and <b> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_strong() {
-    $this->out('**', true);
-  }
-  function handleTag_b() {
-    $this->handleTag_strong();
-  }
-  /**
-   * handle <h1> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_h1() {
-    $this->handleHeader(1);
-  }
-  /**
-   * handle <h2> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_h2() {
-    $this->handleHeader(2);
-  }
-  /**
-   * handle <h3> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_h3() {
-    $this->handleHeader(3);
-  }
-  /**
-   * handle <h4> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_h4() {
-    $this->handleHeader(4);
-  }
-  /**
-   * handle <h5> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_h5() {
-    $this->handleHeader(5);
-  }
-  /**
-   * handle <h6> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_h6() {
-    $this->handleHeader(6);
-  }
-  /**
-   * number of line breaks before next inline output
-   */
-  var $lineBreaks = 0;
-  /**
-   * handle header tags (<h1> - <h6>)
-   *
-   * @param int $level 1-6
-   * @return void
-   */
-  function handleHeader($level) {
-    if ($this->parser->isStartTag) {
-      $this->out(str_repeat('#', $level).' ', true);
-    } else {
-      $this->setLineBreaks(2);
-    }
-  }
-  /**
-   * handle <p> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_p() {
-    if (!$this->parser->isStartTag) {
-      $this->setLineBreaks(2);
-    }
-  }
-  /**
-   * handle <a> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_a() {
-    if ($this->parser->isStartTag) {
-      $this->buffer();
-      if (isset($this->parser->tagAttributes['title'])) {
-        $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']);
-      } else {
-        $this->parser->tagAttributes['title'] = null;
-      }
-      $this->parser->tagAttributes['href'] = $this->decode(trim($this->parser->tagAttributes['href']));
-      $this->stack();
-    } else {
-      $tag = $this->unstack();
-      $buffer = $this->unbuffer();
-
-      if (empty($tag['href']) && empty($tag['title'])) {
-        # empty links... testcase mania, who would possibly do anything like that?!
-        $this->out('['.$buffer.']()', true);
-        return;
-      }
-
-      if ($buffer == $tag['href'] && empty($tag['title'])) {
-        # <http://example.com>
-        $this->out('<'.$buffer.'>', true);
-        return;
-      }
-
-      $bufferDecoded = $this->decode(trim($buffer));
-      if (substr($tag['href'], 0, 7) == 'mailto:' && 'mailto:'.$bufferDecoded == $tag['href']) {
-        if (is_null($tag['title'])) {
-          # <mail@example.com>
-          $this->out('<'.$bufferDecoded.'>', true);
-          return;
-        }
-        # [mail@example.com][1]
-        # ...
-        #  [1]: mailto:mail@example.com Title
-        $tag['href'] = 'mailto:'.$bufferDecoded;
-      }
-           if ($this->linksAfterEachParagraph!=='inline'){
-             # [This link][id]
-             foreach ($this->stack['a'] as $tag2) {
-               if ($tag2['href'] == $tag['href'] && $tag2['title'] === $tag['title']) {
-                 $tag['linkID'] = $tag2['linkID'];
-                 break;
-               }
-             }
-             if (!isset($tag['linkID'])) {
-               $tag['linkID'] = count($this->stack['a']) + 1;
-               array_push($this->stack['a'], $tag);
-             }
-
-             $this->out('['.trim($buffer).']['.$tag['linkID'].']', true);
-           }
-           else {
-                   # [This link|title](url)
-                   if ($tag['title'])
-                           $buffer.="|".$tag['title'];
-                   $this->out('['.trim($buffer).']('.$tag['href'].')', true);
-           }
-    }
-  }
-  /**
-   * handle <img /> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_img() {
-    if (!$this->parser->isStartTag) {
-      return; # just to be sure this is really an empty tag...
-    }
-
-    if (isset($this->parser->tagAttributes['title'])) {
-      $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']);
-    } else {
-      $this->parser->tagAttributes['title'] = null;
-    }
-    if (isset($this->parser->tagAttributes['alt'])) {
-      $this->parser->tagAttributes['alt'] = $this->decode($this->parser->tagAttributes['alt']);
-    } else {
-      $this->parser->tagAttributes['alt'] = null;
-    }
-
-    if (empty($this->parser->tagAttributes['src'])) {
-      # support for "empty" images... dunno if this is really needed
-      # but there are some testcases which do that...
-      if (!empty($this->parser->tagAttributes['title'])) {
-        $this->parser->tagAttributes['title'] = ' '.$this->parser->tagAttributes['title'].' ';
-      }
-      $this->out('!['.$this->parser->tagAttributes['alt'].']('.$this->parser->tagAttributes['title'].')', true);
-      return;
-    } else {
-      $this->parser->tagAttributes['src'] = $this->decode($this->parser->tagAttributes['src']);
-    }
-
-    # [This link][id]
-    $link_id = false;
-    if (!empty($this->stack['a'])) {
-      foreach ($this->stack['a'] as $tag) {
-        if ($tag['href'] == $this->parser->tagAttributes['src']
-            && $tag['title'] === $this->parser->tagAttributes['title']) {
-          $link_id = $tag['linkID'];
-          break;
-        }
-      }
-    } else {
-      $this->stack['a'] = array();
-    }
-    if (!$link_id) {
-      $link_id = count($this->stack['a']) + 1;
-      $tag = array(
-        'href' => $this->parser->tagAttributes['src'],
-        'linkID' => $link_id,
-        'title' => $this->parser->tagAttributes['title']
-      );
-      array_push($this->stack['a'], $tag);
-    }
-
-    $this->out('!['.$this->parser->tagAttributes['alt'].']['.$link_id.']', true);
-  }
-  /**
-   * handle <code> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_code() {
-    if ($this->hasParent('pre')) {
-      # ignore code blocks inside <pre>
-      return;
-    }
-    if ($this->parser->isStartTag) {
-      $this->buffer();
-    } else {
-      $buffer = $this->unbuffer();
-      # use as many backticks as needed
-      preg_match_all('#`+#', $buffer, $matches);
-      if (!empty($matches[0])) {
-        rsort($matches[0]);
-
-        $ticks = '`';
-        while (true) {
-          if (!in_array($ticks, $matches[0])) {
-            break;
-          }
-          $ticks .= '`';
-        }
-      } else {
-        $ticks = '`';
-      }
-      if ($buffer[0] == '`' || substr($buffer, -1) == '`') {
-        $buffer = ' '.$buffer.' ';
-      }
-      $this->out($ticks.$buffer.$ticks, true);
-    }
-  }
-  /**
-   * handle <pre> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_pre() {
-    if ($this->keepHTML && $this->parser->isStartTag) {
-      # check if a simple <code> follows
-      if (!preg_match('#^\s*<code\s*>#Us', $this->parser->html)) {
-        # this is no standard markdown code block
-        $this->handleTagToText();
-        return;
-      }
-    }
-    $this->indent('    ');
-    if (!$this->parser->isStartTag) {
-      $this->setLineBreaks(2);
-    } else {
-      $this->parser->html = ltrim($this->parser->html);
-    }
-  }
-  /**
-   * handle <blockquote> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_blockquote() {
-    $this->indent('> ');
-  }
-  /**
-   * handle <ul> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_ul() {
-    if ($this->parser->isStartTag) {
-      $this->stack();
-      if (!$this->keepHTML && $this->lastClosedTag == $this->parser->tagName) {
-        $this->out("\n".$this->indent.'<!-- -->'."\n".$this->indent."\n".$this->indent);
-      }
-    } else {
-      $this->unstack();
-      if ($this->parent() != 'li' || preg_match('#^\s*(</li\s*>\s*<li\s*>\s*)?<(p|blockquote)\s*>#sU', $this->parser->html)) {
-        # dont make Markdown add unneeded paragraphs
-        $this->setLineBreaks(2);
-      }
-    }
-  }
-  /**
-   * handle <ul> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_ol() {
-    # same as above
-    $this->parser->tagAttributes['num'] = 0;
-    $this->handleTag_ul();
-  }
-  /**
-   * handle <li> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_li() {
-    if ($this->parent() == 'ol') {
-      $parent =& $this->getStacked('ol');
-      if ($this->parser->isStartTag) {
-        $parent['num']++;
-        $this->out($parent['num'].'.'.str_repeat(' ', 3 - strlen($parent['num'])), true);
-      }
-      $this->indent('    ', false);
-    } else {
-      if ($this->parser->isStartTag) {
-        $this->out('*   ', true);
-      }
-      $this->indent('    ', false);
-    }
-    if (!$this->parser->isStartTag) {
-      $this->setLineBreaks(1);
-    }
-  }
-  /**
-   * handle <hr /> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_hr() {
-    if (!$this->parser->isStartTag) {
-      return; # just to be sure this really is an empty tag
-    }
-    $this->out('* * *', true);
-    $this->setLineBreaks(2);
-  }
-  /**
-   * handle <br /> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_br() {
-    $this->out("  \n".$this->indent, true);
-    $this->parser->html = ltrim($this->parser->html);
-  }
-  /**
-   * node stack, e.g. for <a> and <abbr> tags
-   *
-   * @var array<array>
-   */
-  var $stack = array();
-  /**
-   * add current node to the stack
-   * this only stores the attributes
-   *
-   * @param void
-   * @return void
-   */
-  function stack() {
-    if (!isset($this->stack[$this->parser->tagName])) {
-      $this->stack[$this->parser->tagName] = array();
-    }
-    array_push($this->stack[$this->parser->tagName], $this->parser->tagAttributes);
-  }
-  /**
-   * remove current tag from stack
-   *
-   * @param void
-   * @return array
-   */
-  function unstack() {
-    if (!isset($this->stack[$this->parser->tagName]) || !is_array($this->stack[$this->parser->tagName])) {
-      trigger_error('Trying to unstack from empty stack. This must not happen.', E_USER_ERROR);
-    }
-    return array_pop($this->stack[$this->parser->tagName]);
-  }
-  /**
-   * get last stacked element of type $tagName
-   *
-   * @param string $tagName
-   * @return array
-   */
-  function & getStacked($tagName) {
-    // no end() so it can be referenced
-    return $this->stack[$tagName][count($this->stack[$tagName])-1];
-  }
-  /**
-   * set number of line breaks before next start tag
-   *
-   * @param int $number
-   * @return void
-   */
-  function setLineBreaks($number) {
-    if ($this->lineBreaks < $number) {
-      $this->lineBreaks = $number;
-    }
-  }
-  /**
-   * stores current buffers
-   *
-   * @var array<string>
-   */
-  var $buffer = array();
-  /**
-   * buffer next parser output until unbuffer() is called
-   *
-   * @param void
-   * @return void
-   */
-  function buffer() {
-    array_push($this->buffer, '');
-  }
-  /**
-   * end current buffer and return buffered output
-   *
-   * @param void
-   * @return string
-   */
-  function unbuffer() {
-    return array_pop($this->buffer);
-  }
-  /**
-   * append string to the correct var, either
-   * directly to $this->output or to the current
-   * buffers
-   *
-   * @param string $put
-   * @return void
-   */
-  function out($put, $nowrap = false) {
-    if (empty($put)) {
-      return;
-    }
-    if (!empty($this->buffer)) {
-      $this->buffer[count($this->buffer) - 1] .= $put;
-    } else {
-      if ($this->bodyWidth && !$this->parser->keepWhitespace) { # wrap lines
-        // get last line
-        $pos = strrpos($this->output, "\n");
-        if ($pos === false) {
-          $line = $this->output;
-        } else {
-          $line = substr($this->output, $pos);
-        }
-
-        if ($nowrap) {
-          if ($put[0] != "\n" && $this->strlen($line) + $this->strlen($put) > $this->bodyWidth) {
-            $this->output .= "\n".$this->indent.$put;
-          } else {
-            $this->output .= $put;
-          }
-          return;
-        } else {
-          $put .= "\n"; # make sure we get all lines in the while below
-          $lineLen = $this->strlen($line);
-          while ($pos = strpos($put, "\n")) {
-            $putLine = substr($put, 0, $pos+1);
-            $put = substr($put, $pos+1);
-            $putLen = $this->strlen($putLine);
-            if ($lineLen + $putLen < $this->bodyWidth) {
-              $this->output .= $putLine;
-              $lineLen = $putLen;
-            } else {
-              $split = preg_split('#^(.{0,'.($this->bodyWidth - $lineLen).'})\b#', $putLine, 2, PREG_SPLIT_OFFSET_CAPTURE | PREG_SPLIT_DELIM_CAPTURE);
-              $this->output .= rtrim($split[1][0])."\n".$this->indent.$this->wordwrap(ltrim($split[2][0]), $this->bodyWidth, "\n".$this->indent, false);
-            }
-          }
-          $this->output = substr($this->output, 0, -1);
-          return;
-        }
-      } else {
-        $this->output .= $put;
-      }
-    }
-  }
-  /**
-   * current indentation
-   *
-   * @var string
-   */
-  var $indent = '';
-  /**
-   * indent next output (start tag) or unindent (end tag)
-   *
-   * @param string $str indentation
-   * @param bool $output add indendation to output
-   * @return void
-   */
-  function indent($str, $output = true) {
-    if ($this->parser->isStartTag) {
-      $this->indent .= $str;
-      if ($output) {
-        $this->out($str, true);
-      }
-    } else {
-      $this->indent = substr($this->indent, 0, -strlen($str));
-    }
-  }
-  /**
-   * decode email addresses
-   *
-   * @author derernst@gmx.ch <http://www.php.net/manual/en/function.html-entity-decode.php#68536>
-   * @author Milian Wolff <http://milianw.de>
-   */
-  function decode($text, $quote_style = ENT_QUOTES) {
-    if (version_compare(PHP_VERSION, '5', '>=')) {
-      # UTF-8 is only supported in PHP 5.x.x and above
-      $text = html_entity_decode($text, $quote_style, 'UTF-8');
-    } else {
-      if (function_exists('html_entity_decode')) {
-        $text = html_entity_decode($text, $quote_style, 'ISO-8859-1');
-      } else {
-        static $trans_tbl;
-        if (!isset($trans_tbl)) {
-          $trans_tbl = array_flip(get_html_translation_table(HTML_ENTITIES, $quote_style));
-        }
-        $text = strtr($text, $trans_tbl);
-      }
-      $text = preg_replace_callback('~&#x([0-9a-f]+);~i', array(&$this, '_decode_hex'), $text);
-      $text = preg_replace_callback('~&#(\d{2,5});~', array(&$this, '_decode_numeric'), $text);
-    }
-    return $text;
-  }
-  /**
-   * callback for decode() which converts a hexadecimal entity to UTF-8
-   *
-   * @param array $matches
-   * @return string UTF-8 encoded
-   */
-  function _decode_hex($matches) {
-    return $this->unichr(hexdec($matches[1]));
-  }
-  /**
-   * callback for decode() which converts a numerical entity to UTF-8
-   *
-   * @param array $matches
-   * @return string UTF-8 encoded
-   */
-  function _decode_numeric($matches) {
-    return $this->unichr($matches[1]);
-  }
-  /**
-   * UTF-8 chr() which supports numeric entities
-   *
-   * @author grey - greywyvern - com <http://www.php.net/manual/en/function.chr.php#55978>
-   * @param array $matches
-   * @return string UTF-8 encoded
-   */
-  function unichr($dec) {
-    if ($dec < 128) {
-      $utf = chr($dec);
-    } else if ($dec < 2048) {
-      $utf = chr(192 + (($dec - ($dec % 64)) / 64));
-      $utf .= chr(128 + ($dec % 64));
-    } else {
-      $utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
-      $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
-      $utf .= chr(128 + ($dec % 64));
-    }
-    return $utf;
-  }
-  /**
-   * UTF-8 strlen()
-   *
-   * @param string $str
-   * @return int
-   *
-   * @author dtorop 932 at hotmail dot com <http://www.php.net/manual/en/function.strlen.php#37975>
-   * @author Milian Wolff <http://milianw.de>
-   */
-  function strlen($str) {
-    if (function_exists('mb_strlen')) {
-      return mb_strlen($str, 'UTF-8');
-    } else {
-      return preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $var_empty);
-    }
-  }
-  /**
-  * wordwrap for utf8 encoded strings
-  *
-  * @param string $str
-  * @param integer $len
-  * @param string $what
-  * @return string
-  */
-  function wordwrap($str, $width, $break, $cut = false){
-    if (!$cut) {
-      $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){1,'.$width.'}\b#';
-    } else {
-      $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.'}#';
-    }
-    $return = '';
-    while (preg_match($regexp, $str, $matches)) {
-      $string = $matches[0];
-      $str = ltrim(substr($str, strlen($string)));
-      if (!$cut && isset($str[0]) && in_array($str[0], array('.', '!', ';', ':', '?', ','))) {
-        $string .= $str[0];
-        $str = ltrim(substr($str, 1));
-      }
-      $return .= $string.$break;
-    }
-    return $return.ltrim($str);
-  }
-  /**
-   * check if current node has a $tagName as parent (somewhere, not only the direct parent)
-   *
-   * @param string $tagName
-   * @return bool
-   */
-  function hasParent($tagName) {
-    return in_array($tagName, $this->parser->openTags);
-  }
-  /**
-   * get tagName of direct parent tag
-   *
-   * @param void
-   * @return string $tagName
-   */
-  function parent() {
-    return end($this->parser->openTags);
-  }
-}
\ No newline at end of file
diff --git a/www/plugins/facteur/lib/markdownify/markdownify_extra.php b/www/plugins/facteur/lib/markdownify/markdownify_extra.php
deleted file mode 100644 (file)
index e7e7078..0000000
+++ /dev/null
@@ -1,489 +0,0 @@
-<?php
-/**
- * Class to convert HTML to Markdown with PHP Markdown Extra syntax support.
- *
- * @version 1.0.0 alpha
- * @author Milian Wolff (<mail@milianw.de>, <http://milianw.de>)
- * @license LGPL, see LICENSE_LGPL.txt and the summary below
- * @copyright (C) 2007  Milian Wolff
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/**
- * standard Markdownify class
- */
-require_once dirname(__FILE__) . '/markdownify.php';
-
-class Markdownify_Extra extends Markdownify {
-  /**
-   * table data, including rows with content and the maximum width of each col
-   *
-   * @var array
-   */
-  var $table = array();
-  /**
-   * current col
-   *
-   * @var int
-   */
-  var $col = -1;
-  /**
-   * current row
-   *
-   * @var int
-   */
-  var $row = 0;
-  /**
-   * constructor, see Markdownify::__construct() for more information
-   */
-  function Markdownify_Extra($linksAfterEachParagraph = MDFY_LINKS_EACH_PARAGRAPH, $bodyWidth = MDFY_BODYWIDTH, $keepHTML = MDFY_KEEPHTML) {
-    parent::__construct($linksAfterEachParagraph, $bodyWidth, $keepHTML);
-
-    ### new markdownable tags & attributes
-    # header ids: # foo {bar}
-    $this->isMarkdownable['h1']['id'] = 'optional';
-    $this->isMarkdownable['h2']['id'] = 'optional';
-    $this->isMarkdownable['h3']['id'] = 'optional';
-    $this->isMarkdownable['h4']['id'] = 'optional';
-    $this->isMarkdownable['h5']['id'] = 'optional';
-    $this->isMarkdownable['h6']['id'] = 'optional';
-    # tables
-    $this->isMarkdownable['table'] = array();
-    $this->isMarkdownable['th'] = array(
-      'align' => 'optional',
-    );
-    $this->isMarkdownable['td'] = array(
-      'align' => 'optional',
-    );
-    $this->isMarkdownable['tr'] = array();
-    array_push($this->ignore, 'thead');
-    array_push($this->ignore, 'tbody');
-    array_push($this->ignore, 'tfoot');
-    # definition lists
-    $this->isMarkdownable['dl'] = array();
-    $this->isMarkdownable['dd'] = array();
-    $this->isMarkdownable['dt'] = array();
-    # footnotes
-    $this->isMarkdownable['fnref'] = array(
-      'target' => 'required',
-    );
-    $this->isMarkdownable['footnotes'] = array();
-    $this->isMarkdownable['fn'] = array(
-      'name' => 'required',
-    );
-    $this->parser->blockElements['fnref'] = false;
-    $this->parser->blockElements['fn'] = true;
-    $this->parser->blockElements['footnotes'] = true;
-    # abbr
-    $this->isMarkdownable['abbr'] = array(
-      'title' => 'required',
-    );
-    # build RegEx lookahead to decide wether table can pe parsed or not
-    $inlineTags = array_keys($this->parser->blockElements, false);
-    $colContents = '(?:[^<]|<(?:'.implode('|', $inlineTags).'|[^a-z]))+';
-    $this->tableLookaheadHeader = '{
-    ^\s*(?:<thead\s*>)?\s*                               # open optional thead
-      <tr\s*>\s*(?:                                    # start required row with headers
-        <th(?:\s+align=("|\')(?:left|center|right)\1)?\s*>   # header with optional align
-        \s*'.$colContents.'\s*                       # contents
-        </th>\s*                                     # close header
-      )+</tr>                                          # close row with headers
-    \s*(?:</thead>)?                                     # close optional thead
-    }sxi';
-    $this->tdSubstitute = '\s*'.$colContents.'\s*        # contents
-          </td>\s*';
-    $this->tableLookaheadBody = '{
-      \s*(?:<tbody\s*>)?\s*                            # open optional tbody
-        (?:<tr\s*>\s*                                # start row
-          %s                                       # cols to be substituted
-        </tr>)+                                      # close row
-      \s*(?:</tbody>)?                                 # close optional tbody
-    \s*</table>                                          # close table
-    }sxi';
-  }
-  /**
-   * handle header tags (<h1> - <h6>)
-   *
-   * @param int $level 1-6
-   * @return void
-   */
-  function handleHeader($level) {
-    static $id = null;
-    if ($this->parser->isStartTag) {
-      if (isset($this->parser->tagAttributes['id'])) {
-        $id = $this->parser->tagAttributes['id'];
-      }
-    } else {
-      if (!is_null($id)) {
-        $this->out(' {#'.$id.'}');
-        $id = null;
-      }
-    }
-    parent::handleHeader($level);
-  }
-  /**
-   * handle <abbr> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_abbr() {
-    if ($this->parser->isStartTag) {
-      $this->stack();
-      $this->buffer();
-    } else {
-      $tag = $this->unstack();
-      $tag['text'] = $this->unbuffer();
-      $add = true;
-      foreach ($this->stack['abbr'] as $stacked) {
-        if ($stacked['text'] == $tag['text']) {
-          /** TODO: differing abbr definitions, i.e. different titles for same text **/
-          $add = false;
-          break;
-        }
-      }
-      $this->out($tag['text']);
-      if ($add) {
-        array_push($this->stack['abbr'], $tag);
-      }
-    }
-  }
-  /**
-   * flush stacked abbr tags
-   *
-   * @param void
-   * @return void
-   */
-  function flushStacked_abbr() {
-    $out = array();
-    foreach ($this->stack['abbr'] as $k => $tag) {
-      if (!isset($tag['unstacked'])) {
-        array_push($out, ' *['.$tag['text'].']: '.$tag['title']);
-        $tag['unstacked'] = true;
-        $this->stack['abbr'][$k] = $tag;
-      }
-    }
-    if (!empty($out)) {
-      $this->out("\n\n".implode("\n", $out));
-    }
-  }
-  /**
-   * handle <table> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_table() {
-    if ($this->parser->isStartTag) {
-      # check if upcoming table can be converted
-      if ($this->keepHTML) {
-        if (preg_match($this->tableLookaheadHeader, $this->parser->html, $matches)) {
-          # header seems good, now check body
-          # get align & number of cols
-          preg_match_all('#<th(?:\s+align=("|\')(left|right|center)\1)?\s*>#si', $matches[0], $cols);
-          $regEx = '';
-          $i = 1;
-          $aligns = array();
-          foreach ($cols[2] as $align) {
-            $align = strtolower($align);
-            array_push($aligns, $align);
-            if (empty($align)) {
-              $align = 'left'; # default value
-            }
-            $td = '\s+align=("|\')'.$align.'\\'.$i;
-            $i++;
-            if ($align == 'left') {
-              # look for empty align or left
-              $td = '(?:'.$td.')?';
-            }
-            $td = '<td'.$td.'\s*>';
-            $regEx .= $td.$this->tdSubstitute;
-          }
-          $regEx = sprintf($this->tableLookaheadBody, $regEx);
-          if (preg_match($regEx, $this->parser->html, $matches, null, strlen($matches[0]))) {
-            # this is a markdownable table tag!
-            $this->table = array(
-              'rows' => array(),
-              'col_widths' => array(),
-              'aligns' => $aligns,
-            );
-            $this->row = 0;
-          } else {
-            # non markdownable table
-            $this->handleTagToText();
-          }
-        } else {
-          # non markdownable table
-          $this->handleTagToText();
-        }
-      } else {
-        $this->table = array(
-          'rows' => array(),
-          'col_widths' => array(),
-          'aligns' => array(),
-        );
-        $this->row = 0;
-      }
-    } else {
-      # finally build the table in Markdown Extra syntax
-      $separator = array();
-      # seperator with correct align identifikators
-      foreach($this->table['aligns'] as $col => $align) {
-        if (!$this->keepHTML && !isset($this->table['col_widths'][$col])) {
-          break;
-        }
-        $left = ' ';
-        $right = ' ';
-        switch ($align) {
-          case 'left':
-            $left = ':';
-            break;
-          case 'center':
-            $right = ':';
-            $left = ':';
-          case 'right':
-            $right = ':';
-            break;
-        }
-        array_push($separator, $left.str_repeat('-', $this->table['col_widths'][$col]).$right);
-      }
-      $separator = '|'.implode('|', $separator).'|';
-
-      $rows = array();
-      # add padding
-      array_walk_recursive($this->table['rows'], array(&$this, 'alignTdContent'));
-      $header = array_shift($this->table['rows']);
-      array_push($rows, '| '.implode(' | ', $header).' |');
-      array_push($rows, $separator);
-      foreach ($this->table['rows'] as $row) {
-        array_push($rows, '| '.implode(' | ', $row).' |');
-      }
-      $this->out(implode("\n".$this->indent, $rows));
-      $this->table = array();
-      $this->setLineBreaks(2);
-    }
-  }
-  /**
-   * properly pad content so it is aligned as whished
-   * should be used with array_walk_recursive on $this->table['rows']
-   *
-   * @param string &$content
-   * @param int $col
-   * @return void
-   */
-  function alignTdContent(&$content, $col) {
-    switch ($this->table['aligns'][$col]) {
-      default:
-      case 'left':
-        $content .= str_repeat(' ', $this->table['col_widths'][$col] - $this->strlen($content));
-        break;
-      case 'right':
-        $content = str_repeat(' ', $this->table['col_widths'][$col] - $this->strlen($content)).$content;
-        break;
-      case 'center':
-        $paddingNeeded = $this->table['col_widths'][$col] - $this->strlen($content);
-        $left = floor($paddingNeeded / 2);
-        $right = $paddingNeeded - $left;
-        $content = str_repeat(' ', $left).$content.str_repeat(' ', $right);
-        break;
-    }
-  }
-  /**
-   * handle <tr> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_tr() {
-    if ($this->parser->isStartTag) {
-      $this->col = -1;
-    } else {
-      $this->row++;
-    }
-  }
-  /**
-   * handle <td> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_td() {
-    if ($this->parser->isStartTag) {
-      $this->col++;
-      if (!isset($this->table['col_widths'][$this->col])) {
-        $this->table['col_widths'][$this->col] = 0;
-      }
-      $this->buffer();
-    } else {
-      $buffer = trim($this->unbuffer());
-      $this->table['col_widths'][$this->col] = max($this->table['col_widths'][$this->col], $this->strlen($buffer));
-      $this->table['rows'][$this->row][$this->col] = $buffer;
-    }
-  }
-  /**
-   * handle <th> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_th() {
-    if (!$this->keepHTML && !isset($this->table['rows'][1]) && !isset($this->table['aligns'][$this->col+1])) {
-      if (isset($this->parser->tagAttributes['align'])) {
-        $this->table['aligns'][$this->col+1] = $this->parser->tagAttributes['align'];
-      } else {
-        $this->table['aligns'][$this->col+1] = '';
-      }
-    }
-    $this->handleTag_td();
-  }
-  /**
-   * handle <dl> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_dl() {
-    if (!$this->parser->isStartTag) {
-      $this->setLineBreaks(2);
-    }
-  }
-  /**
-   * handle <dt> tags
-   *
-   * @param void
-   * @return void
-   **/
-  function handleTag_dt() {
-    if (!$this->parser->isStartTag) {
-      $this->setLineBreaks(1);
-    }
-  }
-  /**
-   * handle <dd> tags
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_dd() {
-    if ($this->parser->isStartTag) {
-      if (substr(ltrim($this->parser->html), 0, 3) == '<p>') {
-        # next comes a paragraph, so we'll need an extra line
-        $this->out("\n".$this->indent);
-      } elseif (substr($this->output, -2) == "\n\n") {
-        $this->output = substr($this->output, 0, -1);
-      }
-      $this->out(':   ');
-      $this->indent('    ', false);
-    } else {
-      # lookahead for next dt
-      if (substr(ltrim($this->parser->html), 0, 4) == '<dt>') {
-        $this->setLineBreaks(2);
-      } else {
-        $this->setLineBreaks(1);
-      }
-      $this->indent('    ');
-    }
-  }
-  /**
-   * handle <fnref /> tags (custom footnote references, see markdownify_extra::parseString())
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_fnref() {
-    $this->out('[^'.$this->parser->tagAttributes['target'].']');
-  }
-  /**
-   * handle <fn> tags (custom footnotes, see markdownify_extra::parseString()
-   * and markdownify_extra::_makeFootnotes())
-   *
-   * @param void
-   * @return void
-   */
-  function handleTag_fn() {
-    if ($this->parser->isStartTag) {
-      $this->out('[^'.$this->parser->tagAttributes['name'].']:');
-      $this->setLineBreaks(1);
-    } else {
-      $this->setLineBreaks(2);
-    }
-    $this->indent('    ');
-  }
-  /**
-   * handle <footnotes> tag (custom footnotes, see markdownify_extra::parseString()
-   *  and markdownify_extra::_makeFootnotes())
-   *
-   *  @param void
-   *  @return void
-   */
-  function handleTag_footnotes() {
-    if (!$this->parser->isStartTag) {
-      $this->setLineBreaks(2);
-    }
-  }
-  /**
-   * parse a HTML string, clean up footnotes prior
-   *
-   * @param string $HTML input
-   * @return string Markdown formatted output
-   */
-  function parseString($html) {
-    /** TODO: custom markdown-extra options, e.g. titles & classes **/
-    # <sup id="fnref:..."><a href"#fn..." rel="footnote">...</a></sup>
-    # => <fnref target="..." />
-    $html = preg_replace('@<sup id="fnref:([^"]+)">\s*<a href="#fn:\1" rel="footnote">\s*\d+\s*</a>\s*</sup>@Us', '<fnref target="$1" />', $html);
-    # <div class="footnotes">
-    # <hr />
-    # <ol>
-    #
-    # <li id="fn:...">...</li>
-    # ...
-    #
-    # </ol>
-    # </div>
-    # =>
-    # <footnotes>
-    #   <fn name="...">...</fn>
-    #   ...
-    # </footnotes>
-    $html = preg_replace_callback('#<div class="footnotes">\s*<hr />\s*<ol>\s*(.+)\s*</ol>\s*</div>#Us', array(&$this, '_makeFootnotes'), $html);
-    return parent::parseString($html);
-  }
-  /**
-   * replace HTML representation of footnotes with something more easily parsable
-   *
-   * @note this is a callback to be used in parseString()
-   *
-   * @param array $matches
-   * @return string
-   */
-  function _makeFootnotes($matches) {
-    # <li id="fn:1">
-    #   ...
-    #   <a href="#fnref:block" rev="footnote">&#8617;</a></p>
-    # </li>
-    # => <fn name="1">...</fn>
-    # remove footnote link
-    $fns = preg_replace('@\s*(&#160;\s*)?<a href="#fnref:[^"]+" rev="footnote"[^>]*>&#8617;</a>\s*@s', '', $matches[1]);
-    # remove empty paragraph
-    $fns = preg_replace('@<p>\s*</p>@s', '', $fns);
-    # <li id="fn:1">...</li> -> <footnote nr="1">...</footnote>
-    $fns = str_replace('<li id="fn:', '<fn name="', $fns);
-
-    $fns = '<footnotes>'.$fns.'</footnotes>';
-    return preg_replace('#</li>\s*(?=(?:<fn|</footnotes>))#s', '</fn>$1', $fns);
-  }
-}
\ No newline at end of file
diff --git a/www/plugins/facteur/lib/markdownify/parsehtml/parsehtml.php b/www/plugins/facteur/lib/markdownify/parsehtml/parsehtml.php
deleted file mode 100644 (file)
index 1a8ecac..0000000
+++ /dev/null
@@ -1,618 +0,0 @@
-<?php
-/**
- * parseHTML is a HTML parser which works with PHP 4 and above.
- * It tries to handle invalid HTML to some degree.
- *
- * @version 1.0 beta
- * @author Milian Wolff (mail@milianw.de, http://milianw.de)
- * @license LGPL, see LICENSE_LGPL.txt and the summary below
- * @copyright (C) 2007  Milian Wolff
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-class parseHTML {
-  /**
-   * tags which are always empty (<br /> etc.)
-   *
-   * @var array<string>
-   */
-  var $emptyTags = array(
-    'br',
-    'hr',
-    'input',
-    'img',
-    'area',
-    'link',
-    'meta',
-    'param',
-  );
-  /**
-   * tags with preformatted text
-   * whitespaces wont be touched in them
-   *
-   * @var array<string>
-   */
-  var $preformattedTags = array(
-    'script',
-    'style',
-    'pre',
-    'code',
-  );
-  /**
-   * supress HTML tags inside preformatted tags (see above)
-   *
-   * @var bool
-   */
-  var $noTagsInCode = false;
-  /**
-   * html to be parsed
-   *
-   * @var string
-   */
-  var $html = '';
-  /**
-   * node type:
-   *
-   * - tag (see isStartTag)
-   * - text (includes cdata)
-   * - comment
-   * - doctype
-   * - pi (processing instruction)
-   *
-   * @var string
-   */
-  var $nodeType = '';
-  /**
-   * current node content, i.e. either a
-   * simple string (text node), or something like
-   * <tag attrib="value"...>
-   *
-   * @var string
-   */
-  var $node = '';
-  /**
-   * wether current node is an opening tag (<a>) or not (</a>)
-   * set to NULL if current node is not a tag
-   * NOTE: empty tags (<br />) set this to true as well!
-   *
-   * @var bool | null
-   */
-  var $isStartTag = null;
-  /**
-   * wether current node is an empty tag (<br />) or not (<a></a>)
-   *
-   * @var bool | null
-   */
-  var $isEmptyTag = null;
-  /**
-   * tag name
-   *
-   * @var string | null
-   */
-  var $tagName = '';
-  /**
-   * attributes of current tag
-   *
-   * @var array (attribName=>value) | null
-   */
-  var $tagAttributes = null;
-  /**
-   * wether the current tag is a block element
-   *
-   * @var bool | null
-   */
-  var $isBlockElement = null;
-
-  /**
-   * keep whitespace
-   *
-   * @var int
-   */
-  var $keepWhitespace = 0;
-  /**
-   * list of open tags
-   * count this to get current depth
-   *
-   * @var array
-   */
-  var $openTags = array();
-  /**
-   * list of block elements
-   *
-   * @var array
-   * TODO: what shall we do with <del> and <ins> ?!
-   */
-  var $blockElements = array (
-    # tag name => <bool> is block
-    # block elements
-    'address' => true,
-    'blockquote' => true,
-    'center' => true,
-    'del' => true,
-    'dir' => true,
-    'div' => true,
-    'dl' => true,
-    'fieldset' => true,
-    'form' => true,
-    'h1' => true,
-    'h2' => true,
-    'h3' => true,
-    'h4' => true,
-    'h5' => true,
-    'h6' => true,
-    'hr' => true,
-    'ins' => true,
-    'isindex' => true,
-    'menu' => true,
-    'noframes' => true,
-    'noscript' => true,
-    'ol' => true,
-    'p' => true,
-    'pre' => true,
-    'table' => true,
-    'ul' => true,
-    # set table elements and list items to block as well
-    'thead' => true,
-    'tbody' => true,
-    'tfoot' => true,
-    'td' => true,
-    'tr' => true,
-    'th' => true,
-    'li' => true,
-    'dd' => true,
-    'dt' => true,
-    # header items and html / body as well
-    'html' => true,
-    'body' => true,
-    'head' => true,
-    'meta' => true,
-    'link' => true,
-    'style' => true,
-    'title' => true,
-    # unfancy media tags, when indented should be rendered as block
-    'map' => true,
-    'object' => true,
-    'param' => true,
-    'embed' => true,
-    'area' => true,
-    # inline elements
-    'a' => false,
-    'abbr' => false,
-    'acronym' => false,
-    'applet' => false,
-    'b' => false,
-    'basefont' => false,
-    'bdo' => false,
-    'big' => false,
-    'br' => false,
-    'button' => false,
-    'cite' => false,
-    'code' => false,
-    'del' => false,
-    'dfn' => false,
-    'em' => false,
-    'font' => false,
-    'i' => false,
-    'img' => false,
-    'ins' => false,
-    'input' => false,
-    'iframe' => false,
-    'kbd' => false,
-    'label' => false,
-    'q' => false,
-    'samp' => false,
-    'script' => false,
-    'select' => false,
-    'small' => false,
-    'span' => false,
-    'strong' => false,
-    'sub' => false,
-    'sup' => false,
-    'textarea' => false,
-    'tt' => false,
-    'var' => false,
-  );
-  /**
-   * get next node, set $this->html prior!
-   *
-   * @param void
-   * @return bool
-   */
-  function nextNode() {
-    if (empty($this->html)) {
-      # we are done with parsing the html string
-      return false;
-    }
-    static $skipWhitespace = true;
-    if ($this->isStartTag && !$this->isEmptyTag) {
-      array_push($this->openTags, $this->tagName);
-      if (in_array($this->tagName, $this->preformattedTags)) {
-        # dont truncate whitespaces for <code> or <pre> contents
-        $this->keepWhitespace++;
-      }
-    }
-
-    if ($this->html[0] == '<') {
-      $token = substr($this->html, 0, 9);
-      if (substr($token, 0, 2) == '<?') {
-        # xml prolog or other pi's
-        /** TODO **/
-        #trigger_error('this might need some work', E_USER_NOTICE);
-        $pos = strpos($this->html, '>');
-        $this->setNode('pi', $pos + 1);
-        return true;
-      }
-      if (substr($token, 0, 4) == '<!--') {
-        # comment
-        $pos = strpos($this->html, '-->');
-        if ($pos === false) {
-          # could not find a closing -->, use next gt instead
-          # this is firefox' behaviour
-          $pos = strpos($this->html, '>') + 1;
-        } else {
-          $pos += 3;
-        }
-        $this->setNode('comment', $pos);
-
-        $skipWhitespace = true;
-        return true;
-      }
-      if ($token == '<!DOCTYPE') {
-        # doctype
-        $this->setNode('doctype', strpos($this->html, '>')+1);
-
-        $skipWhitespace = true;
-        return true;
-      }
-      if ($token == '<![CDATA[') {
-        # cdata, use text node
-
-        # remove leading <![CDATA[
-        $this->html = substr($this->html, 9);
-
-        $this->setNode('text', strpos($this->html, ']]>')+3);
-
-        # remove trailing ]]> and trim
-        $this->node = substr($this->node, 0, -3);
-        $this->handleWhitespaces();
-
-        $skipWhitespace = true;
-        return true;
-      }
-      if ($this->parseTag()) {
-        # seems to be a tag
-        # handle whitespaces
-        if ($this->isBlockElement) {
-          $skipWhitespace = true;
-        } else {
-          $skipWhitespace = false;
-        }
-        return true;
-      }
-    }
-    if ($this->keepWhitespace) {
-      $skipWhitespace = false;
-    }
-    # when we get here it seems to be a text node
-    $pos = strpos($this->html, '<');
-    if ($pos === false) {
-      $pos = strlen($this->html);
-    }
-    $this->setNode('text', $pos);
-    $this->handleWhitespaces();
-    if ($skipWhitespace && $this->node == ' ') {
-      return $this->nextNode();
-    }
-    $skipWhitespace = false;
-    return true;
-  }
-  /**
-   * parse tag, set tag name and attributes, see if it's a closing tag and so forth...
-   *
-   * @param void
-   * @return bool
-   */
-  function parseTag() {
-    static $a_ord, $z_ord, $special_ords;
-    if (!isset($a_ord)) {
-      $a_ord = ord('a');
-      $z_ord = ord('z');
-      $special_ords = array(
-        ord(':'), // for xml:lang
-        ord('-'), // for http-equiv
-      );
-    }
-
-    $tagName = '';
-
-    $pos = 1;
-    $isStartTag = $this->html[$pos] != '/';
-    if (!$isStartTag) {
-      $pos++;
-    }
-    # get tagName
-    while (isset($this->html[$pos])) {
-      $pos_ord = ord(strtolower($this->html[$pos]));
-      if (($pos_ord >= $a_ord && $pos_ord <= $z_ord) || (!empty($tagName) && is_numeric($this->html[$pos]))) {
-        $tagName .= $this->html[$pos];
-        $pos++;
-      } else {
-        $pos--;
-        break;
-      }
-    }
-
-    $tagName = strtolower($tagName);
-    if (empty($tagName) || !isset($this->blockElements[$tagName])) {
-      # something went wrong => invalid tag
-      $this->invalidTag();
-      return false;
-    }
-    if ($this->noTagsInCode && end($this->openTags) == 'code' && !($tagName == 'code' && !$isStartTag)) {
-      # we supress all HTML tags inside code tags
-      $this->invalidTag();
-      return false;
-    }
-
-    # get tag attributes
-    /** TODO: in html 4 attributes do not need to be quoted **/
-    $isEmptyTag = false;
-    $attributes = array();
-    $currAttrib = '';
-    while (isset($this->html[$pos+1])) {
-      $pos++;
-      # close tag
-      if ($this->html[$pos] == '>' || $this->html[$pos].$this->html[$pos+1] == '/>') {
-        if ($this->html[$pos] == '/') {
-          $isEmptyTag = true;
-          $pos++;
-        }
-        break;
-      }
-
-      $pos_ord = ord(strtolower($this->html[$pos]));
-      if ( ($pos_ord >= $a_ord && $pos_ord <= $z_ord) || in_array($pos_ord, $special_ords)) {
-        # attribute name
-        $currAttrib .= $this->html[$pos];
-      } elseif (in_array($this->html[$pos], array(' ', "\t", "\n"))) {
-        # drop whitespace
-      } elseif (in_array($this->html[$pos].$this->html[$pos+1], array('="', "='"))) {
-        # get attribute value
-        $pos++;
-        $await = $this->html[$pos]; # single or double quote
-        $pos++;
-        $value = '';
-        while (isset($this->html[$pos]) && $this->html[$pos] != $await) {
-          $value .= $this->html[$pos];
-          $pos++;
-        }
-        $attributes[$currAttrib] = $value;
-        $currAttrib = '';
-      } else {
-        $this->invalidTag();
-        return false;
-      }
-    }
-    if ($this->html[$pos] != '>') {
-      $this->invalidTag();
-      return false;
-    }
-
-    if (!empty($currAttrib)) {
-      # html 4 allows something like <option selected> instead of <option selected="selected">
-      $attributes[$currAttrib] = $currAttrib;
-    }
-    if (!$isStartTag) {
-      if (!empty($attributes) || $tagName != end($this->openTags)) {
-        # end tags must not contain any attributes
-        # or maybe we did not expect a different tag to be closed
-        $this->invalidTag();
-        return false;
-      }
-      array_pop($this->openTags);
-      if (in_array($tagName, $this->preformattedTags)) {
-        $this->keepWhitespace--;
-      }
-    }
-    $pos++;
-    $this->node = substr($this->html, 0, $pos);
-    $this->html = substr($this->html, $pos);
-    $this->tagName = $tagName;
-    $this->tagAttributes = $attributes;
-    $this->isStartTag = $isStartTag;
-    $this->isEmptyTag = $isEmptyTag || in_array($tagName, $this->emptyTags);
-    if ($this->isEmptyTag) {
-      # might be not well formed
-      $this->node = preg_replace('# */? *>$#', ' />', $this->node);
-    }
-    $this->nodeType = 'tag';
-    $this->isBlockElement = $this->blockElements[$tagName];
-    return true;
-  }
-  /**
-   * handle invalid tags
-   *
-   * @param void
-   * @return void
-   */
-  function invalidTag() {
-    $this->html = substr_replace($this->html, '&lt;', 0, 1);
-  }
-  /**
-   * update all vars and make $this->html shorter
-   *
-   * @param string $type see description for $this->nodeType
-   * @param int $pos to which position shall we cut?
-   * @return void
-   */
-  function setNode($type, $pos) {
-    if ($this->nodeType == 'tag') {
-      # set tag specific vars to null
-      # $type == tag should not be called here
-      # see this::parseTag() for more
-      $this->tagName = null;
-      $this->tagAttributes = null;
-      $this->isStartTag = null;
-      $this->isEmptyTag = null;
-      $this->isBlockElement = null;
-
-    }
-    $this->nodeType = $type;
-    $this->node = substr($this->html, 0, $pos);
-    $this->html = substr($this->html, $pos);
-  }
-  /**
-   * check if $this->html begins with $str
-   *
-   * @param string $str
-   * @return bool
-   */
-  function match($str) {
-    return substr($this->html, 0, strlen($str)) == $str;
-  }
-  /**
-   * truncate whitespaces
-   *
-   * @param void
-   * @return void
-   */
-  function handleWhitespaces() {
-    if ($this->keepWhitespace) {
-      # <pre> or <code> before...
-      return;
-    }
-    # truncate multiple whitespaces to a single one
-    $this->node = preg_replace('#\s+#s', ' ', $this->node);
-  }
-  /**
-   * normalize self::node
-   *
-   * @param void
-   * @return void
-   */
-  function normalizeNode() {
-    $this->node = '<';
-    if (!$this->isStartTag) {
-      $this->node .= '/'.$this->tagName.'>';
-      return;
-    }
-    $this->node .= $this->tagName;
-    foreach ($this->tagAttributes as $name => $value) {
-      $this->node .= ' '.$name.'="'.str_replace('"', '&quot;', $value).'"';
-    }
-    if ($this->isEmptyTag) {
-      $this->node .= ' /';
-    }
-    $this->node .= '>';
-  }
-}
-
-/**
- * indent a HTML string properly
- *
- * @param string $html
- * @param string $indent optional
- * @return string
- */
-function indentHTML($html, $indent = "  ", $noTagsInCode = false) {
-  $parser = new parseHTML;
-  $parser->noTagsInCode = $noTagsInCode;
-  $parser->html = $html;
-  $html = '';
-  $last = true; # last tag was block elem
-  $indent_a = array();
-  while($parser->nextNode()) {
-    if ($parser->nodeType == 'tag') {
-      $parser->normalizeNode();
-    }
-    if ($parser->nodeType == 'tag' && $parser->isBlockElement) {
-      $isPreOrCode = in_array($parser->tagName, array('code', 'pre'));
-      if (!$parser->keepWhitespace && !$last && !$isPreOrCode) {
-        $html = rtrim($html)."\n";
-      }
-      if ($parser->isStartTag) {
-        $html .= implode($indent_a);
-        if (!$parser->isEmptyTag) {
-          array_push($indent_a, $indent);
-        }
-      } else {
-        array_pop($indent_a);
-        if (!$isPreOrCode) {
-          $html .= implode($indent_a);
-        }
-      }
-      $html .= $parser->node;
-      if (!$parser->keepWhitespace && !($isPreOrCode && $parser->isStartTag)) {
-        $html .= "\n";
-      }
-      $last = true;
-    } else {
-      if ($parser->nodeType == 'tag' && $parser->tagName == 'br') {
-        $html .= $parser->node."\n";
-        $last = true;
-        continue;
-      } elseif ($last && !$parser->keepWhitespace) {
-        $html .= implode($indent_a);
-        $parser->node = ltrim($parser->node);
-      }
-      $html .= $parser->node;
-
-      if (in_array($parser->nodeType, array('comment', 'pi', 'doctype'))) {
-        $html .= "\n";
-      } else {
-        $last = false;
-      }
-    }
-  }
-  return $html;
-}
-/*
-# testcase / example
-error_reporting(E_ALL);
-
-$html = '<p>Simple block on one line:</p>
-
-<div>foo</div>
-
-<p>And nested without indentation:</p>
-
-<div>
-<div>
-<div>
-foo
-</div>
-<div style=">"/>
-</div>
-<div>bar</div>
-</div>
-
-<p>And with attributes:</p>
-
-<div>
-    <div id="foo">
-    </div>
-</div>
-
-<p>This was broken in 1.0.2b7:</p>
-
-<div class="inlinepage">
-<div class="toggleableend">
-foo
-</div>
-</div>';
-#$html = '<a href="asdfasdf"       title=\'asdf\' foo="bar">asdf</a>';
-echo indentHTML($html);
-die();
-*/
diff --git a/www/plugins/facteur/paquet.xml b/www/plugins/facteur/paquet.xml
deleted file mode 100644 (file)
index be4958a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<paquet\r
-       prefix="facteur"\r
-       categorie="communication"\r
-       version="3.5.0"\r
-       etat="stable"\r
-       compatibilite="[3.0.0;3.2.*]"\r
-       logo="prive/themes/spip/images/facteur-32.png"\r
-       schema="1.1"\r
-       documentation="https://contrib.spip.net/Facteur"\r
->\r
-\r
-       <nom>Facteur</nom>\r
-       <!-- Il distribue votre courrier -->\r
-\r
-       <auteur>Collectif SPIP</auteur>\r
-       <credit lien="https://github.com/PHPMailer/PHPMailer">PHPMailer</credit>\r
-\r
-       <pipeline nom="facteur_pre_envoi" action="" />\r
-       <pipeline nom="ieconfig_metas" inclure="facteur_ieconfig_metas.php" />\r
-       <pipeline nom="formulaire_fond" inclure="facteur_pipelines.php" />\r
-\r
-       <menu nom="configurer_facteur" titre="facteur:configuration_facteur" parent="menu_configuration" icone="images/facteur-16.png" />\r
-</paquet>\r
diff --git a/www/plugins/facteur/phpmailer-php5/LICENSE b/www/plugins/facteur/phpmailer-php5/LICENSE
deleted file mode 100755 (executable)
index 8e0763d..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/www/plugins/facteur/phpmailer-php5/PHPMailerAutoload.php b/www/plugins/facteur/phpmailer-php5/PHPMailerAutoload.php
deleted file mode 100644 (file)
index eaa2e30..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * PHPMailer SPL autoloader.
- * PHP Version 5
- * @package PHPMailer
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- * @author Brent R. Matzelle (original founder)
- * @copyright 2012 - 2014 Marcus Bointon
- * @copyright 2010 - 2012 Jim Jagielski
- * @copyright 2004 - 2009 Andy Prevost
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
- * @note This program is distributed in the hope that it will be useful - WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/**
- * PHPMailer SPL autoloader.
- * @param string $classname The name of the class to load
- */
-function PHPMailerAutoload($classname)
-{
-    //Can't use __DIR__ as it's only in PHP 5.3+
-    $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
-    if (is_readable($filename)) {
-        require $filename;
-    }
-}
-
-if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
-    //SPL autoloading was introduced in PHP 5.1.2
-    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
-        spl_autoload_register('PHPMailerAutoload', true, true);
-    } else {
-        spl_autoload_register('PHPMailerAutoload');
-    }
-} else {
-    /**
-     * Fall back to traditional autoload for old PHP versions
-     * @param string $classname The name of the class to load
-     */
-    function __autoload($classname)
-    {
-        PHPMailerAutoload($classname);
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/VERSION b/www/plugins/facteur/phpmailer-php5/VERSION
deleted file mode 100644 (file)
index 567eefa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-5.2.21
diff --git a/www/plugins/facteur/phpmailer-php5/class.phpmailer.php b/www/plugins/facteur/phpmailer-php5/class.phpmailer.php
deleted file mode 100755 (executable)
index 8ff13f1..0000000
+++ /dev/null
@@ -1,4025 +0,0 @@
-<?php
-/**
- * PHPMailer - PHP email creation and transport class.
- * PHP Version 5
- * @package PHPMailer
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- * @author Brent R. Matzelle (original founder)
- * @copyright 2012 - 2014 Marcus Bointon
- * @copyright 2010 - 2012 Jim Jagielski
- * @copyright 2004 - 2009 Andy Prevost
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
- * @note This program is distributed in the hope that it will be useful - WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/**
- * PHPMailer - PHP email creation and transport class.
- * @package PHPMailer
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- * @author Brent R. Matzelle (original founder)
- */
-class PHPMailer
-{
-    /**
-     * The PHPMailer Version number.
-     * @var string
-     */
-    public $Version = '5.2.21';
-
-    /**
-     * Email priority.
-     * Options: null (default), 1 = High, 3 = Normal, 5 = low.
-     * When null, the header is not set at all.
-     * @var integer
-     */
-    public $Priority = null;
-
-    /**
-     * The character set of the message.
-     * @var string
-     */
-    public $CharSet = 'iso-8859-1';
-
-    /**
-     * The MIME Content-type of the message.
-     * @var string
-     */
-    public $ContentType = 'text/plain';
-
-    /**
-     * The message encoding.
-     * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
-     * @var string
-     */
-    public $Encoding = '8bit';
-
-    /**
-     * Holds the most recent mailer error message.
-     * @var string
-     */
-    public $ErrorInfo = '';
-
-    /**
-     * The From email address for the message.
-     * @var string
-     */
-    public $From = 'root@localhost';
-
-    /**
-     * The From name of the message.
-     * @var string
-     */
-    public $FromName = 'Root User';
-
-    /**
-     * The Sender email (Return-Path) of the message.
-     * If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
-     * @var string
-     */
-    public $Sender = '';
-
-    /**
-     * The Return-Path of the message.
-     * If empty, it will be set to either From or Sender.
-     * @var string
-     * @deprecated Email senders should never set a return-path header;
-     * it's the receiver's job (RFC5321 section 4.4), so this no longer does anything.
-     * @link https://tools.ietf.org/html/rfc5321#section-4.4 RFC5321 reference
-     */
-    public $ReturnPath = '';
-
-    /**
-     * The Subject of the message.
-     * @var string
-     */
-    public $Subject = '';
-
-    /**
-     * An HTML or plain text message body.
-     * If HTML then call isHTML(true).
-     * @var string
-     */
-    public $Body = '';
-
-    /**
-     * The plain-text message body.
-     * This body can be read by mail clients that do not have HTML email
-     * capability such as mutt & Eudora.
-     * Clients that can read HTML will view the normal Body.
-     * @var string
-     */
-    public $AltBody = '';
-
-    /**
-     * An iCal message part body.
-     * Only supported in simple alt or alt_inline message types
-     * To generate iCal events, use the bundled extras/EasyPeasyICS.php class or iCalcreator
-     * @link http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
-     * @link http://kigkonsult.se/iCalcreator/
-     * @var string
-     */
-    public $Ical = '';
-
-    /**
-     * The complete compiled MIME message body.
-     * @access protected
-     * @var string
-     */
-    protected $MIMEBody = '';
-
-    /**
-     * The complete compiled MIME message headers.
-     * @var string
-     * @access protected
-     */
-    protected $MIMEHeader = '';
-
-    /**
-     * Extra headers that createHeader() doesn't fold in.
-     * @var string
-     * @access protected
-     */
-    protected $mailHeader = '';
-
-    /**
-     * Word-wrap the message body to this number of chars.
-     * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.
-     * @var integer
-     */
-    public $WordWrap = 0;
-
-    /**
-     * Which method to use to send mail.
-     * Options: "mail", "sendmail", or "smtp".
-     * @var string
-     */
-    public $Mailer = 'mail';
-
-    /**
-     * The path to the sendmail program.
-     * @var string
-     */
-    public $Sendmail = '/usr/sbin/sendmail';
-
-    /**
-     * Whether mail() uses a fully sendmail-compatible MTA.
-     * One which supports sendmail's "-oi -f" options.
-     * @var boolean
-     */
-    public $UseSendmailOptions = true;
-
-    /**
-     * Path to PHPMailer plugins.
-     * Useful if the SMTP class is not in the PHP include path.
-     * @var string
-     * @deprecated Should not be needed now there is an autoloader.
-     */
-    public $PluginDir = '';
-
-    /**
-     * The email address that a reading confirmation should be sent to, also known as read receipt.
-     * @var string
-     */
-    public $ConfirmReadingTo = '';
-
-    /**
-     * The hostname to use in the Message-ID header and as default HELO string.
-     * If empty, PHPMailer attempts to find one with, in order,
-     * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value
-     * 'localhost.localdomain'.
-     * @var string
-     */
-    public $Hostname = '';
-
-    /**
-     * An ID to be used in the Message-ID header.
-     * If empty, a unique id will be generated.
-     * You can set your own, but it must be in the format "<id@domain>",
-     * as defined in RFC5322 section 3.6.4 or it will be ignored.
-     * @see https://tools.ietf.org/html/rfc5322#section-3.6.4
-     * @var string
-     */
-    public $MessageID = '';
-
-    /**
-     * The message Date to be used in the Date header.
-     * If empty, the current date will be added.
-     * @var string
-     */
-    public $MessageDate = '';
-
-    /**
-     * SMTP hosts.
-     * Either a single hostname or multiple semicolon-delimited hostnames.
-     * You can also specify a different port
-     * for each host by using this format: [hostname:port]
-     * (e.g. "smtp1.example.com:25;smtp2.example.com").
-     * You can also specify encryption type, for example:
-     * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
-     * Hosts will be tried in order.
-     * @var string
-     */
-    public $Host = 'localhost';
-
-    /**
-     * The default SMTP server port.
-     * @var integer
-     * @TODO Why is this needed when the SMTP class takes care of it?
-     */
-    public $Port = 25;
-
-    /**
-     * The SMTP HELO of the message.
-     * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find
-     * one with the same method described above for $Hostname.
-     * @var string
-     * @see PHPMailer::$Hostname
-     */
-    public $Helo = '';
-
-    /**
-     * What kind of encryption to use on the SMTP connection.
-     * Options: '', 'ssl' or 'tls'
-     * @var string
-     */
-    public $SMTPSecure = '';
-
-    /**
-     * Whether to enable TLS encryption automatically if a server supports it,
-     * even if `SMTPSecure` is not set to 'tls'.
-     * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
-     * @var boolean
-     */
-    public $SMTPAutoTLS = true;
-
-    /**
-     * Whether to use SMTP authentication.
-     * Uses the Username and Password properties.
-     * @var boolean
-     * @see PHPMailer::$Username
-     * @see PHPMailer::$Password
-     */
-    public $SMTPAuth = false;
-
-    /**
-     * Options array passed to stream_context_create when connecting via SMTP.
-     * @var array
-     */
-    public $SMTPOptions = array();
-
-    /**
-     * SMTP username.
-     * @var string
-     */
-    public $Username = '';
-
-    /**
-     * SMTP password.
-     * @var string
-     */
-    public $Password = '';
-
-    /**
-     * SMTP auth type.
-     * Options are CRAM-MD5, LOGIN, PLAIN, NTLM, XOAUTH2, attempted in that order if not specified
-     * @var string
-     */
-    public $AuthType = '';
-
-    /**
-     * SMTP realm.
-     * Used for NTLM auth
-     * @var string
-     */
-    public $Realm = '';
-
-    /**
-     * SMTP workstation.
-     * Used for NTLM auth
-     * @var string
-     */
-    public $Workstation = '';
-
-    /**
-     * The SMTP server timeout in seconds.
-     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
-     * @var integer
-     */
-    public $Timeout = 300;
-
-    /**
-     * SMTP class debug output mode.
-     * Debug output level.
-     * Options:
-     * * `0` No output
-     * * `1` Commands
-     * * `2` Data and commands
-     * * `3` As 2 plus connection status
-     * * `4` Low-level data output
-     * @var integer
-     * @see SMTP::$do_debug
-     */
-    public $SMTPDebug = 0;
-
-    /**
-     * How to handle debug output.
-     * Options:
-     * * `echo` Output plain-text as-is, appropriate for CLI
-     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
-     * * `error_log` Output to error log as configured in php.ini
-     *
-     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
-     * <code>
-     * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
-     * </code>
-     * @var string|callable
-     * @see SMTP::$Debugoutput
-     */
-    public $Debugoutput = 'echo';
-
-    /**
-     * Whether to keep SMTP connection open after each message.
-     * If this is set to true then to close the connection
-     * requires an explicit call to smtpClose().
-     * @var boolean
-     */
-    public $SMTPKeepAlive = false;
-
-    /**
-     * Whether to split multiple to addresses into multiple messages
-     * or send them all in one message.
-     * Only supported in `mail` and `sendmail` transports, not in SMTP.
-     * @var boolean
-     */
-    public $SingleTo = false;
-
-    /**
-     * Storage for addresses when SingleTo is enabled.
-     * @var array
-     * @TODO This should really not be public
-     */
-    public $SingleToArray = array();
-
-    /**
-     * Whether to generate VERP addresses on send.
-     * Only applicable when sending via SMTP.
-     * @link https://en.wikipedia.org/wiki/Variable_envelope_return_path
-     * @link http://www.postfix.org/VERP_README.html Postfix VERP info
-     * @var boolean
-     */
-    public $do_verp = false;
-
-    /**
-     * Whether to allow sending messages with an empty body.
-     * @var boolean
-     */
-    public $AllowEmpty = false;
-
-    /**
-     * The default line ending.
-     * @note The default remains "\n". We force CRLF where we know
-     *        it must be used via self::CRLF.
-     * @var string
-     */
-    public $LE = "\n";
-
-    /**
-     * DKIM selector.
-     * @var string
-     */
-    public $DKIM_selector = '';
-
-    /**
-     * DKIM Identity.
-     * Usually the email address used as the source of the email.
-     * @var string
-     */
-    public $DKIM_identity = '';
-
-    /**
-     * DKIM passphrase.
-     * Used if your key is encrypted.
-     * @var string
-     */
-    public $DKIM_passphrase = '';
-
-    /**
-     * DKIM signing domain name.
-     * @example 'example.com'
-     * @var string
-     */
-    public $DKIM_domain = '';
-
-    /**
-     * DKIM private key file path.
-     * @var string
-     */
-    public $DKIM_private = '';
-
-    /**
-     * DKIM private key string.
-     * If set, takes precedence over `$DKIM_private`.
-     * @var string
-     */
-    public $DKIM_private_string = '';
-
-    /**
-     * Callback Action function name.
-     *
-     * The function that handles the result of the send email action.
-     * It is called out by send() for each email sent.
-     *
-     * Value can be any php callable: http://www.php.net/is_callable
-     *
-     * Parameters:
-     *   boolean $result        result of the send action
-     *   string  $to            email address of the recipient
-     *   string  $cc            cc email addresses
-     *   string  $bcc           bcc email addresses
-     *   string  $subject       the subject
-     *   string  $body          the email body
-     *   string  $from          email address of sender
-     * @var string
-     */
-    public $action_function = '';
-
-    /**
-     * What to put in the X-Mailer header.
-     * Options: An empty string for PHPMailer default, whitespace for none, or a string to use
-     * @var string
-     */
-    public $XMailer = '';
-
-    /**
-     * Which validator to use by default when validating email addresses.
-     * May be a callable to inject your own validator, but there are several built-in validators.
-     * @see PHPMailer::validateAddress()
-     * @var string|callable
-     * @static
-     */
-    public static $validator = 'auto';
-
-    /**
-     * An instance of the SMTP sender class.
-     * @var SMTP
-     * @access protected
-     */
-    protected $smtp = null;
-
-    /**
-     * The array of 'to' names and addresses.
-     * @var array
-     * @access protected
-     */
-    protected $to = array();
-
-    /**
-     * The array of 'cc' names and addresses.
-     * @var array
-     * @access protected
-     */
-    protected $cc = array();
-
-    /**
-     * The array of 'bcc' names and addresses.
-     * @var array
-     * @access protected
-     */
-    protected $bcc = array();
-
-    /**
-     * The array of reply-to names and addresses.
-     * @var array
-     * @access protected
-     */
-    protected $ReplyTo = array();
-
-    /**
-     * An array of all kinds of addresses.
-     * Includes all of $to, $cc, $bcc
-     * @var array
-     * @access protected
-     * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
-     */
-    protected $all_recipients = array();
-
-    /**
-     * An array of names and addresses queued for validation.
-     * In send(), valid and non duplicate entries are moved to $all_recipients
-     * and one of $to, $cc, or $bcc.
-     * This array is used only for addresses with IDN.
-     * @var array
-     * @access protected
-     * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
-     * @see PHPMailer::$all_recipients
-     */
-    protected $RecipientsQueue = array();
-
-    /**
-     * An array of reply-to names and addresses queued for validation.
-     * In send(), valid and non duplicate entries are moved to $ReplyTo.
-     * This array is used only for addresses with IDN.
-     * @var array
-     * @access protected
-     * @see PHPMailer::$ReplyTo
-     */
-    protected $ReplyToQueue = array();
-
-    /**
-     * The array of attachments.
-     * @var array
-     * @access protected
-     */
-    protected $attachment = array();
-
-    /**
-     * The array of custom headers.
-     * @var array
-     * @access protected
-     */
-    protected $CustomHeader = array();
-
-    /**
-     * The most recent Message-ID (including angular brackets).
-     * @var string
-     * @access protected
-     */
-    protected $lastMessageID = '';
-
-    /**
-     * The message's MIME type.
-     * @var string
-     * @access protected
-     */
-    protected $message_type = '';
-
-    /**
-     * The array of MIME boundary strings.
-     * @var array
-     * @access protected
-     */
-    protected $boundary = array();
-
-    /**
-     * The array of available languages.
-     * @var array
-     * @access protected
-     */
-    protected $language = array();
-
-    /**
-     * The number of errors encountered.
-     * @var integer
-     * @access protected
-     */
-    protected $error_count = 0;
-
-    /**
-     * The S/MIME certificate file path.
-     * @var string
-     * @access protected
-     */
-    protected $sign_cert_file = '';
-
-    /**
-     * The S/MIME key file path.
-     * @var string
-     * @access protected
-     */
-    protected $sign_key_file = '';
-
-    /**
-     * The optional S/MIME extra certificates ("CA Chain") file path.
-     * @var string
-     * @access protected
-     */
-    protected $sign_extracerts_file = '';
-
-    /**
-     * The S/MIME password for the key.
-     * Used only if the key is encrypted.
-     * @var string
-     * @access protected
-     */
-    protected $sign_key_pass = '';
-
-    /**
-     * Whether to throw exceptions for errors.
-     * @var boolean
-     * @access protected
-     */
-    protected $exceptions = false;
-
-    /**
-     * Unique ID used for message ID and boundaries.
-     * @var string
-     * @access protected
-     */
-    protected $uniqueid = '';
-
-    /**
-     * Error severity: message only, continue processing.
-     */
-    const STOP_MESSAGE = 0;
-
-    /**
-     * Error severity: message, likely ok to continue processing.
-     */
-    const STOP_CONTINUE = 1;
-
-    /**
-     * Error severity: message, plus full stop, critical error reached.
-     */
-    const STOP_CRITICAL = 2;
-
-    /**
-     * SMTP RFC standard line ending.
-     */
-    const CRLF = "\r\n";
-
-    /**
-     * The maximum line length allowed by RFC 2822 section 2.1.1
-     * @var integer
-     */
-    const MAX_LINE_LENGTH = 998;
-
-    /**
-     * Constructor.
-     * @param boolean $exceptions Should we throw external exceptions?
-     */
-    public function __construct($exceptions = null)
-    {
-        if ($exceptions !== null) {
-            $this->exceptions = (boolean)$exceptions;
-        }
-    }
-
-    /**
-     * Destructor.
-     */
-    public function __destruct()
-    {
-        //Close any open SMTP connection nicely
-        $this->smtpClose();
-    }
-
-    /**
-     * Call mail() in a safe_mode-aware fashion.
-     * Also, unless sendmail_path points to sendmail (or something that
-     * claims to be sendmail), don't pass params (not a perfect fix,
-     * but it will do)
-     * @param string $to To
-     * @param string $subject Subject
-     * @param string $body Message Body
-     * @param string $header Additional Header(s)
-     * @param string $params Params
-     * @access private
-     * @return boolean
-     */
-    private function mailPassthru($to, $subject, $body, $header, $params)
-    {
-        //Check overloading of mail function to avoid double-encoding
-        if (ini_get('mbstring.func_overload') & 1) {
-            $subject = $this->secureHeader($subject);
-        } else {
-            $subject = $this->encodeHeader($this->secureHeader($subject));
-        }
-
-        //Can't use additional_parameters in safe_mode, calling mail() with null params breaks
-        //@link http://php.net/manual/en/function.mail.php
-        if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
-            $result = @mail($to, $subject, $body, $header);
-        } else {
-            $result = @mail($to, $subject, $body, $header, $params);
-        }
-        return $result;
-    }
-    /**
-     * Output debugging info via user-defined method.
-     * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug).
-     * @see PHPMailer::$Debugoutput
-     * @see PHPMailer::$SMTPDebug
-     * @param string $str
-     */
-    protected function edebug($str)
-    {
-        if ($this->SMTPDebug <= 0) {
-            return;
-        }
-        //Avoid clash with built-in function names
-        if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
-            call_user_func($this->Debugoutput, $str, $this->SMTPDebug);
-            return;
-        }
-        switch ($this->Debugoutput) {
-            case 'error_log':
-                //Don't output, just log
-                error_log($str);
-                break;
-            case 'html':
-                //Cleans up output a bit for a better looking, HTML-safe output
-                echo htmlentities(
-                    preg_replace('/[\r\n]+/', '', $str),
-                    ENT_QUOTES,
-                    'UTF-8'
-                )
-                . "<br>\n";
-                break;
-            case 'echo':
-            default:
-                //Normalize line breaks
-                $str = preg_replace('/\r\n?/ms', "\n", $str);
-                echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
-                    "\n",
-                    "\n                   \t                  ",
-                    trim($str)
-                ) . "\n";
-        }
-    }
-
-    /**
-     * Sets message type to HTML or plain.
-     * @param boolean $isHtml True for HTML mode.
-     * @return void
-     */
-    public function isHTML($isHtml = true)
-    {
-        if ($isHtml) {
-            $this->ContentType = 'text/html';
-        } else {
-            $this->ContentType = 'text/plain';
-        }
-    }
-
-    /**
-     * Send messages using SMTP.
-     * @return void
-     */
-    public function isSMTP()
-    {
-        $this->Mailer = 'smtp';
-    }
-
-    /**
-     * Send messages using PHP's mail() function.
-     * @return void
-     */
-    public function isMail()
-    {
-        $this->Mailer = 'mail';
-    }
-
-    /**
-     * Send messages using $Sendmail.
-     * @return void
-     */
-    public function isSendmail()
-    {
-        $ini_sendmail_path = ini_get('sendmail_path');
-
-        if (!stristr($ini_sendmail_path, 'sendmail')) {
-            $this->Sendmail = '/usr/sbin/sendmail';
-        } else {
-            $this->Sendmail = $ini_sendmail_path;
-        }
-        $this->Mailer = 'sendmail';
-    }
-
-    /**
-     * Send messages using qmail.
-     * @return void
-     */
-    public function isQmail()
-    {
-        $ini_sendmail_path = ini_get('sendmail_path');
-
-        if (!stristr($ini_sendmail_path, 'qmail')) {
-            $this->Sendmail = '/var/qmail/bin/qmail-inject';
-        } else {
-            $this->Sendmail = $ini_sendmail_path;
-        }
-        $this->Mailer = 'qmail';
-    }
-
-    /**
-     * Add a "To" address.
-     * @param string $address The email address to send to
-     * @param string $name
-     * @return boolean true on success, false if address already used or invalid in some way
-     */
-    public function addAddress($address, $name = '')
-    {
-        return $this->addOrEnqueueAnAddress('to', $address, $name);
-    }
-
-    /**
-     * Add a "CC" address.
-     * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer.
-     * @param string $address The email address to send to
-     * @param string $name
-     * @return boolean true on success, false if address already used or invalid in some way
-     */
-    public function addCC($address, $name = '')
-    {
-        return $this->addOrEnqueueAnAddress('cc', $address, $name);
-    }
-
-    /**
-     * Add a "BCC" address.
-     * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer.
-     * @param string $address The email address to send to
-     * @param string $name
-     * @return boolean true on success, false if address already used or invalid in some way
-     */
-    public function addBCC($address, $name = '')
-    {
-        return $this->addOrEnqueueAnAddress('bcc', $address, $name);
-    }
-
-    /**
-     * Add a "Reply-To" address.
-     * @param string $address The email address to reply to
-     * @param string $name
-     * @return boolean true on success, false if address already used or invalid in some way
-     */
-    public function addReplyTo($address, $name = '')
-    {
-        return $this->addOrEnqueueAnAddress('Reply-To', $address, $name);
-    }
-
-    /**
-     * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer
-     * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still
-     * be modified after calling this function), addition of such addresses is delayed until send().
-     * Addresses that have been added already return false, but do not throw exceptions.
-     * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
-     * @param string $address The email address to send, resp. to reply to
-     * @param string $name
-     * @throws phpmailerException
-     * @return boolean true on success, false if address already used or invalid in some way
-     * @access protected
-     */
-    protected function addOrEnqueueAnAddress($kind, $address, $name)
-    {
-        $address = trim($address);
-        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
-        if (($pos = strrpos($address, '@')) === false) {
-            // At-sign is misssing.
-            $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
-            $this->setError($error_message);
-            $this->edebug($error_message);
-            if ($this->exceptions) {
-                throw new phpmailerException($error_message);
-            }
-            return false;
-        }
-        $params = array($kind, $address, $name);
-        // Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
-        if ($this->has8bitChars(substr($address, ++$pos)) and $this->idnSupported()) {
-            if ($kind != 'Reply-To') {
-                if (!array_key_exists($address, $this->RecipientsQueue)) {
-                    $this->RecipientsQueue[$address] = $params;
-                    return true;
-                }
-            } else {
-                if (!array_key_exists($address, $this->ReplyToQueue)) {
-                    $this->ReplyToQueue[$address] = $params;
-                    return true;
-                }
-            }
-            return false;
-        }
-        // Immediately add standard addresses without IDN.
-        return call_user_func_array(array($this, 'addAnAddress'), $params);
-    }
-
-    /**
-     * Add an address to one of the recipient arrays or to the ReplyTo array.
-     * Addresses that have been added already return false, but do not throw exceptions.
-     * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
-     * @param string $address The email address to send, resp. to reply to
-     * @param string $name
-     * @throws phpmailerException
-     * @return boolean true on success, false if address already used or invalid in some way
-     * @access protected
-     */
-    protected function addAnAddress($kind, $address, $name = '')
-    {
-        if (!in_array($kind, array('to', 'cc', 'bcc', 'Reply-To'))) {
-            $error_message = $this->lang('Invalid recipient kind: ') . $kind;
-            $this->setError($error_message);
-            $this->edebug($error_message);
-            if ($this->exceptions) {
-                throw new phpmailerException($error_message);
-            }
-            return false;
-        }
-        if (!$this->validateAddress($address)) {
-            $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
-            $this->setError($error_message);
-            $this->edebug($error_message);
-            if ($this->exceptions) {
-                throw new phpmailerException($error_message);
-            }
-            return false;
-        }
-        if ($kind != 'Reply-To') {
-            if (!array_key_exists(strtolower($address), $this->all_recipients)) {
-                array_push($this->$kind, array($address, $name));
-                $this->all_recipients[strtolower($address)] = true;
-                return true;
-            }
-        } else {
-            if (!array_key_exists(strtolower($address), $this->ReplyTo)) {
-                $this->ReplyTo[strtolower($address)] = array($address, $name);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Parse and validate a string containing one or more RFC822-style comma-separated email addresses
-     * of the form "display name <address>" into an array of name/address pairs.
-     * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.
-     * Note that quotes in the name part are removed.
-     * @param string $addrstr The address list string
-     * @param bool $useimap Whether to use the IMAP extension to parse the list
-     * @return array
-     * @link http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
-     */
-    public function parseAddresses($addrstr, $useimap = true)
-    {
-        $addresses = array();
-        if ($useimap and function_exists('imap_rfc822_parse_adrlist')) {
-            //Use this built-in parser if it's available
-            $list = imap_rfc822_parse_adrlist($addrstr, '');
-            foreach ($list as $address) {
-                if ($address->host != '.SYNTAX-ERROR.') {
-                    if ($this->validateAddress($address->mailbox . '@' . $address->host)) {
-                        $addresses[] = array(
-                            'name' => (property_exists($address, 'personal') ? $address->personal : ''),
-                            'address' => $address->mailbox . '@' . $address->host
-                        );
-                    }
-                }
-            }
-        } else {
-            //Use this simpler parser
-            $list = explode(',', $addrstr);
-            foreach ($list as $address) {
-                $address = trim($address);
-                //Is there a separate name part?
-                if (strpos($address, '<') === false) {
-                    //No separate name, just use the whole thing
-                    if ($this->validateAddress($address)) {
-                        $addresses[] = array(
-                            'name' => '',
-                            'address' => $address
-                        );
-                    }
-                } else {
-                    list($name, $email) = explode('<', $address);
-                    $email = trim(str_replace('>', '', $email));
-                    if ($this->validateAddress($email)) {
-                        $addresses[] = array(
-                            'name' => trim(str_replace(array('"', "'"), '', $name)),
-                            'address' => $email
-                        );
-                    }
-                }
-            }
-        }
-        return $addresses;
-    }
-
-    /**
-     * Set the From and FromName properties.
-     * @param string $address
-     * @param string $name
-     * @param boolean $auto Whether to also set the Sender address, defaults to true
-     * @throws phpmailerException
-     * @return boolean
-     */
-    public function setFrom($address, $name = '', $auto = true)
-    {
-        $address = trim($address);
-        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
-        // Don't validate now addresses with IDN. Will be done in send().
-        if (($pos = strrpos($address, '@')) === false or
-            (!$this->has8bitChars(substr($address, ++$pos)) or !$this->idnSupported()) and
-            !$this->validateAddress($address)) {
-            $error_message = $this->lang('invalid_address') . " (setFrom) $address";
-            $this->setError($error_message);
-            $this->edebug($error_message);
-            if ($this->exceptions) {
-                throw new phpmailerException($error_message);
-            }
-            return false;
-        }
-        $this->From = $address;
-        $this->FromName = $name;
-        if ($auto) {
-            if (empty($this->Sender)) {
-                $this->Sender = $address;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Return the Message-ID header of the last email.
-     * Technically this is the value from the last time the headers were created,
-     * but it's also the message ID of the last sent message except in
-     * pathological cases.
-     * @return string
-     */
-    public function getLastMessageID()
-    {
-        return $this->lastMessageID;
-    }
-
-    /**
-     * Check that a string looks like an email address.
-     * @param string $address The email address to check
-     * @param string|callable $patternselect A selector for the validation pattern to use :
-     * * `auto` Pick best pattern automatically;
-     * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0, PHP >= 5.3.2, 5.2.14;
-     * * `pcre` Use old PCRE implementation;
-     * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;
-     * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.
-     * * `noregex` Don't use a regex: super fast, really dumb.
-     * Alternatively you may pass in a callable to inject your own validator, for example:
-     * PHPMailer::validateAddress('user@example.com', function($address) {
-     *     return (strpos($address, '@') !== false);
-     * });
-     * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator.
-     * @return boolean
-     * @static
-     * @access public
-     */
-    public static function validateAddress($address, $patternselect = null)
-    {
-        if (is_null($patternselect)) {
-            $patternselect = self::$validator;
-        }
-        if (is_callable($patternselect)) {
-            return call_user_func($patternselect, $address);
-        }
-        //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321
-        if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) {
-            return false;
-        }
-        if (!$patternselect or $patternselect == 'auto') {
-            //Check this constant first so it works when extension_loaded() is disabled by safe mode
-            //Constant was added in PHP 5.2.4
-            if (defined('PCRE_VERSION')) {
-                //This pattern can get stuck in a recursive loop in PCRE <= 8.0.2
-                if (version_compare(PCRE_VERSION, '8.0.3') >= 0) {
-                    $patternselect = 'pcre8';
-                } else {
-                    $patternselect = 'pcre';
-                }
-            } elseif (function_exists('extension_loaded') and extension_loaded('pcre')) {
-                //Fall back to older PCRE
-                $patternselect = 'pcre';
-            } else {
-                //Filter_var appeared in PHP 5.2.0 and does not require the PCRE extension
-                if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
-                    $patternselect = 'php';
-                } else {
-                    $patternselect = 'noregex';
-                }
-            }
-        }
-        switch ($patternselect) {
-            case 'pcre8':
-                /**
-                 * Uses the same RFC5322 regex on which FILTER_VALIDATE_EMAIL is based, but allows dotless domains.
-                 * @link http://squiloople.com/2009/12/20/email-address-validation/
-                 * @copyright 2009-2010 Michael Rushton
-                 * Feel free to use and redistribute this code. But please keep this copyright notice.
-                 */
-                return (boolean)preg_match(
-                    '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' .
-                    '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' .
-                    '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' .
-                    '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' .
-                    '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .
-                    '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .
-                    '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .
-                    '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
-                    '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
-                    $address
-                );
-            case 'pcre':
-                //An older regex that doesn't need a recent PCRE
-                return (boolean)preg_match(
-                    '/^(?!(?>"?(?>\\\[ -~]|[^"])"?){255,})(?!(?>"?(?>\\\[ -~]|[^"])"?){65,}@)(?>' .
-                    '[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*")' .
-                    '(?>\.(?>[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*"))*' .
-                    '@(?>(?![a-z0-9-]{64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>\.(?![a-z0-9-]{64,})' .
-                    '(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)){0,126}|\[(?:(?>IPv6:(?>(?>[a-f0-9]{1,4})(?>:' .
-                    '[a-f0-9]{1,4}){7}|(?!(?:.*[a-f0-9][:\]]){8,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?' .
-                    '::(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?))|(?>(?>IPv6:(?>[a-f0-9]{1,4}(?>:' .
-                    '[a-f0-9]{1,4}){5}:|(?!(?:.*[a-f0-9]:){6,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4})?' .
-                    '::(?>(?:[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4}):)?))?(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
-                    '|[1-9]?[0-9])(?>\.(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}))\])$/isD',
-                    $address
-                );
-            case 'html5':
-                /**
-                 * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements.
-                 * @link http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email)
-                 */
-                return (boolean)preg_match(
-                    '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' .
-                    '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',
-                    $address
-                );
-            case 'noregex':
-                //No PCRE! Do something _very_ approximate!
-                //Check the address is 3 chars or longer and contains an @ that's not the first or last char
-                return (strlen($address) >= 3
-                    and strpos($address, '@') >= 1
-                    and strpos($address, '@') != strlen($address) - 1);
-            case 'php':
-            default:
-                return (boolean)filter_var($address, FILTER_VALIDATE_EMAIL);
-        }
-    }
-
-    /**
-     * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the
-     * "intl" and "mbstring" PHP extensions.
-     * @return bool "true" if required functions for IDN support are present
-     */
-    public function idnSupported()
-    {
-        // @TODO: Write our own "idn_to_ascii" function for PHP <= 5.2.
-        return function_exists('idn_to_ascii') and function_exists('mb_convert_encoding');
-    }
-
-    /**
-     * Converts IDN in given email address to its ASCII form, also known as punycode, if possible.
-     * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet.
-     * This function silently returns unmodified address if:
-     * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form)
-     * - Conversion to punycode is impossible (e.g. required PHP functions are not available)
-     *   or fails for any reason (e.g. domain has characters not allowed in an IDN)
-     * @see PHPMailer::$CharSet
-     * @param string $address The email address to convert
-     * @return string The encoded address in ASCII form
-     */
-    public function punyencodeAddress($address)
-    {
-        // Verify we have required functions, CharSet, and at-sign.
-        if ($this->idnSupported() and
-            !empty($this->CharSet) and
-            ($pos = strrpos($address, '@')) !== false) {
-            $domain = substr($address, ++$pos);
-            // Verify CharSet string is a valid one, and domain properly encoded in this CharSet.
-            if ($this->has8bitChars($domain) and @mb_check_encoding($domain, $this->CharSet)) {
-                $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet);
-                if (($punycode = defined('INTL_IDNA_VARIANT_UTS46') ?
-                    idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46) :
-                    idn_to_ascii($domain)) !== false) {
-                    return substr($address, 0, $pos) . $punycode;
-                }
-            }
-        }
-        return $address;
-    }
-
-    /**
-     * Create a message and send it.
-     * Uses the sending method specified by $Mailer.
-     * @throws phpmailerException
-     * @return boolean false on error - See the ErrorInfo property for details of the error.
-     */
-    public function send()
-    {
-        try {
-            if (!$this->preSend()) {
-                return false;
-            }
-            return $this->postSend();
-        } catch (phpmailerException $exc) {
-            $this->mailHeader = '';
-            $this->setError($exc->getMessage());
-            if ($this->exceptions) {
-                throw $exc;
-            }
-            return false;
-        }
-    }
-
-    /**
-     * Prepare a message for sending.
-     * @throws phpmailerException
-     * @return boolean
-     */
-    public function preSend()
-    {
-        try {
-            $this->error_count = 0; // Reset errors
-            $this->mailHeader = '';
-
-            // Dequeue recipient and Reply-To addresses with IDN
-            foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
-                $params[1] = $this->punyencodeAddress($params[1]);
-                call_user_func_array(array($this, 'addAnAddress'), $params);
-            }
-            if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
-                throw new phpmailerException($this->lang('provide_address'), self::STOP_CRITICAL);
-            }
-
-            // Validate From, Sender, and ConfirmReadingTo addresses
-            foreach (array('From', 'Sender', 'ConfirmReadingTo') as $address_kind) {
-                $this->$address_kind = trim($this->$address_kind);
-                if (empty($this->$address_kind)) {
-                    continue;
-                }
-                $this->$address_kind = $this->punyencodeAddress($this->$address_kind);
-                if (!$this->validateAddress($this->$address_kind)) {
-                    $error_message = $this->lang('invalid_address') . ' (punyEncode) ' . $this->$address_kind;
-                    $this->setError($error_message);
-                    $this->edebug($error_message);
-                    if ($this->exceptions) {
-                        throw new phpmailerException($error_message);
-                    }
-                    return false;
-                }
-            }
-
-            // Set whether the message is multipart/alternative
-            if ($this->alternativeExists()) {
-                $this->ContentType = 'multipart/alternative';
-            }
-
-            $this->setMessageType();
-            // Refuse to send an empty message unless we are specifically allowing it
-            if (!$this->AllowEmpty and empty($this->Body)) {
-                throw new phpmailerException($this->lang('empty_message'), self::STOP_CRITICAL);
-            }
-
-            // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
-            $this->MIMEHeader = '';
-            $this->MIMEBody = $this->createBody();
-            // createBody may have added some headers, so retain them
-            $tempheaders = $this->MIMEHeader;
-            $this->MIMEHeader = $this->createHeader();
-            $this->MIMEHeader .= $tempheaders;
-
-            // To capture the complete message when using mail(), create
-            // an extra header list which createHeader() doesn't fold in
-            if ($this->Mailer == 'mail') {
-                if (count($this->to) > 0) {
-                    $this->mailHeader .= $this->addrAppend('To', $this->to);
-                } else {
-                    $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
-                }
-                $this->mailHeader .= $this->headerLine(
-                    'Subject',
-                    $this->encodeHeader($this->secureHeader(trim($this->Subject)))
-                );
-            }
-
-            // Sign with DKIM if enabled
-            if (!empty($this->DKIM_domain)
-                && !empty($this->DKIM_selector)
-                && (!empty($this->DKIM_private_string)
-                   || (!empty($this->DKIM_private) && file_exists($this->DKIM_private))
-                )
-            ) {
-                $header_dkim = $this->DKIM_Add(
-                    $this->MIMEHeader . $this->mailHeader,
-                    $this->encodeHeader($this->secureHeader($this->Subject)),
-                    $this->MIMEBody
-                );
-                $this->MIMEHeader = rtrim($this->MIMEHeader, "\r\n ") . self::CRLF .
-                    str_replace("\r\n", "\n", $header_dkim) . self::CRLF;
-            }
-            return true;
-        } catch (phpmailerException $exc) {
-            $this->setError($exc->getMessage());
-            if ($this->exceptions) {
-                throw $exc;
-            }
-            return false;
-        }
-    }
-
-    /**
-     * Actually send a message.
-     * Send the email via the selected mechanism
-     * @throws phpmailerException
-     * @return boolean
-     */
-    public function postSend()
-    {
-        try {
-            // Choose the mailer and send through it
-            switch ($this->Mailer) {
-                case 'sendmail':
-                case 'qmail':
-                    return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);
-                case 'smtp':
-                    return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);
-                case 'mail':
-                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
-                default:
-                    $sendMethod = $this->Mailer.'Send';
-                    if (method_exists($this, $sendMethod)) {
-                        return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody);
-                    }
-
-                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
-            }
-        } catch (phpmailerException $exc) {
-            $this->setError($exc->getMessage());
-            $this->edebug($exc->getMessage());
-            if ($this->exceptions) {
-                throw $exc;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Send mail using the $Sendmail program.
-     * @param string $header The message headers
-     * @param string $body The message body
-     * @see PHPMailer::$Sendmail
-     * @throws phpmailerException
-     * @access protected
-     * @return boolean
-     */
-    protected function sendmailSend($header, $body)
-    {
-        // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
-        if (!empty($this->Sender) and self::isShellSafe($this->Sender)) {
-            if ($this->Mailer == 'qmail') {
-                $sendmailFmt = '%s -f%s';
-            } else {
-                $sendmailFmt = '%s -oi -f%s -t';
-            }
-        } else {
-            if ($this->Mailer == 'qmail') {
-                $sendmailFmt = '%s';
-            } else {
-                $sendmailFmt = '%s -oi -t';
-            }
-        }
-
-        // TODO: If possible, this should be changed to escapeshellarg.  Needs thorough testing.
-        $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);
-
-        if ($this->SingleTo) {
-            foreach ($this->SingleToArray as $toAddr) {
-                if (!@$mail = popen($sendmail, 'w')) {
-                    throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
-                }
-                fputs($mail, 'To: ' . $toAddr . "\n");
-                fputs($mail, $header);
-                fputs($mail, $body);
-                $result = pclose($mail);
-                $this->doCallback(
-                    ($result == 0),
-                    array($toAddr),
-                    $this->cc,
-                    $this->bcc,
-                    $this->Subject,
-                    $body,
-                    $this->From
-                );
-                if ($result != 0) {
-                    throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
-                }
-            }
-        } else {
-            if (!@$mail = popen($sendmail, 'w')) {
-                throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
-            }
-            fputs($mail, $header);
-            fputs($mail, $body);
-            $result = pclose($mail);
-            $this->doCallback(
-                ($result == 0),
-                $this->to,
-                $this->cc,
-                $this->bcc,
-                $this->Subject,
-                $body,
-                $this->From
-            );
-            if ($result != 0) {
-                throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters.
-     *
-     * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows.
-     * @param string $string The string to be validated
-     * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report
-     * @access protected
-     * @return boolean
-     */
-    protected static function isShellSafe($string)
-    {
-        // Future-proof
-        if (escapeshellcmd($string) !== $string
-            or !in_array(escapeshellarg($string), array("'$string'", "\"$string\""))
-        ) {
-            return false;
-        }
-
-        $length = strlen($string);
-
-        for ($i = 0; $i < $length; $i++) {
-            $c = $string[$i];
-
-            // All other characters have a special meaning in at least one common shell, including = and +.
-            // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here.
-            // Note that this does permit non-Latin alphanumeric characters based on the current locale.
-            if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Send mail using the PHP mail() function.
-     * @param string $header The message headers
-     * @param string $body The message body
-     * @link http://www.php.net/manual/en/book.mail.php
-     * @throws phpmailerException
-     * @access protected
-     * @return boolean
-     */
-    protected function mailSend($header, $body)
-    {
-        $toArr = array();
-        foreach ($this->to as $toaddr) {
-            $toArr[] = $this->addrFormat($toaddr);
-        }
-        $to = implode(', ', $toArr);
-
-        $params = null;
-        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
-        if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
-            // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
-            if (self::isShellSafe($this->Sender)) {
-                $params = sprintf('-f%s', $this->Sender);
-            }
-        }
-        if (!empty($this->Sender) and !ini_get('safe_mode') and $this->validateAddress($this->Sender)) {
-            $old_from = ini_get('sendmail_from');
-            ini_set('sendmail_from', $this->Sender);
-        }
-        $result = false;
-        if ($this->SingleTo and count($toArr) > 1) {
-            foreach ($toArr as $toAddr) {
-                $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
-                $this->doCallback($result, array($toAddr), $this->cc, $this->bcc, $this->Subject, $body, $this->From);
-            }
-        } else {
-            $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
-            $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From);
-        }
-        if (isset($old_from)) {
-            ini_set('sendmail_from', $old_from);
-        }
-        if (!$result) {
-            throw new phpmailerException($this->lang('instantiate'), self::STOP_CRITICAL);
-        }
-        return true;
-    }
-
-    /**
-     * Get an instance to use for SMTP operations.
-     * Override this function to load your own SMTP implementation
-     * @return SMTP
-     */
-    public function getSMTPInstance()
-    {
-        if (!is_object($this->smtp)) {
-            $this->smtp = new SMTP;
-        }
-        return $this->smtp;
-    }
-
-    /**
-     * Send mail via SMTP.
-     * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
-     * Uses the PHPMailerSMTP class by default.
-     * @see PHPMailer::getSMTPInstance() to use a different class.
-     * @param string $header The message headers
-     * @param string $body The message body
-     * @throws phpmailerException
-     * @uses SMTP
-     * @access protected
-     * @return boolean
-     */
-    protected function smtpSend($header, $body)
-    {
-        $bad_rcpt = array();
-        if (!$this->smtpConnect($this->SMTPOptions)) {
-            throw new phpmailerException($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
-        }
-        if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
-            $smtp_from = $this->Sender;
-        } else {
-            $smtp_from = $this->From;
-        }
-        if (!$this->smtp->mail($smtp_from)) {
-            $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
-            throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL);
-        }
-
-        // Attempt to send to all recipients
-        foreach (array($this->to, $this->cc, $this->bcc) as $togroup) {
-            foreach ($togroup as $to) {
-                if (!$this->smtp->recipient($to[0])) {
-                    $error = $this->smtp->getError();
-                    $bad_rcpt[] = array('to' => $to[0], 'error' => $error['detail']);
-                    $isSent = false;
-                } else {
-                    $isSent = true;
-                }
-                $this->doCallback($isSent, array($to[0]), array(), array(), $this->Subject, $body, $this->From);
-            }
-        }
-
-        // Only send the DATA command if we have viable recipients
-        if ((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body)) {
-            throw new phpmailerException($this->lang('data_not_accepted'), self::STOP_CRITICAL);
-        }
-        if ($this->SMTPKeepAlive) {
-            $this->smtp->reset();
-        } else {
-            $this->smtp->quit();
-            $this->smtp->close();
-        }
-        //Create error message for any bad addresses
-        if (count($bad_rcpt) > 0) {
-            $errstr = '';
-            foreach ($bad_rcpt as $bad) {
-                $errstr .= $bad['to'] . ': ' . $bad['error'];
-            }
-            throw new phpmailerException(
-                $this->lang('recipients_failed') . $errstr,
-                self::STOP_CONTINUE
-            );
-        }
-        return true;
-    }
-
-    /**
-     * Initiate a connection to an SMTP server.
-     * Returns false if the operation failed.
-     * @param array $options An array of options compatible with stream_context_create()
-     * @uses SMTP
-     * @access public
-     * @throws phpmailerException
-     * @return boolean
-     */
-    public function smtpConnect($options = null)
-    {
-        if (is_null($this->smtp)) {
-            $this->smtp = $this->getSMTPInstance();
-        }
-
-        //If no options are provided, use whatever is set in the instance
-        if (is_null($options)) {
-            $options = $this->SMTPOptions;
-        }
-
-        // Already connected?
-        if ($this->smtp->connected()) {
-            return true;
-        }
-
-        $this->smtp->setTimeout($this->Timeout);
-        $this->smtp->setDebugLevel($this->SMTPDebug);
-        $this->smtp->setDebugOutput($this->Debugoutput);
-        $this->smtp->setVerp($this->do_verp);
-        $hosts = explode(';', $this->Host);
-        $lastexception = null;
-
-        foreach ($hosts as $hostentry) {
-            $hostinfo = array();
-            if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
-                // Not a valid host entry
-                continue;
-            }
-            // $hostinfo[2]: optional ssl or tls prefix
-            // $hostinfo[3]: the hostname
-            // $hostinfo[4]: optional port number
-            // The host string prefix can temporarily override the current setting for SMTPSecure
-            // If it's not specified, the default value is used
-            $prefix = '';
-            $secure = $this->SMTPSecure;
-            $tls = ($this->SMTPSecure == 'tls');
-            if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
-                $prefix = 'ssl://';
-                $tls = false; // Can't have SSL and TLS at the same time
-                $secure = 'ssl';
-            } elseif ($hostinfo[2] == 'tls') {
-                $tls = true;
-                // tls doesn't use a prefix
-                $secure = 'tls';
-            }
-            //Do we need the OpenSSL extension?
-            $sslext = defined('OPENSSL_ALGO_SHA1');
-            if ('tls' === $secure or 'ssl' === $secure) {
-                //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
-                if (!$sslext) {
-                    throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL);
-                }
-            }
-            $host = $hostinfo[3];
-            $port = $this->Port;
-            $tport = (integer)$hostinfo[4];
-            if ($tport > 0 and $tport < 65536) {
-                $port = $tport;
-            }
-            if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
-                try {
-                    if ($this->Helo) {
-                        $hello = $this->Helo;
-                    } else {
-                        $hello = $this->serverHostname();
-                    }
-                    $this->smtp->hello($hello);
-                    //Automatically enable TLS encryption if:
-                    // * it's not disabled
-                    // * we have openssl extension
-                    // * we are not already using SSL
-                    // * the server offers STARTTLS
-                    if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
-                        $tls = true;
-                    }
-                    if ($tls) {
-                        if (!$this->smtp->startTLS()) {
-                            throw new phpmailerException($this->lang('connect_host'));
-                        }
-                        // We must resend EHLO after TLS negotiation
-                        $this->smtp->hello($hello);
-                    }
-                    if ($this->SMTPAuth) {
-                        if (!$this->smtp->authenticate(
-                            $this->Username,
-                            $this->Password,
-                            $this->AuthType,
-                            $this->Realm,
-                            $this->Workstation
-                        )
-                        ) {
-                            throw new phpmailerException($this->lang('authenticate'));
-                        }
-                    }
-                    return true;
-                } catch (phpmailerException $exc) {
-                    $lastexception = $exc;
-                    $this->edebug($exc->getMessage());
-                    // We must have connected, but then failed TLS or Auth, so close connection nicely
-                    $this->smtp->quit();
-                }
-            }
-        }
-        // If we get here, all connection attempts have failed, so close connection hard
-        $this->smtp->close();
-        // As we've caught all exceptions, just report whatever the last one was
-        if ($this->exceptions and !is_null($lastexception)) {
-            throw $lastexception;
-        }
-        return false;
-    }
-
-    /**
-     * Close the active SMTP session if one exists.
-     * @return void
-     */
-    public function smtpClose()
-    {
-        if (is_a($this->smtp, 'SMTP')) {
-            if ($this->smtp->connected()) {
-                $this->smtp->quit();
-                $this->smtp->close();
-            }
-        }
-    }
-
-    /**
-     * Set the language for error messages.
-     * Returns false if it cannot load the language file.
-     * The default language is English.
-     * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr")
-     * @param string $lang_path Path to the language file directory, with trailing separator (slash)
-     * @return boolean
-     * @access public
-     */
-    public function setLanguage($langcode = 'en', $lang_path = '')
-    {
-        // Backwards compatibility for renamed language codes
-        $renamed_langcodes = array(
-            'br' => 'pt_br',
-            'cz' => 'cs',
-            'dk' => 'da',
-            'no' => 'nb',
-            'se' => 'sv',
-        );
-
-        if (isset($renamed_langcodes[$langcode])) {
-            $langcode = $renamed_langcodes[$langcode];
-        }
-
-        // Define full set of translatable strings in English
-        $PHPMAILER_LANG = array(
-            'authenticate' => 'SMTP Error: Could not authenticate.',
-            'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
-            'data_not_accepted' => 'SMTP Error: data not accepted.',
-            'empty_message' => 'Message body empty',
-            'encoding' => 'Unknown encoding: ',
-            'execute' => 'Could not execute: ',
-            'file_access' => 'Could not access file: ',
-            'file_open' => 'File Error: Could not open file: ',
-            'from_failed' => 'The following From address failed: ',
-            'instantiate' => 'Could not instantiate mail function.',
-            'invalid_address' => 'Invalid address: ',
-            'mailer_not_supported' => ' mailer is not supported.',
-            'provide_address' => 'You must provide at least one recipient email address.',
-            'recipients_failed' => 'SMTP Error: The following recipients failed: ',
-            'signing' => 'Signing Error: ',
-            'smtp_connect_failed' => 'SMTP connect() failed.',
-            'smtp_error' => 'SMTP server error: ',
-            'variable_set' => 'Cannot set or reset variable: ',
-            'extension_missing' => 'Extension missing: '
-        );
-        if (empty($lang_path)) {
-            // Calculate an absolute path so it can work if CWD is not here
-            $lang_path = dirname(__FILE__). DIRECTORY_SEPARATOR . 'language'. DIRECTORY_SEPARATOR;
-        }
-        //Validate $langcode
-        if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) {
-            $langcode = 'en';
-        }
-        $foundlang = true;
-        $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php';
-        // There is no English translation file
-        if ($langcode != 'en') {
-            // Make sure language file path is readable
-            if (!is_readable($lang_file)) {
-                $foundlang = false;
-            } else {
-                // Overwrite language-specific strings.
-                // This way we'll never have missing translation keys.
-                $foundlang = include $lang_file;
-            }
-        }
-        $this->language = $PHPMAILER_LANG;
-        return (boolean)$foundlang; // Returns false if language not found
-    }
-
-    /**
-     * Get the array of strings for the current language.
-     * @return array
-     */
-    public function getTranslations()
-    {
-        return $this->language;
-    }
-
-    /**
-     * Create recipient headers.
-     * @access public
-     * @param string $type
-     * @param array $addr An array of recipient,
-     * where each recipient is a 2-element indexed array with element 0 containing an address
-     * and element 1 containing a name, like:
-     * array(array('joe@example.com', 'Joe User'), array('zoe@example.com', 'Zoe User'))
-     * @return string
-     */
-    public function addrAppend($type, $addr)
-    {
-        $addresses = array();
-        foreach ($addr as $address) {
-            $addresses[] = $this->addrFormat($address);
-        }
-        return $type . ': ' . implode(', ', $addresses) . $this->LE;
-    }
-
-    /**
-     * Format an address for use in a message header.
-     * @access public
-     * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name
-     *      like array('joe@example.com', 'Joe User')
-     * @return string
-     */
-    public function addrFormat($addr)
-    {
-        if (empty($addr[1])) { // No name provided
-            return $this->secureHeader($addr[0]);
-        } else {
-            return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . ' <' . $this->secureHeader(
-                $addr[0]
-            ) . '>';
-        }
-    }
-
-    /**
-     * Word-wrap message.
-     * For use with mailers that do not automatically perform wrapping
-     * and for quoted-printable encoded messages.
-     * Original written by philippe.
-     * @param string $message The message to wrap
-     * @param integer $length The line length to wrap to
-     * @param boolean $qp_mode Whether to run in Quoted-Printable mode
-     * @access public
-     * @return string
-     */
-    public function wrapText($message, $length, $qp_mode = false)
-    {
-        if ($qp_mode) {
-            $soft_break = sprintf(' =%s', $this->LE);
-        } else {
-            $soft_break = $this->LE;
-        }
-        // If utf-8 encoding is used, we will need to make sure we don't
-        // split multibyte characters when we wrap
-        $is_utf8 = (strtolower($this->CharSet) == 'utf-8');
-        $lelen = strlen($this->LE);
-        $crlflen = strlen(self::CRLF);
-
-        $message = $this->fixEOL($message);
-        //Remove a trailing line break
-        if (substr($message, -$lelen) == $this->LE) {
-            $message = substr($message, 0, -$lelen);
-        }
-
-        //Split message into lines
-        $lines = explode($this->LE, $message);
-        //Message will be rebuilt in here
-        $message = '';
-        foreach ($lines as $line) {
-            $words = explode(' ', $line);
-            $buf = '';
-            $firstword = true;
-            foreach ($words as $word) {
-                if ($qp_mode and (strlen($word) > $length)) {
-                    $space_left = $length - strlen($buf) - $crlflen;
-                    if (!$firstword) {
-                        if ($space_left > 20) {
-                            $len = $space_left;
-                            if ($is_utf8) {
-                                $len = $this->utf8CharBoundary($word, $len);
-                            } elseif (substr($word, $len - 1, 1) == '=') {
-                                $len--;
-                            } elseif (substr($word, $len - 2, 1) == '=') {
-                                $len -= 2;
-                            }
-                            $part = substr($word, 0, $len);
-                            $word = substr($word, $len);
-                            $buf .= ' ' . $part;
-                            $message .= $buf . sprintf('=%s', self::CRLF);
-                        } else {
-                            $message .= $buf . $soft_break;
-                        }
-                        $buf = '';
-                    }
-                    while (strlen($word) > 0) {
-                        if ($length <= 0) {
-                            break;
-                        }
-                        $len = $length;
-                        if ($is_utf8) {
-                            $len = $this->utf8CharBoundary($word, $len);
-                        } elseif (substr($word, $len - 1, 1) == '=') {
-                            $len--;
-                        } elseif (substr($word, $len - 2, 1) == '=') {
-                            $len -= 2;
-                        }
-                        $part = substr($word, 0, $len);
-                        $word = substr($word, $len);
-
-                        if (strlen($word) > 0) {
-                            $message .= $part . sprintf('=%s', self::CRLF);
-                        } else {
-                            $buf = $part;
-                        }
-                    }
-                } else {
-                    $buf_o = $buf;
-                    if (!$firstword) {
-                        $buf .= ' ';
-                    }
-                    $buf .= $word;
-
-                    if (strlen($buf) > $length and $buf_o != '') {
-                        $message .= $buf_o . $soft_break;
-                        $buf = $word;
-                    }
-                }
-                $firstword = false;
-            }
-            $message .= $buf . self::CRLF;
-        }
-
-        return $message;
-    }
-
-    /**
-     * Find the last character boundary prior to $maxLength in a utf-8
-     * quoted-printable encoded string.
-     * Original written by Colin Brown.
-     * @access public
-     * @param string $encodedText utf-8 QP text
-     * @param integer $maxLength Find the last character boundary prior to this length
-     * @return integer
-     */
-    public function utf8CharBoundary($encodedText, $maxLength)
-    {
-        $foundSplitPos = false;
-        $lookBack = 3;
-        while (!$foundSplitPos) {
-            $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
-            $encodedCharPos = strpos($lastChunk, '=');
-            if (false !== $encodedCharPos) {
-                // Found start of encoded character byte within $lookBack block.
-                // Check the encoded byte value (the 2 chars after the '=')
-                $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
-                $dec = hexdec($hex);
-                if ($dec < 128) {
-                    // Single byte character.
-                    // If the encoded char was found at pos 0, it will fit
-                    // otherwise reduce maxLength to start of the encoded char
-                    if ($encodedCharPos > 0) {
-                        $maxLength = $maxLength - ($lookBack - $encodedCharPos);
-                    }
-                    $foundSplitPos = true;
-                } elseif ($dec >= 192) {
-                    // First byte of a multi byte character
-                    // Reduce maxLength to split at start of character
-                    $maxLength = $maxLength - ($lookBack - $encodedCharPos);
-                    $foundSplitPos = true;
-                } elseif ($dec < 192) {
-                    // Middle byte of a multi byte character, look further back
-                    $lookBack += 3;
-                }
-            } else {
-                // No encoded character found
-                $foundSplitPos = true;
-            }
-        }
-        return $maxLength;
-    }
-
-    /**
-     * Apply word wrapping to the message body.
-     * Wraps the message body to the number of chars set in the WordWrap property.
-     * You should only do this to plain-text bodies as wrapping HTML tags may break them.
-     * This is called automatically by createBody(), so you don't need to call it yourself.
-     * @access public
-     * @return void
-     */
-    public function setWordWrap()
-    {
-        if ($this->WordWrap < 1) {
-            return;
-        }
-
-        switch ($this->message_type) {
-            case 'alt':
-            case 'alt_inline':
-            case 'alt_attach':
-            case 'alt_inline_attach':
-                $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);
-                break;
-            default:
-                $this->Body = $this->wrapText($this->Body, $this->WordWrap);
-                break;
-        }
-    }
-
-    /**
-     * Assemble message headers.
-     * @access public
-     * @return string The assembled headers
-     */
-    public function createHeader()
-    {
-        $result = '';
-
-        if ($this->MessageDate == '') {
-            $this->MessageDate = self::rfcDate();
-        }
-        $result .= $this->headerLine('Date', $this->MessageDate);
-
-        // To be created automatically by mail()
-        if ($this->SingleTo) {
-            if ($this->Mailer != 'mail') {
-                foreach ($this->to as $toaddr) {
-                    $this->SingleToArray[] = $this->addrFormat($toaddr);
-                }
-            }
-        } else {
-            if (count($this->to) > 0) {
-                if ($this->Mailer != 'mail') {
-                    $result .= $this->addrAppend('To', $this->to);
-                }
-            } elseif (count($this->cc) == 0) {
-                $result .= $this->headerLine('To', 'undisclosed-recipients:;');
-            }
-        }
-
-        $result .= $this->addrAppend('From', array(array(trim($this->From), $this->FromName)));
-
-        // sendmail and mail() extract Cc from the header before sending
-        if (count($this->cc) > 0) {
-            $result .= $this->addrAppend('Cc', $this->cc);
-        }
-
-        // sendmail and mail() extract Bcc from the header before sending
-        if ((
-                $this->Mailer == 'sendmail' or $this->Mailer == 'qmail' or $this->Mailer == 'mail'
-            )
-            and count($this->bcc) > 0
-        ) {
-            $result .= $this->addrAppend('Bcc', $this->bcc);
-        }
-
-        if (count($this->ReplyTo) > 0) {
-            $result .= $this->addrAppend('Reply-To', $this->ReplyTo);
-        }
-
-        // mail() sets the subject itself
-        if ($this->Mailer != 'mail') {
-            $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
-        }
-
-        // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4
-        // https://tools.ietf.org/html/rfc5322#section-3.6.4
-        if ('' != $this->MessageID and preg_match('/^<.*@.*>$/', $this->MessageID)) {
-            $this->lastMessageID = $this->MessageID;
-        } else {
-            $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());
-        }
-        $result .= $this->headerLine('Message-ID', $this->lastMessageID);
-        if (!is_null($this->Priority)) {
-            $result .= $this->headerLine('X-Priority', $this->Priority);
-        }
-        if ($this->XMailer == '') {
-            $result .= $this->headerLine(
-                'X-Mailer',
-                'PHPMailer ' . $this->Version . ' (https://github.com/PHPMailer/PHPMailer)'
-            );
-        } else {
-            $myXmailer = trim($this->XMailer);
-            if ($myXmailer) {
-                $result .= $this->headerLine('X-Mailer', $myXmailer);
-            }
-        }
-
-        if ($this->ConfirmReadingTo != '') {
-            $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');
-        }
-
-        // Add custom headers
-        foreach ($this->CustomHeader as $header) {
-            $result .= $this->headerLine(
-                trim($header[0]),
-                $this->encodeHeader(trim($header[1]))
-            );
-        }
-        if (!$this->sign_key_file) {
-            $result .= $this->headerLine('MIME-Version', '1.0');
-            $result .= $this->getMailMIME();
-        }
-
-        return $result;
-    }
-
-    /**
-     * Get the message MIME type headers.
-     * @access public
-     * @return string
-     */
-    public function getMailMIME()
-    {
-        $result = '';
-        $ismultipart = true;
-        switch ($this->message_type) {
-            case 'inline':
-                $result .= $this->headerLine('Content-Type', 'multipart/related;');
-                $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
-                break;
-            case 'attach':
-            case 'inline_attach':
-            case 'alt_attach':
-            case 'alt_inline_attach':
-                $result .= $this->headerLine('Content-Type', 'multipart/mixed;');
-                $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
-                break;
-            case 'alt':
-            case 'alt_inline':
-                $result .= $this->headerLine('Content-Type', 'multipart/alternative;');
-                $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
-                break;
-            default:
-                // Catches case 'plain': and case '':
-                $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);
-                $ismultipart = false;
-                break;
-        }
-        // RFC1341 part 5 says 7bit is assumed if not specified
-        if ($this->Encoding != '7bit') {
-            // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE
-            if ($ismultipart) {
-                if ($this->Encoding == '8bit') {
-                    $result .= $this->headerLine('Content-Transfer-Encoding', '8bit');
-                }
-                // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible
-            } else {
-                $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);
-            }
-        }
-
-        if ($this->Mailer != 'mail') {
-            $result .= $this->LE;
-        }
-
-        return $result;
-    }
-
-    /**
-     * Returns the whole MIME message.
-     * Includes complete headers and body.
-     * Only valid post preSend().
-     * @see PHPMailer::preSend()
-     * @access public
-     * @return string
-     */
-    public function getSentMIMEMessage()
-    {
-        return rtrim($this->MIMEHeader . $this->mailHeader, "\n\r") . self::CRLF . self::CRLF . $this->MIMEBody;
-    }
-
-    /**
-     * Create unique ID
-     * @return string
-     */
-    protected function generateId() {
-        return md5(uniqid(time()));
-    }
-
-    /**
-     * Assemble the message body.
-     * Returns an empty string on failure.
-     * @access public
-     * @throws phpmailerException
-     * @return string The assembled message body
-     */
-    public function createBody()
-    {
-        $body = '';
-        //Create unique IDs and preset boundaries
-        $this->uniqueid = $this->generateId();
-        $this->boundary[1] = 'b1_' . $this->uniqueid;
-        $this->boundary[2] = 'b2_' . $this->uniqueid;
-        $this->boundary[3] = 'b3_' . $this->uniqueid;
-
-        if ($this->sign_key_file) {
-            $body .= $this->getMailMIME() . $this->LE;
-        }
-
-        $this->setWordWrap();
-
-        $bodyEncoding = $this->Encoding;
-        $bodyCharSet = $this->CharSet;
-        //Can we do a 7-bit downgrade?
-        if ($bodyEncoding == '8bit' and !$this->has8bitChars($this->Body)) {
-            $bodyEncoding = '7bit';
-            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
-            $bodyCharSet = 'us-ascii';
-        }
-        //If lines are too long, and we're not already using an encoding that will shorten them,
-        //change to quoted-printable transfer encoding for the body part only
-        if ('base64' != $this->Encoding and self::hasLineLongerThanMax($this->Body)) {
-            $bodyEncoding = 'quoted-printable';
-        }
-
-        $altBodyEncoding = $this->Encoding;
-        $altBodyCharSet = $this->CharSet;
-        //Can we do a 7-bit downgrade?
-        if ($altBodyEncoding == '8bit' and !$this->has8bitChars($this->AltBody)) {
-            $altBodyEncoding = '7bit';
-            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
-            $altBodyCharSet = 'us-ascii';
-        }
-        //If lines are too long, and we're not already using an encoding that will shorten them,
-        //change to quoted-printable transfer encoding for the alt body part only
-        if ('base64' != $altBodyEncoding and self::hasLineLongerThanMax($this->AltBody)) {
-            $altBodyEncoding = 'quoted-printable';
-        }
-        //Use this as a preamble in all multipart message types
-        $mimepre = "This is a multi-part message in MIME format." . $this->LE . $this->LE;
-        switch ($this->message_type) {
-            case 'inline':
-                $body .= $mimepre;
-                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
-                $body .= $this->encodeString($this->Body, $bodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->attachAll('inline', $this->boundary[1]);
-                break;
-            case 'attach':
-                $body .= $mimepre;
-                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
-                $body .= $this->encodeString($this->Body, $bodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->attachAll('attachment', $this->boundary[1]);
-                break;
-            case 'inline_attach':
-                $body .= $mimepre;
-                $body .= $this->textLine('--' . $this->boundary[1]);
-                $body .= $this->headerLine('Content-Type', 'multipart/related;');
-                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
-                $body .= $this->LE;
-                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);
-                $body .= $this->encodeString($this->Body, $bodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->attachAll('inline', $this->boundary[2]);
-                $body .= $this->LE;
-                $body .= $this->attachAll('attachment', $this->boundary[1]);
-                break;
-            case 'alt':
-                $body .= $mimepre;
-                $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
-                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, 'text/html', $bodyEncoding);
-                $body .= $this->encodeString($this->Body, $bodyEncoding);
-                $body .= $this->LE . $this->LE;
-                if (!empty($this->Ical)) {
-                    $body .= $this->getBoundary($this->boundary[1], '', 'text/calendar; method=REQUEST', '');
-                    $body .= $this->encodeString($this->Ical, $this->Encoding);
-                    $body .= $this->LE . $this->LE;
-                }
-                $body .= $this->endBoundary($this->boundary[1]);
-                break;
-            case 'alt_inline':
-                $body .= $mimepre;
-                $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
-                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->textLine('--' . $this->boundary[1]);
-                $body .= $this->headerLine('Content-Type', 'multipart/related;');
-                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
-                $body .= $this->LE;
-                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
-                $body .= $this->encodeString($this->Body, $bodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->attachAll('inline', $this->boundary[2]);
-                $body .= $this->LE;
-                $body .= $this->endBoundary($this->boundary[1]);
-                break;
-            case 'alt_attach':
-                $body .= $mimepre;
-                $body .= $this->textLine('--' . $this->boundary[1]);
-                $body .= $this->headerLine('Content-Type', 'multipart/alternative;');
-                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
-                $body .= $this->LE;
-                $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
-                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
-                $body .= $this->encodeString($this->Body, $bodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->endBoundary($this->boundary[2]);
-                $body .= $this->LE;
-                $body .= $this->attachAll('attachment', $this->boundary[1]);
-                break;
-            case 'alt_inline_attach':
-                $body .= $mimepre;
-                $body .= $this->textLine('--' . $this->boundary[1]);
-                $body .= $this->headerLine('Content-Type', 'multipart/alternative;');
-                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
-                $body .= $this->LE;
-                $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
-                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->textLine('--' . $this->boundary[2]);
-                $body .= $this->headerLine('Content-Type', 'multipart/related;');
-                $body .= $this->textLine("\tboundary=\"" . $this->boundary[3] . '"');
-                $body .= $this->LE;
-                $body .= $this->getBoundary($this->boundary[3], $bodyCharSet, 'text/html', $bodyEncoding);
-                $body .= $this->encodeString($this->Body, $bodyEncoding);
-                $body .= $this->LE . $this->LE;
-                $body .= $this->attachAll('inline', $this->boundary[3]);
-                $body .= $this->LE;
-                $body .= $this->endBoundary($this->boundary[2]);
-                $body .= $this->LE;
-                $body .= $this->attachAll('attachment', $this->boundary[1]);
-                break;
-            default:
-                // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types
-                //Reset the `Encoding` property in case we changed it for line length reasons
-                $this->Encoding = $bodyEncoding;
-                $body .= $this->encodeString($this->Body, $this->Encoding);
-                break;
-        }
-
-        if ($this->isError()) {
-            $body = '';
-        } elseif ($this->sign_key_file) {
-            try {
-                if (!defined('PKCS7_TEXT')) {
-                    throw new phpmailerException($this->lang('extension_missing') . 'openssl');
-                }
-                // @TODO would be nice to use php://temp streams here, but need to wrap for PHP < 5.1
-                $file = tempnam(sys_get_temp_dir(), 'mail');
-                if (false === file_put_contents($file, $body)) {
-                    throw new phpmailerException($this->lang('signing') . ' Could not write temp file');
-                }
-                $signed = tempnam(sys_get_temp_dir(), 'signed');
-                //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197
-                if (empty($this->sign_extracerts_file)) {
-                    $sign = @openssl_pkcs7_sign(
-                        $file,
-                        $signed,
-                        'file://' . realpath($this->sign_cert_file),
-                        array('file://' . realpath($this->sign_key_file), $this->sign_key_pass),
-                        null
-                    );
-                } else {
-                    $sign = @openssl_pkcs7_sign(
-                        $file,
-                        $signed,
-                        'file://' . realpath($this->sign_cert_file),
-                        array('file://' . realpath($this->sign_key_file), $this->sign_key_pass),
-                        null,
-                        PKCS7_DETACHED,
-                        $this->sign_extracerts_file
-                    );
-                }
-                if ($sign) {
-                    @unlink($file);
-                    $body = file_get_contents($signed);
-                    @unlink($signed);
-                    //The message returned by openssl contains both headers and body, so need to split them up
-                    $parts = explode("\n\n", $body, 2);
-                    $this->MIMEHeader .= $parts[0] . $this->LE . $this->LE;
-                    $body = $parts[1];
-                } else {
-                    @unlink($file);
-                    @unlink($signed);
-                    throw new phpmailerException($this->lang('signing') . openssl_error_string());
-                }
-            } catch (phpmailerException $exc) {
-                $body = '';
-                if ($this->exceptions) {
-                    throw $exc;
-                }
-            }
-        }
-        return $body;
-    }
-
-    /**
-     * Return the start of a message boundary.
-     * @access protected
-     * @param string $boundary
-     * @param string $charSet
-     * @param string $contentType
-     * @param string $encoding
-     * @return string
-     */
-    protected function getBoundary($boundary, $charSet, $contentType, $encoding)
-    {
-        $result = '';
-        if ($charSet == '') {
-            $charSet = $this->CharSet;
-        }
-        if ($contentType == '') {
-            $contentType = $this->ContentType;
-        }
-        if ($encoding == '') {
-            $encoding = $this->Encoding;
-        }
-        $result .= $this->textLine('--' . $boundary);
-        $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);
-        $result .= $this->LE;
-        // RFC1341 part 5 says 7bit is assumed if not specified
-        if ($encoding != '7bit') {
-            $result .= $this->headerLine('Content-Transfer-Encoding', $encoding);
-        }
-        $result .= $this->LE;
-
-        return $result;
-    }
-
-    /**
-     * Return the end of a message boundary.
-     * @access protected
-     * @param string $boundary
-     * @return string
-     */
-    protected function endBoundary($boundary)
-    {
-        return $this->LE . '--' . $boundary . '--' . $this->LE;
-    }
-
-    /**
-     * Set the message type.
-     * PHPMailer only supports some preset message types, not arbitrary MIME structures.
-     * @access protected
-     * @return void
-     */
-    protected function setMessageType()
-    {
-        $type = array();
-        if ($this->alternativeExists()) {
-            $type[] = 'alt';
-        }
-        if ($this->inlineImageExists()) {
-            $type[] = 'inline';
-        }
-        if ($this->attachmentExists()) {
-            $type[] = 'attach';
-        }
-        $this->message_type = implode('_', $type);
-        if ($this->message_type == '') {
-            //The 'plain' message_type refers to the message having a single body element, not that it is plain-text
-            $this->message_type = 'plain';
-        }
-    }
-
-    /**
-     * Format a header line.
-     * @access public
-     * @param string $name
-     * @param string $value
-     * @return string
-     */
-    public function headerLine($name, $value)
-    {
-        return $name . ': ' . $value . $this->LE;
-    }
-
-    /**
-     * Return a formatted mail line.
-     * @access public
-     * @param string $value
-     * @return string
-     */
-    public function textLine($value)
-    {
-        return $value . $this->LE;
-    }
-
-    /**
-     * Add an attachment from a path on the filesystem.
-     * Returns false if the file could not be found or read.
-     * @param string $path Path to the attachment.
-     * @param string $name Overrides the attachment name.
-     * @param string $encoding File encoding (see $Encoding).
-     * @param string $type File extension (MIME) type.
-     * @param string $disposition Disposition to use
-     * @throws phpmailerException
-     * @return boolean
-     */
-    public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment')
-    {
-        try {
-            if (!@is_file($path)) {
-                throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
-            }
-
-            // If a MIME type is not specified, try to work it out from the file name
-            if ($type == '') {
-                $type = self::filenameToType($path);
-            }
-
-            $filename = basename($path);
-            if ($name == '') {
-                $name = $filename;
-            }
-
-            $this->attachment[] = array(
-                0 => $path,
-                1 => $filename,
-                2 => $name,
-                3 => $encoding,
-                4 => $type,
-                5 => false, // isStringAttachment
-                6 => $disposition,
-                7 => 0
-            );
-
-        } catch (phpmailerException $exc) {
-            $this->setError($exc->getMessage());
-            $this->edebug($exc->getMessage());
-            if ($this->exceptions) {
-                throw $exc;
-            }
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Return the array of attachments.
-     * @return array
-     */
-    public function getAttachments()
-    {
-        return $this->attachment;
-    }
-
-    /**
-     * Attach all file, string, and binary attachments to the message.
-     * Returns an empty string on failure.
-     * @access protected
-     * @param string $disposition_type
-     * @param string $boundary
-     * @return string
-     */
-    protected function attachAll($disposition_type, $boundary)
-    {
-        // Return text of body
-        $mime = array();
-        $cidUniq = array();
-        $incl = array();
-
-        // Add all attachments
-        foreach ($this->attachment as $attachment) {
-            // Check if it is a valid disposition_filter
-            if ($attachment[6] == $disposition_type) {
-                // Check for string attachment
-                $string = '';
-                $path = '';
-                $bString = $attachment[5];
-                if ($bString) {
-                    $string = $attachment[0];
-                } else {
-                    $path = $attachment[0];
-                }
-
-                $inclhash = md5(serialize($attachment));
-                if (in_array($inclhash, $incl)) {
-                    continue;
-                }
-                $incl[] = $inclhash;
-                $name = $attachment[2];
-                $encoding = $attachment[3];
-                $type = $attachment[4];
-                $disposition = $attachment[6];
-                $cid = $attachment[7];
-                if ($disposition == 'inline' && array_key_exists($cid, $cidUniq)) {
-                    continue;
-                }
-                $cidUniq[$cid] = true;
-
-                $mime[] = sprintf('--%s%s', $boundary, $this->LE);
-                //Only include a filename property if we have one
-                if (!empty($name)) {
-                    $mime[] = sprintf(
-                        'Content-Type: %s; name="%s"%s',
-                        $type,
-                        $this->encodeHeader($this->secureHeader($name)),
-                        $this->LE
-                    );
-                } else {
-                    $mime[] = sprintf(
-                        'Content-Type: %s%s',
-                        $type,
-                        $this->LE
-                    );
-                }
-                // RFC1341 part 5 says 7bit is assumed if not specified
-                if ($encoding != '7bit') {
-                    $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, $this->LE);
-                }
-
-                if ($disposition == 'inline') {
-                    $mime[] = sprintf('Content-ID: <%s>%s', $cid, $this->LE);
-                }
-
-                // If a filename contains any of these chars, it should be quoted,
-                // but not otherwise: RFC2183 & RFC2045 5.1
-                // Fixes a warning in IETF's msglint MIME checker
-                // Allow for bypassing the Content-Disposition header totally
-                if (!(empty($disposition))) {
-                    $encoded_name = $this->encodeHeader($this->secureHeader($name));
-                    if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $encoded_name)) {
-                        $mime[] = sprintf(
-                            'Content-Disposition: %s; filename="%s"%s',
-                            $disposition,
-                            $encoded_name,
-                            $this->LE . $this->LE
-                        );
-                    } else {
-                        if (!empty($encoded_name)) {
-                            $mime[] = sprintf(
-                                'Content-Disposition: %s; filename=%s%s',
-                                $disposition,
-                                $encoded_name,
-                                $this->LE . $this->LE
-                            );
-                        } else {
-                            $mime[] = sprintf(
-                                'Content-Disposition: %s%s',
-                                $disposition,
-                                $this->LE . $this->LE
-                            );
-                        }
-                    }
-                } else {
-                    $mime[] = $this->LE;
-                }
-
-                // Encode as string attachment
-                if ($bString) {
-                    $mime[] = $this->encodeString($string, $encoding);
-                    if ($this->isError()) {
-                        return '';
-                    }
-                    $mime[] = $this->LE . $this->LE;
-                } else {
-                    $mime[] = $this->encodeFile($path, $encoding);
-                    if ($this->isError()) {
-                        return '';
-                    }
-                    $mime[] = $this->LE . $this->LE;
-                }
-            }
-        }
-
-        $mime[] = sprintf('--%s--%s', $boundary, $this->LE);
-
-        return implode('', $mime);
-    }
-
-    /**
-     * Encode a file attachment in requested format.
-     * Returns an empty string on failure.
-     * @param string $path The full path to the file
-     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
-     * @throws phpmailerException
-     * @access protected
-     * @return string
-     */
-    protected function encodeFile($path, $encoding = 'base64')
-    {
-        try {
-            if (!is_readable($path)) {
-                throw new phpmailerException($this->lang('file_open') . $path, self::STOP_CONTINUE);
-            }
-            $magic_quotes = get_magic_quotes_runtime();
-            if ($magic_quotes) {
-                if (version_compare(PHP_VERSION, '5.3.0', '<')) {
-                    set_magic_quotes_runtime(false);
-                } else {
-                    //Doesn't exist in PHP 5.4, but we don't need to check because
-                    //get_magic_quotes_runtime always returns false in 5.4+
-                    //so it will never get here
-                    ini_set('magic_quotes_runtime', false);
-                }
-            }
-            $file_buffer = file_get_contents($path);
-            $file_buffer = $this->encodeString($file_buffer, $encoding);
-            if ($magic_quotes) {
-                if (version_compare(PHP_VERSION, '5.3.0', '<')) {
-                    set_magic_quotes_runtime($magic_quotes);
-                } else {
-                    ini_set('magic_quotes_runtime', $magic_quotes);
-                }
-            }
-            return $file_buffer;
-        } catch (Exception $exc) {
-            $this->setError($exc->getMessage());
-            return '';
-        }
-    }
-
-    /**
-     * Encode a string in requested format.
-     * Returns an empty string on failure.
-     * @param string $str The text to encode
-     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
-     * @access public
-     * @return string
-     */
-    public function encodeString($str, $encoding = 'base64')
-    {
-        $encoded = '';
-        switch (strtolower($encoding)) {
-            case 'base64':
-                $encoded = chunk_split(base64_encode($str), 76, $this->LE);
-                break;
-            case '7bit':
-            case '8bit':
-                $encoded = $this->fixEOL($str);
-                // Make sure it ends with a line break
-                if (substr($encoded, -(strlen($this->LE))) != $this->LE) {
-                    $encoded .= $this->LE;
-                }
-                break;
-            case 'binary':
-                $encoded = $str;
-                break;
-            case 'quoted-printable':
-                $encoded = $this->encodeQP($str);
-                break;
-            default:
-                $this->setError($this->lang('encoding') . $encoding);
-                break;
-        }
-        return $encoded;
-    }
-
-    /**
-     * Encode a header string optimally.
-     * Picks shortest of Q, B, quoted-printable or none.
-     * @access public
-     * @param string $str
-     * @param string $position
-     * @return string
-     */
-    public function encodeHeader($str, $position = 'text')
-    {
-        $matchcount = 0;
-        switch (strtolower($position)) {
-            case 'phrase':
-                if (!preg_match('/[\200-\377]/', $str)) {
-                    // Can't use addslashes as we don't know the value of magic_quotes_sybase
-                    $encoded = addcslashes($str, "\0..\37\177\\\"");
-                    if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
-                        return ($encoded);
-                    } else {
-                        return ("\"$encoded\"");
-                    }
-                }
-                $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
-                break;
-            /** @noinspection PhpMissingBreakStatementInspection */
-            case 'comment':
-                $matchcount = preg_match_all('/[()"]/', $str, $matches);
-                // Intentional fall-through
-            case 'text':
-            default:
-                $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
-                break;
-        }
-
-        //There are no chars that need encoding
-        if ($matchcount == 0) {
-            return ($str);
-        }
-
-        $maxlen = 75 - 7 - strlen($this->CharSet);
-        // Try to select the encoding which should produce the shortest output
-        if ($matchcount > strlen($str) / 3) {
-            // More than a third of the content will need encoding, so B encoding will be most efficient
-            $encoding = 'B';
-            if (function_exists('mb_strlen') && $this->hasMultiBytes($str)) {
-                // Use a custom function which correctly encodes and wraps long
-                // multibyte strings without breaking lines within a character
-                $encoded = $this->base64EncodeWrapMB($str, "\n");
-            } else {
-                $encoded = base64_encode($str);
-                $maxlen -= $maxlen % 4;
-                $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
-            }
-        } else {
-            $encoding = 'Q';
-            $encoded = $this->encodeQ($str, $position);
-            $encoded = $this->wrapText($encoded, $maxlen, true);
-            $encoded = str_replace('=' . self::CRLF, "\n", trim($encoded));
-        }
-
-        $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded);
-        $encoded = trim(str_replace("\n", $this->LE, $encoded));
-
-        return $encoded;
-    }
-
-    /**
-     * Check if a string contains multi-byte characters.
-     * @access public
-     * @param string $str multi-byte text to wrap encode
-     * @return boolean
-     */
-    public function hasMultiBytes($str)
-    {
-        if (function_exists('mb_strlen')) {
-            return (strlen($str) > mb_strlen($str, $this->CharSet));
-        } else { // Assume no multibytes (we can't handle without mbstring functions anyway)
-            return false;
-        }
-    }
-
-    /**
-     * Does a string contain any 8-bit chars (in any charset)?
-     * @param string $text
-     * @return boolean
-     */
-    public function has8bitChars($text)
-    {
-        return (boolean)preg_match('/[\x80-\xFF]/', $text);
-    }
-
-    /**
-     * Encode and wrap long multibyte strings for mail headers
-     * without breaking lines within a character.
-     * Adapted from a function by paravoid
-     * @link http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
-     * @access public
-     * @param string $str multi-byte text to wrap encode
-     * @param string $linebreak string to use as linefeed/end-of-line
-     * @return string
-     */
-    public function base64EncodeWrapMB($str, $linebreak = null)
-    {
-        $start = '=?' . $this->CharSet . '?B?';
-        $end = '?=';
-        $encoded = '';
-        if ($linebreak === null) {
-            $linebreak = $this->LE;
-        }
-
-        $mb_length = mb_strlen($str, $this->CharSet);
-        // Each line must have length <= 75, including $start and $end
-        $length = 75 - strlen($start) - strlen($end);
-        // Average multi-byte ratio
-        $ratio = $mb_length / strlen($str);
-        // Base64 has a 4:3 ratio
-        $avgLength = floor($length * $ratio * .75);
-
-        for ($i = 0; $i < $mb_length; $i += $offset) {
-            $lookBack = 0;
-            do {
-                $offset = $avgLength - $lookBack;
-                $chunk = mb_substr($str, $i, $offset, $this->CharSet);
-                $chunk = base64_encode($chunk);
-                $lookBack++;
-            } while (strlen($chunk) > $length);
-            $encoded .= $chunk . $linebreak;
-        }
-
-        // Chomp the last linefeed
-        $encoded = substr($encoded, 0, -strlen($linebreak));
-        return $encoded;
-    }
-
-    /**
-     * Encode a string in quoted-printable format.
-     * According to RFC2045 section 6.7.
-     * @access public
-     * @param string $string The text to encode
-     * @param integer $line_max Number of chars allowed on a line before wrapping
-     * @return string
-     * @link http://www.php.net/manual/en/function.quoted-printable-decode.php#89417 Adapted from this comment
-     */
-    public function encodeQP($string, $line_max = 76)
-    {
-        // Use native function if it's available (>= PHP5.3)
-        if (function_exists('quoted_printable_encode')) {
-            return quoted_printable_encode($string);
-        }
-        // Fall back to a pure PHP implementation
-        $string = str_replace(
-            array('%20', '%0D%0A.', '%0D%0A', '%'),
-            array(' ', "\r\n=2E", "\r\n", '='),
-            rawurlencode($string)
-        );
-        return preg_replace('/[^\r\n]{' . ($line_max - 3) . '}[^=\r\n]{2}/', "$0=\r\n", $string);
-    }
-
-    /**
-     * Backward compatibility wrapper for an old QP encoding function that was removed.
-     * @see PHPMailer::encodeQP()
-     * @access public
-     * @param string $string
-     * @param integer $line_max
-     * @param boolean $space_conv
-     * @return string
-     * @deprecated Use encodeQP instead.
-     */
-    public function encodeQPphp(
-        $string,
-        $line_max = 76,
-        /** @noinspection PhpUnusedParameterInspection */ $space_conv = false
-    ) {
-        return $this->encodeQP($string, $line_max);
-    }
-
-    /**
-     * Encode a string using Q encoding.
-     * @link http://tools.ietf.org/html/rfc2047
-     * @param string $str the text to encode
-     * @param string $position Where the text is going to be used, see the RFC for what that means
-     * @access public
-     * @return string
-     */
-    public function encodeQ($str, $position = 'text')
-    {
-        // There should not be any EOL in the string
-        $pattern = '';
-        $encoded = str_replace(array("\r", "\n"), '', $str);
-        switch (strtolower($position)) {
-            case 'phrase':
-                // RFC 2047 section 5.3
-                $pattern = '^A-Za-z0-9!*+\/ -';
-                break;
-            /** @noinspection PhpMissingBreakStatementInspection */
-            case 'comment':
-                // RFC 2047 section 5.2
-                $pattern = '\(\)"';
-                // intentional fall-through
-                // for this reason we build the $pattern without including delimiters and []
-            case 'text':
-            default:
-                // RFC 2047 section 5.1
-                // Replace every high ascii, control, =, ? and _ characters
-                $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
-                break;
-        }
-        $matches = array();
-        if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
-            // If the string contains an '=', make sure it's the first thing we replace
-            // so as to avoid double-encoding
-            $eqkey = array_search('=', $matches[0]);
-            if (false !== $eqkey) {
-                unset($matches[0][$eqkey]);
-                array_unshift($matches[0], '=');
-            }
-            foreach (array_unique($matches[0]) as $char) {
-                $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
-            }
-        }
-        // Replace every spaces to _ (more readable than =20)
-        return str_replace(' ', '_', $encoded);
-    }
-
-    /**
-     * Add a string or binary attachment (non-filesystem).
-     * This method can be used to attach ascii or binary data,
-     * such as a BLOB record from a database.
-     * @param string $string String attachment data.
-     * @param string $filename Name of the attachment.
-     * @param string $encoding File encoding (see $Encoding).
-     * @param string $type File extension (MIME) type.
-     * @param string $disposition Disposition to use
-     * @return void
-     */
-    public function addStringAttachment(
-        $string,
-        $filename,
-        $encoding = 'base64',
-        $type = '',
-        $disposition = 'attachment'
-    ) {
-        // If a MIME type is not specified, try to work it out from the file name
-        if ($type == '') {
-            $type = self::filenameToType($filename);
-        }
-        // Append to $attachment array
-        $this->attachment[] = array(
-            0 => $string,
-            1 => $filename,
-            2 => basename($filename),
-            3 => $encoding,
-            4 => $type,
-            5 => true, // isStringAttachment
-            6 => $disposition,
-            7 => 0
-        );
-    }
-
-    /**
-     * Add an embedded (inline) attachment from a file.
-     * This can include images, sounds, and just about any other document type.
-     * These differ from 'regular' attachments in that they are intended to be
-     * displayed inline with the message, not just attached for download.
-     * This is used in HTML messages that embed the images
-     * the HTML refers to using the $cid value.
-     * @param string $path Path to the attachment.
-     * @param string $cid Content ID of the attachment; Use this to reference
-     *        the content when using an embedded image in HTML.
-     * @param string $name Overrides the attachment name.
-     * @param string $encoding File encoding (see $Encoding).
-     * @param string $type File MIME type.
-     * @param string $disposition Disposition to use
-     * @return boolean True on successfully adding an attachment
-     */
-    public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline')
-    {
-        if (!@is_file($path)) {
-            $this->setError($this->lang('file_access') . $path);
-            return false;
-        }
-
-        // If a MIME type is not specified, try to work it out from the file name
-        if ($type == '') {
-            $type = self::filenameToType($path);
-        }
-
-        $filename = basename($path);
-        if ($name == '') {
-            $name = $filename;
-        }
-
-        // Append to $attachment array
-        $this->attachment[] = array(
-            0 => $path,
-            1 => $filename,
-            2 => $name,
-            3 => $encoding,
-            4 => $type,
-            5 => false, // isStringAttachment
-            6 => $disposition,
-            7 => $cid
-        );
-        return true;
-    }
-
-    /**
-     * Add an embedded stringified attachment.
-     * This can include images, sounds, and just about any other document type.
-     * Be sure to set the $type to an image type for images:
-     * JPEG images use 'image/jpeg', GIF uses 'image/gif', PNG uses 'image/png'.
-     * @param string $string The attachment binary data.
-     * @param string $cid Content ID of the attachment; Use this to reference
-     *        the content when using an embedded image in HTML.
-     * @param string $name
-     * @param string $encoding File encoding (see $Encoding).
-     * @param string $type MIME type.
-     * @param string $disposition Disposition to use
-     * @return boolean True on successfully adding an attachment
-     */
-    public function addStringEmbeddedImage(
-        $string,
-        $cid,
-        $name = '',
-        $encoding = 'base64',
-        $type = '',
-        $disposition = 'inline'
-    ) {
-        // If a MIME type is not specified, try to work it out from the name
-        if ($type == '' and !empty($name)) {
-            $type = self::filenameToType($name);
-        }
-
-        // Append to $attachment array
-        $this->attachment[] = array(
-            0 => $string,
-            1 => $name,
-            2 => $name,
-            3 => $encoding,
-            4 => $type,
-            5 => true, // isStringAttachment
-            6 => $disposition,
-            7 => $cid
-        );
-        return true;
-    }
-
-    /**
-     * Check if an inline attachment is present.
-     * @access public
-     * @return boolean
-     */
-    public function inlineImageExists()
-    {
-        foreach ($this->attachment as $attachment) {
-            if ($attachment[6] == 'inline') {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Check if an attachment (non-inline) is present.
-     * @return boolean
-     */
-    public function attachmentExists()
-    {
-        foreach ($this->attachment as $attachment) {
-            if ($attachment[6] == 'attachment') {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Check if this message has an alternative body set.
-     * @return boolean
-     */
-    public function alternativeExists()
-    {
-        return !empty($this->AltBody);
-    }
-
-    /**
-     * Clear queued addresses of given kind.
-     * @access protected
-     * @param string $kind 'to', 'cc', or 'bcc'
-     * @return void
-     */
-    public function clearQueuedAddresses($kind)
-    {
-        $RecipientsQueue = $this->RecipientsQueue;
-        foreach ($RecipientsQueue as $address => $params) {
-            if ($params[0] == $kind) {
-                unset($this->RecipientsQueue[$address]);
-            }
-        }
-    }
-
-    /**
-     * Clear all To recipients.
-     * @return void
-     */
-    public function clearAddresses()
-    {
-        foreach ($this->to as $to) {
-            unset($this->all_recipients[strtolower($to[0])]);
-        }
-        $this->to = array();
-        $this->clearQueuedAddresses('to');
-    }
-
-    /**
-     * Clear all CC recipients.
-     * @return void
-     */
-    public function clearCCs()
-    {
-        foreach ($this->cc as $cc) {
-            unset($this->all_recipients[strtolower($cc[0])]);
-        }
-        $this->cc = array();
-        $this->clearQueuedAddresses('cc');
-    }
-
-    /**
-     * Clear all BCC recipients.
-     * @return void
-     */
-    public function clearBCCs()
-    {
-        foreach ($this->bcc as $bcc) {
-            unset($this->all_recipients[strtolower($bcc[0])]);
-        }
-        $this->bcc = array();
-        $this->clearQueuedAddresses('bcc');
-    }
-
-    /**
-     * Clear all ReplyTo recipients.
-     * @return void
-     */
-    public function clearReplyTos()
-    {
-        $this->ReplyTo = array();
-        $this->ReplyToQueue = array();
-    }
-
-    /**
-     * Clear all recipient types.
-     * @return void
-     */
-    public function clearAllRecipients()
-    {
-        $this->to = array();
-        $this->cc = array();
-        $this->bcc = array();
-        $this->all_recipients = array();
-        $this->RecipientsQueue = array();
-    }
-
-    /**
-     * Clear all filesystem, string, and binary attachments.
-     * @return void
-     */
-    public function clearAttachments()
-    {
-        $this->attachment = array();
-    }
-
-    /**
-     * Clear all custom headers.
-     * @return void
-     */
-    public function clearCustomHeaders()
-    {
-        $this->CustomHeader = array();
-    }
-
-    /**
-     * Add an error message to the error container.
-     * @access protected
-     * @param string $msg
-     * @return void
-     */
-    protected function setError($msg)
-    {
-        $this->error_count++;
-        if ($this->Mailer == 'smtp' and !is_null($this->smtp)) {
-            $lasterror = $this->smtp->getError();
-            if (!empty($lasterror['error'])) {
-                $msg .= $this->lang('smtp_error') . $lasterror['error'];
-                if (!empty($lasterror['detail'])) {
-                    $msg .= ' Detail: '. $lasterror['detail'];
-                }
-                if (!empty($lasterror['smtp_code'])) {
-                    $msg .= ' SMTP code: ' . $lasterror['smtp_code'];
-                }
-                if (!empty($lasterror['smtp_code_ex'])) {
-                    $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex'];
-                }
-            }
-        }
-        $this->ErrorInfo = $msg;
-    }
-
-    /**
-     * Return an RFC 822 formatted date.
-     * @access public
-     * @return string
-     * @static
-     */
-    public static function rfcDate()
-    {
-        // Set the time zone to whatever the default is to avoid 500 errors
-        // Will default to UTC if it's not set properly in php.ini
-        date_default_timezone_set(@date_default_timezone_get());
-        return date('D, j M Y H:i:s O');
-    }
-
-    /**
-     * Get the server hostname.
-     * Returns 'localhost.localdomain' if unknown.
-     * @access protected
-     * @return string
-     */
-    protected function serverHostname()
-    {
-        $result = 'localhost.localdomain';
-        if (!empty($this->Hostname)) {
-            $result = $this->Hostname;
-        } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) {
-            $result = $_SERVER['SERVER_NAME'];
-        } elseif (function_exists('gethostname') && gethostname() !== false) {
-            $result = gethostname();
-        } elseif (php_uname('n') !== false) {
-            $result = php_uname('n');
-        }
-        return $result;
-    }
-
-    /**
-     * Get an error message in the current language.
-     * @access protected
-     * @param string $key
-     * @return string
-     */
-    protected function lang($key)
-    {
-        if (count($this->language) < 1) {
-            $this->setLanguage('en'); // set the default language
-        }
-
-        if (array_key_exists($key, $this->language)) {
-            if ($key == 'smtp_connect_failed') {
-                //Include a link to troubleshooting docs on SMTP connection failure
-                //this is by far the biggest cause of support questions
-                //but it's usually not PHPMailer's fault.
-                return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
-            }
-            return $this->language[$key];
-        } else {
-            //Return the key as a fallback
-            return $key;
-        }
-    }
-
-    /**
-     * Check if an error occurred.
-     * @access public
-     * @return boolean True if an error did occur.
-     */
-    public function isError()
-    {
-        return ($this->error_count > 0);
-    }
-
-    /**
-     * Ensure consistent line endings in a string.
-     * Changes every end of line from CRLF, CR or LF to $this->LE.
-     * @access public
-     * @param string $str String to fixEOL
-     * @return string
-     */
-    public function fixEOL($str)
-    {
-        // Normalise to \n
-        $nstr = str_replace(array("\r\n", "\r"), "\n", $str);
-        // Now convert LE as needed
-        if ($this->LE !== "\n") {
-            $nstr = str_replace("\n", $this->LE, $nstr);
-        }
-        return $nstr;
-    }
-
-    /**
-     * Add a custom header.
-     * $name value can be overloaded to contain
-     * both header name and value (name:value)
-     * @access public
-     * @param string $name Custom header name
-     * @param string $value Header value
-     * @return void
-     */
-    public function addCustomHeader($name, $value = null)
-    {
-        if ($value === null) {
-            // Value passed in as name:value
-            $this->CustomHeader[] = explode(':', $name, 2);
-        } else {
-            $this->CustomHeader[] = array($name, $value);
-        }
-    }
-
-    /**
-     * Returns all custom headers.
-     * @return array
-     */
-    public function getCustomHeaders()
-    {
-        return $this->CustomHeader;
-    }
-
-    /**
-     * Create a message body from an HTML string.
-     * Automatically inlines images and creates a plain-text version by converting the HTML,
-     * overwriting any existing values in Body and AltBody.
-     * $basedir is used when handling relative image paths, e.g. <img src="images/a.png">
-     * will look for an image file in $basedir/images/a.png and convert it to inline.
-     * If you don't want to apply these transformations to your HTML, just set Body and AltBody yourself.
-     * @access public
-     * @param string $message HTML message string
-     * @param string $basedir base directory for relative paths to images
-     * @param boolean|callable $advanced Whether to use the internal HTML to text converter
-     *    or your own custom converter @see PHPMailer::html2text()
-     * @return string $message The transformed message Body
-     */
-    public function msgHTML($message, $basedir = '', $advanced = false)
-    {
-        preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images);
-        if (array_key_exists(2, $images)) {
-            foreach ($images[2] as $imgindex => $url) {
-                // Convert data URIs into embedded images
-                if (preg_match('#^data:(image[^;,]*)(;base64)?,#', $url, $match)) {
-                    $data = substr($url, strpos($url, ','));
-                    if ($match[2]) {
-                        $data = base64_decode($data);
-                    } else {
-                        $data = rawurldecode($data);
-                    }
-                    $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
-                    if ($this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, 'base64', $match[1])) {
-                        $message = str_replace(
-                            $images[0][$imgindex],
-                            $images[1][$imgindex] . '="cid:' . $cid . '"',
-                            $message
-                        );
-                    }
-                } elseif (substr($url, 0, 4) !== 'cid:' && !preg_match('#^[a-z][a-z0-9+.-]*://#i', $url)) {
-                    // Do not change urls for absolute images (thanks to corvuscorax)
-                    // Do not change urls that are already inline images
-                    $filename = basename($url);
-                    $directory = dirname($url);
-                    if ($directory == '.') {
-                        $directory = '';
-                    }
-                    $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
-                    if (strlen($basedir) > 1 && substr($basedir, -1) != '/') {
-                        $basedir .= '/';
-                    }
-                    if (strlen($directory) > 1 && substr($directory, -1) != '/') {
-                        $directory .= '/';
-                    }
-                    if ($this->addEmbeddedImage(
-                        $basedir . $directory . $filename,
-                        $cid,
-                        $filename,
-                        'base64',
-                        self::_mime_types((string)self::mb_pathinfo($filename, PATHINFO_EXTENSION))
-                    )
-                    ) {
-                        $message = preg_replace(
-                            '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
-                            $images[1][$imgindex] . '="cid:' . $cid . '"',
-                            $message
-                        );
-                    }
-                }
-            }
-        }
-        $this->isHTML(true);
-        // Convert all message body line breaks to CRLF, makes quoted-printable encoding work much better
-        $this->Body = $this->normalizeBreaks($message);
-        $this->AltBody = $this->normalizeBreaks($this->html2text($message, $advanced));
-        if (!$this->alternativeExists()) {
-            $this->AltBody = 'To view this email message, open it in a program that understands HTML!' .
-                self::CRLF . self::CRLF;
-        }
-        return $this->Body;
-    }
-
-    /**
-     * Convert an HTML string into plain text.
-     * This is used by msgHTML().
-     * Note - older versions of this function used a bundled advanced converter
-     * which was been removed for license reasons in #232.
-     * Example usage:
-     * <code>
-     * // Use default conversion
-     * $plain = $mail->html2text($html);
-     * // Use your own custom converter
-     * $plain = $mail->html2text($html, function($html) {
-     *     $converter = new MyHtml2text($html);
-     *     return $converter->get_text();
-     * });
-     * </code>
-     * @param string $html The HTML text to convert
-     * @param boolean|callable $advanced Any boolean value to use the internal converter,
-     *   or provide your own callable for custom conversion.
-     * @return string
-     */
-    public function html2text($html, $advanced = false)
-    {
-        if (is_callable($advanced)) {
-            return call_user_func($advanced, $html);
-        }
-        return html_entity_decode(
-            trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))),
-            ENT_QUOTES,
-            $this->CharSet
-        );
-    }
-
-    /**
-     * Get the MIME type for a file extension.
-     * @param string $ext File extension
-     * @access public
-     * @return string MIME type of file.
-     * @static
-     */
-    public static function _mime_types($ext = '')
-    {
-        $mimes = array(
-            'xl'    => 'application/excel',
-            'js'    => 'application/javascript',
-            'hqx'   => 'application/mac-binhex40',
-            'cpt'   => 'application/mac-compactpro',
-            'bin'   => 'application/macbinary',
-            'doc'   => 'application/msword',
-            'word'  => 'application/msword',
-            'xlsx'  => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
-            'xltx'  => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
-            'potx'  => 'application/vnd.openxmlformats-officedocument.presentationml.template',
-            'ppsx'  => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
-            'pptx'  => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
-            'sldx'  => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
-            'docx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
-            'dotx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
-            'xlam'  => 'application/vnd.ms-excel.addin.macroEnabled.12',
-            'xlsb'  => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
-            'class' => 'application/octet-stream',
-            'dll'   => 'application/octet-stream',
-            'dms'   => 'application/octet-stream',
-            'exe'   => 'application/octet-stream',
-            'lha'   => 'application/octet-stream',
-            'lzh'   => 'application/octet-stream',
-            'psd'   => 'application/octet-stream',
-            'sea'   => 'application/octet-stream',
-            'so'    => 'application/octet-stream',
-            'oda'   => 'application/oda',
-            'pdf'   => 'application/pdf',
-            'ai'    => 'application/postscript',
-            'eps'   => 'application/postscript',
-            'ps'    => 'application/postscript',
-            'smi'   => 'application/smil',
-            'smil'  => 'application/smil',
-            'mif'   => 'application/vnd.mif',
-            'xls'   => 'application/vnd.ms-excel',
-            'ppt'   => 'application/vnd.ms-powerpoint',
-            'wbxml' => 'application/vnd.wap.wbxml',
-            'wmlc'  => 'application/vnd.wap.wmlc',
-            'dcr'   => 'application/x-director',
-            'dir'   => 'application/x-director',
-            'dxr'   => 'application/x-director',
-            'dvi'   => 'application/x-dvi',
-            'gtar'  => 'application/x-gtar',
-            'php3'  => 'application/x-httpd-php',
-            'php4'  => 'application/x-httpd-php',
-            'php'   => 'application/x-httpd-php',
-            'phtml' => 'application/x-httpd-php',
-            'phps'  => 'application/x-httpd-php-source',
-            'swf'   => 'application/x-shockwave-flash',
-            'sit'   => 'application/x-stuffit',
-            'tar'   => 'application/x-tar',
-            'tgz'   => 'application/x-tar',
-            'xht'   => 'application/xhtml+xml',
-            'xhtml' => 'application/xhtml+xml',
-            'zip'   => 'application/zip',
-            'mid'   => 'audio/midi',
-            'midi'  => 'audio/midi',
-            'mp2'   => 'audio/mpeg',
-            'mp3'   => 'audio/mpeg',
-            'mpga'  => 'audio/mpeg',
-            'aif'   => 'audio/x-aiff',
-            'aifc'  => 'audio/x-aiff',
-            'aiff'  => 'audio/x-aiff',
-            'ram'   => 'audio/x-pn-realaudio',
-            'rm'    => 'audio/x-pn-realaudio',
-            'rpm'   => 'audio/x-pn-realaudio-plugin',
-            'ra'    => 'audio/x-realaudio',
-            'wav'   => 'audio/x-wav',
-            'bmp'   => 'image/bmp',
-            'gif'   => 'image/gif',
-            'jpeg'  => 'image/jpeg',
-            'jpe'   => 'image/jpeg',
-            'jpg'   => 'image/jpeg',
-            'png'   => 'image/png',
-            'tiff'  => 'image/tiff',
-            'tif'   => 'image/tiff',
-            'eml'   => 'message/rfc822',
-            'css'   => 'text/css',
-            'html'  => 'text/html',
-            'htm'   => 'text/html',
-            'shtml' => 'text/html',
-            'log'   => 'text/plain',
-            'text'  => 'text/plain',
-            'txt'   => 'text/plain',
-            'rtx'   => 'text/richtext',
-            'rtf'   => 'text/rtf',
-            'vcf'   => 'text/vcard',
-            'vcard' => 'text/vcard',
-            'xml'   => 'text/xml',
-            'xsl'   => 'text/xml',
-            'mpeg'  => 'video/mpeg',
-            'mpe'   => 'video/mpeg',
-            'mpg'   => 'video/mpeg',
-            'mov'   => 'video/quicktime',
-            'qt'    => 'video/quicktime',
-            'rv'    => 'video/vnd.rn-realvideo',
-            'avi'   => 'video/x-msvideo',
-            'movie' => 'video/x-sgi-movie'
-        );
-        if (array_key_exists(strtolower($ext), $mimes)) {
-            return $mimes[strtolower($ext)];
-        }
-        return 'application/octet-stream';
-    }
-
-    /**
-     * Map a file name to a MIME type.
-     * Defaults to 'application/octet-stream', i.e.. arbitrary binary data.
-     * @param string $filename A file name or full path, does not need to exist as a file
-     * @return string
-     * @static
-     */
-    public static function filenameToType($filename)
-    {
-        // In case the path is a URL, strip any query string before getting extension
-        $qpos = strpos($filename, '?');
-        if (false !== $qpos) {
-            $filename = substr($filename, 0, $qpos);
-        }
-        $pathinfo = self::mb_pathinfo($filename);
-        return self::_mime_types($pathinfo['extension']);
-    }
-
-    /**
-     * Multi-byte-safe pathinfo replacement.
-     * Drop-in replacement for pathinfo(), but multibyte-safe, cross-platform-safe, old-version-safe.
-     * Works similarly to the one in PHP >= 5.2.0
-     * @link http://www.php.net/manual/en/function.pathinfo.php#107461
-     * @param string $path A filename or path, does not need to exist as a file
-     * @param integer|string $options Either a PATHINFO_* constant,
-     *      or a string name to return only the specified piece, allows 'filename' to work on PHP < 5.2
-     * @return string|array
-     * @static
-     */
-    public static function mb_pathinfo($path, $options = null)
-    {
-        $ret = array('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '');
-        $pathinfo = array();
-        if (preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $pathinfo)) {
-            if (array_key_exists(1, $pathinfo)) {
-                $ret['dirname'] = $pathinfo[1];
-            }
-            if (array_key_exists(2, $pathinfo)) {
-                $ret['basename'] = $pathinfo[2];
-            }
-            if (array_key_exists(5, $pathinfo)) {
-                $ret['extension'] = $pathinfo[5];
-            }
-            if (array_key_exists(3, $pathinfo)) {
-                $ret['filename'] = $pathinfo[3];
-            }
-        }
-        switch ($options) {
-            case PATHINFO_DIRNAME:
-            case 'dirname':
-                return $ret['dirname'];
-            case PATHINFO_BASENAME:
-            case 'basename':
-                return $ret['basename'];
-            case PATHINFO_EXTENSION:
-            case 'extension':
-                return $ret['extension'];
-            case PATHINFO_FILENAME:
-            case 'filename':
-                return $ret['filename'];
-            default:
-                return $ret;
-        }
-    }
-
-    /**
-     * Set or reset instance properties.
-     * You should avoid this function - it's more verbose, less efficient, more error-prone and
-     * harder to debug than setting properties directly.
-     * Usage Example:
-     * `$mail->set('SMTPSecure', 'tls');`
-     *   is the same as:
-     * `$mail->SMTPSecure = 'tls';`
-     * @access public
-     * @param string $name The property name to set
-     * @param mixed $value The value to set the property to
-     * @return boolean
-     * @TODO Should this not be using the __set() magic function?
-     */
-    public function set($name, $value = '')
-    {
-        if (property_exists($this, $name)) {
-            $this->$name = $value;
-            return true;
-        } else {
-            $this->setError($this->lang('variable_set') . $name);
-            return false;
-        }
-    }
-
-    /**
-     * Strip newlines to prevent header injection.
-     * @access public
-     * @param string $str
-     * @return string
-     */
-    public function secureHeader($str)
-    {
-        return trim(str_replace(array("\r", "\n"), '', $str));
-    }
-
-    /**
-     * Normalize line breaks in a string.
-     * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.
-     * Defaults to CRLF (for message bodies) and preserves consecutive breaks.
-     * @param string $text
-     * @param string $breaktype What kind of line break to use, defaults to CRLF
-     * @return string
-     * @access public
-     * @static
-     */
-    public static function normalizeBreaks($text, $breaktype = "\r\n")
-    {
-        return preg_replace('/(\r\n|\r|\n)/ms', $breaktype, $text);
-    }
-
-    /**
-     * Set the public and private key files and password for S/MIME signing.
-     * @access public
-     * @param string $cert_filename
-     * @param string $key_filename
-     * @param string $key_pass Password for private key
-     * @param string $extracerts_filename Optional path to chain certificate
-     */
-    public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')
-    {
-        $this->sign_cert_file = $cert_filename;
-        $this->sign_key_file = $key_filename;
-        $this->sign_key_pass = $key_pass;
-        $this->sign_extracerts_file = $extracerts_filename;
-    }
-
-    /**
-     * Quoted-Printable-encode a DKIM header.
-     * @access public
-     * @param string $txt
-     * @return string
-     */
-    public function DKIM_QP($txt)
-    {
-        $line = '';
-        for ($i = 0; $i < strlen($txt); $i++) {
-            $ord = ord($txt[$i]);
-            if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
-                $line .= $txt[$i];
-            } else {
-                $line .= '=' . sprintf('%02X', $ord);
-            }
-        }
-        return $line;
-    }
-
-    /**
-     * Generate a DKIM signature.
-     * @access public
-     * @param string $signHeader
-     * @throws phpmailerException
-     * @return string The DKIM signature value
-     */
-    public function DKIM_Sign($signHeader)
-    {
-        if (!defined('PKCS7_TEXT')) {
-            if ($this->exceptions) {
-                throw new phpmailerException($this->lang('extension_missing') . 'openssl');
-            }
-            return '';
-        }
-        $privKeyStr = !empty($this->DKIM_private_string) ? $this->DKIM_private_string : file_get_contents($this->DKIM_private);
-        if ('' != $this->DKIM_passphrase) {
-            $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
-        } else {
-            $privKey = openssl_pkey_get_private($privKeyStr);
-        }
-        //Workaround for missing digest algorithms in old PHP & OpenSSL versions
-        //@link http://stackoverflow.com/a/11117338/333340
-        if (version_compare(PHP_VERSION, '5.3.0') >= 0 and
-            in_array('sha256WithRSAEncryption', openssl_get_md_methods(true))) {
-            if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
-                openssl_pkey_free($privKey);
-                return base64_encode($signature);
-            }
-        } else {
-            $pinfo = openssl_pkey_get_details($privKey);
-            $hash = hash('sha256', $signHeader);
-            //'Magic' constant for SHA256 from RFC3447
-            //@link https://tools.ietf.org/html/rfc3447#page-43
-            $t = '3031300d060960864801650304020105000420' . $hash;
-            $pslen = $pinfo['bits'] / 8 - (strlen($t) / 2 + 3);
-            $eb = pack('H*', '0001' . str_repeat('FF', $pslen) . '00' . $t);
-
-            if (openssl_private_encrypt($eb, $signature, $privKey, OPENSSL_NO_PADDING)) {
-                openssl_pkey_free($privKey);
-                return base64_encode($signature);
-            }
-        }
-        openssl_pkey_free($privKey);
-        return '';
-    }
-
-    /**
-     * Generate a DKIM canonicalization header.
-     * @access public
-     * @param string $signHeader Header
-     * @return string
-     */
-    public function DKIM_HeaderC($signHeader)
-    {
-        $signHeader = preg_replace('/\r\n\s+/', ' ', $signHeader);
-        $lines = explode("\r\n", $signHeader);
-        foreach ($lines as $key => $line) {
-            list($heading, $value) = explode(':', $line, 2);
-            $heading = strtolower($heading);
-            $value = preg_replace('/\s{2,}/', ' ', $value); // Compress useless spaces
-            $lines[$key] = $heading . ':' . trim($value); // Don't forget to remove WSP around the value
-        }
-        $signHeader = implode("\r\n", $lines);
-        return $signHeader;
-    }
-
-    /**
-     * Generate a DKIM canonicalization body.
-     * @access public
-     * @param string $body Message Body
-     * @return string
-     */
-    public function DKIM_BodyC($body)
-    {
-        if ($body == '') {
-            return "\r\n";
-        }
-        // stabilize line endings
-        $body = str_replace("\r\n", "\n", $body);
-        $body = str_replace("\n", "\r\n", $body);
-        // END stabilize line endings
-        while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") {
-            $body = substr($body, 0, strlen($body) - 2);
-        }
-        return $body;
-    }
-
-    /**
-     * Create the DKIM header and body in a new message header.
-     * @access public
-     * @param string $headers_line Header lines
-     * @param string $subject Subject
-     * @param string $body Body
-     * @return string
-     */
-    public function DKIM_Add($headers_line, $subject, $body)
-    {
-        $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms
-        $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body
-        $DKIMquery = 'dns/txt'; // Query method
-        $DKIMtime = time(); // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone)
-        $subject_header = "Subject: $subject";
-        $headers = explode($this->LE, $headers_line);
-        $from_header = '';
-        $to_header = '';
-        $date_header = '';
-        $current = '';
-        foreach ($headers as $header) {
-            if (strpos($header, 'From:') === 0) {
-                $from_header = $header;
-                $current = 'from_header';
-            } elseif (strpos($header, 'To:') === 0) {
-                $to_header = $header;
-                $current = 'to_header';
-            } elseif (strpos($header, 'Date:') === 0) {
-                $date_header = $header;
-                $current = 'date_header';
-            } else {
-                if (!empty($$current) && strpos($header, ' =?') === 0) {
-                    $$current .= $header;
-                } else {
-                    $current = '';
-                }
-            }
-        }
-        $from = str_replace('|', '=7C', $this->DKIM_QP($from_header));
-        $to = str_replace('|', '=7C', $this->DKIM_QP($to_header));
-        $date = str_replace('|', '=7C', $this->DKIM_QP($date_header));
-        $subject = str_replace(
-            '|',
-            '=7C',
-            $this->DKIM_QP($subject_header)
-        ); // Copied header fields (dkim-quoted-printable)
-        $body = $this->DKIM_BodyC($body);
-        $DKIMlen = strlen($body); // Length of body
-        $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body
-        if ('' == $this->DKIM_identity) {
-            $ident = '';
-        } else {
-            $ident = ' i=' . $this->DKIM_identity . ';';
-        }
-        $dkimhdrs = 'DKIM-Signature: v=1; a=' .
-            $DKIMsignatureType . '; q=' .
-            $DKIMquery . '; l=' .
-            $DKIMlen . '; s=' .
-            $this->DKIM_selector .
-            ";\r\n" .
-            "\tt=" . $DKIMtime . '; c=' . $DKIMcanonicalization . ";\r\n" .
-            "\th=From:To:Date:Subject;\r\n" .
-            "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" .
-            "\tz=$from\r\n" .
-            "\t|$to\r\n" .
-            "\t|$date\r\n" .
-            "\t|$subject;\r\n" .
-            "\tbh=" . $DKIMb64 . ";\r\n" .
-            "\tb=";
-        $toSign = $this->DKIM_HeaderC(
-            $from_header . "\r\n" .
-            $to_header . "\r\n" .
-            $date_header . "\r\n" .
-            $subject_header . "\r\n" .
-            $dkimhdrs
-        );
-        $signed = $this->DKIM_Sign($toSign);
-        return $dkimhdrs . $signed . "\r\n";
-    }
-
-    /**
-     * Detect if a string contains a line longer than the maximum line length allowed.
-     * @param string $str
-     * @return boolean
-     * @static
-     */
-    public static function hasLineLongerThanMax($str)
-    {
-        //+2 to include CRLF line break for a 1000 total
-        return (boolean)preg_match('/^(.{'.(self::MAX_LINE_LENGTH + 2).',})/m', $str);
-    }
-
-    /**
-     * Allows for public read access to 'to' property.
-     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
-     * @access public
-     * @return array
-     */
-    public function getToAddresses()
-    {
-        return $this->to;
-    }
-
-    /**
-     * Allows for public read access to 'cc' property.
-     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
-     * @access public
-     * @return array
-     */
-    public function getCcAddresses()
-    {
-        return $this->cc;
-    }
-
-    /**
-     * Allows for public read access to 'bcc' property.
-     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
-     * @access public
-     * @return array
-     */
-    public function getBccAddresses()
-    {
-        return $this->bcc;
-    }
-
-    /**
-     * Allows for public read access to 'ReplyTo' property.
-     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
-     * @access public
-     * @return array
-     */
-    public function getReplyToAddresses()
-    {
-        return $this->ReplyTo;
-    }
-
-    /**
-     * Allows for public read access to 'all_recipients' property.
-     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
-     * @access public
-     * @return array
-     */
-    public function getAllRecipientAddresses()
-    {
-        return $this->all_recipients;
-    }
-
-    /**
-     * Perform a callback.
-     * @param boolean $isSent
-     * @param array $to
-     * @param array $cc
-     * @param array $bcc
-     * @param string $subject
-     * @param string $body
-     * @param string $from
-     */
-    protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from)
-    {
-        if (!empty($this->action_function) && is_callable($this->action_function)) {
-            $params = array($isSent, $to, $cc, $bcc, $subject, $body, $from);
-            call_user_func_array($this->action_function, $params);
-        }
-    }
-}
-
-/**
- * PHPMailer exception handler
- * @package PHPMailer
- */
-class phpmailerException extends Exception
-{
-    /**
-     * Prettify error message output
-     * @return string
-     */
-    public function errorMessage()
-    {
-        $errorMsg = '<strong>' . $this->getMessage() . "</strong><br />\n";
-        return $errorMsg;
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/class.phpmaileroauth.php b/www/plugins/facteur/phpmailer-php5/class.phpmaileroauth.php
deleted file mode 100644 (file)
index b1bb09f..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-/**
- * PHPMailer - PHP email creation and transport class.
- * PHP Version 5.4
- * @package PHPMailer
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- * @author Brent R. Matzelle (original founder)
- * @copyright 2012 - 2014 Marcus Bointon
- * @copyright 2010 - 2012 Jim Jagielski
- * @copyright 2004 - 2009 Andy Prevost
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
- * @note This program is distributed in the hope that it will be useful - WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/**
- * PHPMailerOAuth - PHPMailer subclass adding OAuth support.
- * @package PHPMailer
- * @author @sherryl4george
- * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
- */
-class PHPMailerOAuth extends PHPMailer
-{
-    /**
-     * The OAuth user's email address
-     * @var string
-     */
-    public $oauthUserEmail = '';
-
-    /**
-     * The OAuth refresh token
-     * @var string
-     */
-    public $oauthRefreshToken = '';
-
-    /**
-     * The OAuth client ID
-     * @var string
-     */
-    public $oauthClientId = '';
-
-    /**
-     * The OAuth client secret
-     * @var string
-     */
-    public $oauthClientSecret = '';
-
-    /**
-     * An instance of the PHPMailerOAuthGoogle class.
-     * @var PHPMailerOAuthGoogle
-     * @access protected
-     */
-    protected $oauth = null;
-
-    /**
-     * Get a PHPMailerOAuthGoogle instance to use.
-     * @return PHPMailerOAuthGoogle
-     */
-    public function getOAUTHInstance()
-    {
-        if (!is_object($this->oauth)) {
-            $this->oauth = new PHPMailerOAuthGoogle(
-                $this->oauthUserEmail,
-                $this->oauthClientSecret,
-                $this->oauthClientId,
-                $this->oauthRefreshToken
-            );
-        }
-        return $this->oauth;
-    }
-
-    /**
-     * Initiate a connection to an SMTP server.
-     * Overrides the original smtpConnect method to add support for OAuth.
-     * @param array $options An array of options compatible with stream_context_create()
-     * @uses SMTP
-     * @access public
-     * @return bool
-     * @throws phpmailerException
-     */
-    public function smtpConnect($options = array())
-    {
-        if (is_null($this->smtp)) {
-            $this->smtp = $this->getSMTPInstance();
-        }
-
-        if (is_null($this->oauth)) {
-            $this->oauth = $this->getOAUTHInstance();
-        }
-
-        // Already connected?
-        if ($this->smtp->connected()) {
-            return true;
-        }
-
-        $this->smtp->setTimeout($this->Timeout);
-        $this->smtp->setDebugLevel($this->SMTPDebug);
-        $this->smtp->setDebugOutput($this->Debugoutput);
-        $this->smtp->setVerp($this->do_verp);
-        $hosts = explode(';', $this->Host);
-        $lastexception = null;
-
-        foreach ($hosts as $hostentry) {
-            $hostinfo = array();
-            if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
-                // Not a valid host entry
-                continue;
-            }
-            // $hostinfo[2]: optional ssl or tls prefix
-            // $hostinfo[3]: the hostname
-            // $hostinfo[4]: optional port number
-            // The host string prefix can temporarily override the current setting for SMTPSecure
-            // If it's not specified, the default value is used
-            $prefix = '';
-            $secure = $this->SMTPSecure;
-            $tls = ($this->SMTPSecure == 'tls');
-            if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
-                $prefix = 'ssl://';
-                $tls = false; // Can't have SSL and TLS at the same time
-                $secure = 'ssl';
-            } elseif ($hostinfo[2] == 'tls') {
-                $tls = true;
-                // tls doesn't use a prefix
-                $secure = 'tls';
-            }
-            //Do we need the OpenSSL extension?
-            $sslext = defined('OPENSSL_ALGO_SHA1');
-            if ('tls' === $secure or 'ssl' === $secure) {
-                //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
-                if (!$sslext) {
-                    throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL);
-                }
-            }
-            $host = $hostinfo[3];
-            $port = $this->Port;
-            $tport = (integer)$hostinfo[4];
-            if ($tport > 0 and $tport < 65536) {
-                $port = $tport;
-            }
-            if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
-                try {
-                    if ($this->Helo) {
-                        $hello = $this->Helo;
-                    } else {
-                        $hello = $this->serverHostname();
-                    }
-                    $this->smtp->hello($hello);
-                    //Automatically enable TLS encryption if:
-                    // * it's not disabled
-                    // * we have openssl extension
-                    // * we are not already using SSL
-                    // * the server offers STARTTLS
-                    if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
-                        $tls = true;
-                    }
-                    if ($tls) {
-                        if (!$this->smtp->startTLS()) {
-                            throw new phpmailerException($this->lang('connect_host'));
-                        }
-                        // We must resend HELO after tls negotiation
-                        $this->smtp->hello($hello);
-                    }
-                    if ($this->SMTPAuth) {
-                        if (!$this->smtp->authenticate(
-                            $this->Username,
-                            $this->Password,
-                            $this->AuthType,
-                            $this->Realm,
-                            $this->Workstation,
-                            $this->oauth
-                        )
-                        ) {
-                            throw new phpmailerException($this->lang('authenticate'));
-                        }
-                    }
-                    return true;
-                } catch (phpmailerException $exc) {
-                    $lastexception = $exc;
-                    $this->edebug($exc->getMessage());
-                    // We must have connected, but then failed TLS or Auth, so close connection nicely
-                    $this->smtp->quit();
-                }
-            }
-        }
-        // If we get here, all connection attempts have failed, so close connection hard
-        $this->smtp->close();
-        // As we've caught all exceptions, just report whatever the last one was
-        if ($this->exceptions and !is_null($lastexception)) {
-            throw $lastexception;
-        }
-        return false;
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/class.phpmaileroauthgoogle.php b/www/plugins/facteur/phpmailer-php5/class.phpmaileroauthgoogle.php
deleted file mode 100644 (file)
index 71c9bd3..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-/**
- * PHPMailer - PHP email creation and transport class.
- * PHP Version 5.4
- * @package PHPMailer
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- * @author Brent R. Matzelle (original founder)
- * @copyright 2012 - 2014 Marcus Bointon
- * @copyright 2010 - 2012 Jim Jagielski
- * @copyright 2004 - 2009 Andy Prevost
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
- * @note This program is distributed in the hope that it will be useful - WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/**
- * PHPMailerOAuthGoogle - Wrapper for League OAuth2 Google provider.
- * @package PHPMailer
- * @author @sherryl4george
- * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
- * @link https://github.com/thephpleague/oauth2-client
- */
-class PHPMailerOAuthGoogle
-{
-    private $oauthUserEmail = '';
-    private $oauthRefreshToken = '';
-    private $oauthClientId = '';
-    private $oauthClientSecret = '';
-
-    /**
-     * @param string $UserEmail
-     * @param string $ClientSecret
-     * @param string $ClientId
-     * @param string $RefreshToken
-     */
-    public function __construct(
-        $UserEmail,
-        $ClientSecret,
-        $ClientId,
-        $RefreshToken
-    ) {
-        $this->oauthClientId = $ClientId;
-        $this->oauthClientSecret = $ClientSecret;
-        $this->oauthRefreshToken = $RefreshToken;
-        $this->oauthUserEmail = $UserEmail;
-    }
-
-    private function getProvider()
-    {
-        return new League\OAuth2\Client\Provider\Google([
-            'clientId' => $this->oauthClientId,
-            'clientSecret' => $this->oauthClientSecret
-        ]);
-    }
-
-    private function getGrant()
-    {
-        return new \League\OAuth2\Client\Grant\RefreshToken();
-    }
-
-    private function getToken()
-    {
-        $provider = $this->getProvider();
-        $grant = $this->getGrant();
-        return $provider->getAccessToken($grant, ['refresh_token' => $this->oauthRefreshToken]);
-    }
-
-    public function getOauth64()
-    {
-        $token = $this->getToken();
-        return base64_encode("user=" . $this->oauthUserEmail . "\001auth=Bearer " . $token . "\001\001");
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/class.pop3.php b/www/plugins/facteur/phpmailer-php5/class.pop3.php
deleted file mode 100755 (executable)
index 373c886..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-<?php
-/**
- * PHPMailer POP-Before-SMTP Authentication Class.
- * PHP Version 5
- * @package PHPMailer
- * @link https://github.com/PHPMailer/PHPMailer/
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- * @author Brent R. Matzelle (original founder)
- * @copyright 2012 - 2014 Marcus Bointon
- * @copyright 2010 - 2012 Jim Jagielski
- * @copyright 2004 - 2009 Andy Prevost
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
- * @note This program is distributed in the hope that it will be useful - WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/**
- * PHPMailer POP-Before-SMTP Authentication Class.
- * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.
- * Does not support APOP.
- * @package PHPMailer
- * @author Richard Davey (original author) <rich@corephp.co.uk>
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- */
-class POP3
-{
-    /**
-     * The POP3 PHPMailer Version number.
-     * @var string
-     * @access public
-     */
-    public $Version = '5.2.21';
-
-    /**
-     * Default POP3 port number.
-     * @var integer
-     * @access public
-     */
-    public $POP3_PORT = 110;
-
-    /**
-     * Default timeout in seconds.
-     * @var integer
-     * @access public
-     */
-    public $POP3_TIMEOUT = 30;
-
-    /**
-     * POP3 Carriage Return + Line Feed.
-     * @var string
-     * @access public
-     * @deprecated Use the constant instead
-     */
-    public $CRLF = "\r\n";
-
-    /**
-     * Debug display level.
-     * Options: 0 = no, 1+ = yes
-     * @var integer
-     * @access public
-     */
-    public $do_debug = 0;
-
-    /**
-     * POP3 mail server hostname.
-     * @var string
-     * @access public
-     */
-    public $host;
-
-    /**
-     * POP3 port number.
-     * @var integer
-     * @access public
-     */
-    public $port;
-
-    /**
-     * POP3 Timeout Value in seconds.
-     * @var integer
-     * @access public
-     */
-    public $tval;
-
-    /**
-     * POP3 username
-     * @var string
-     * @access public
-     */
-    public $username;
-
-    /**
-     * POP3 password.
-     * @var string
-     * @access public
-     */
-    public $password;
-
-    /**
-     * Resource handle for the POP3 connection socket.
-     * @var resource
-     * @access protected
-     */
-    protected $pop_conn;
-
-    /**
-     * Are we connected?
-     * @var boolean
-     * @access protected
-     */
-    protected $connected = false;
-
-    /**
-     * Error container.
-     * @var array
-     * @access protected
-     */
-    protected $errors = array();
-
-    /**
-     * Line break constant
-     */
-    const CRLF = "\r\n";
-
-    /**
-     * Simple static wrapper for all-in-one POP before SMTP
-     * @param $host
-     * @param integer|boolean $port The port number to connect to
-     * @param integer|boolean $timeout The timeout value
-     * @param string $username
-     * @param string $password
-     * @param integer $debug_level
-     * @return boolean
-     */
-    public static function popBeforeSmtp(
-        $host,
-        $port = false,
-        $timeout = false,
-        $username = '',
-        $password = '',
-        $debug_level = 0
-    ) {
-        $pop = new POP3;
-        return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);
-    }
-
-    /**
-     * Authenticate with a POP3 server.
-     * A connect, login, disconnect sequence
-     * appropriate for POP-before SMTP authorisation.
-     * @access public
-     * @param string $host The hostname to connect to
-     * @param integer|boolean $port The port number to connect to
-     * @param integer|boolean $timeout The timeout value
-     * @param string $username
-     * @param string $password
-     * @param integer $debug_level
-     * @return boolean
-     */
-    public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)
-    {
-        $this->host = $host;
-        // If no port value provided, use default
-        if (false === $port) {
-            $this->port = $this->POP3_PORT;
-        } else {
-            $this->port = (integer)$port;
-        }
-        // If no timeout value provided, use default
-        if (false === $timeout) {
-            $this->tval = $this->POP3_TIMEOUT;
-        } else {
-            $this->tval = (integer)$timeout;
-        }
-        $this->do_debug = $debug_level;
-        $this->username = $username;
-        $this->password = $password;
-        //  Reset the error log
-        $this->errors = array();
-        //  connect
-        $result = $this->connect($this->host, $this->port, $this->tval);
-        if ($result) {
-            $login_result = $this->login($this->username, $this->password);
-            if ($login_result) {
-                $this->disconnect();
-                return true;
-            }
-        }
-        // We need to disconnect regardless of whether the login succeeded
-        $this->disconnect();
-        return false;
-    }
-
-    /**
-     * Connect to a POP3 server.
-     * @access public
-     * @param string $host
-     * @param integer|boolean $port
-     * @param integer $tval
-     * @return boolean
-     */
-    public function connect($host, $port = false, $tval = 30)
-    {
-        //  Are we already connected?
-        if ($this->connected) {
-            return true;
-        }
-
-        //On Windows this will raise a PHP Warning error if the hostname doesn't exist.
-        //Rather than suppress it with @fsockopen, capture it cleanly instead
-        set_error_handler(array($this, 'catchWarning'));
-
-        if (false === $port) {
-            $port = $this->POP3_PORT;
-        }
-
-        //  connect to the POP3 server
-        $this->pop_conn = fsockopen(
-            $host, //  POP3 Host
-            $port, //  Port #
-            $errno, //  Error Number
-            $errstr, //  Error Message
-            $tval
-        ); //  Timeout (seconds)
-        //  Restore the error handler
-        restore_error_handler();
-
-        //  Did we connect?
-        if (false === $this->pop_conn) {
-            //  It would appear not...
-            $this->setError(array(
-                'error' => "Failed to connect to server $host on port $port",
-                'errno' => $errno,
-                'errstr' => $errstr
-            ));
-            return false;
-        }
-
-        //  Increase the stream time-out
-        stream_set_timeout($this->pop_conn, $tval, 0);
-
-        //  Get the POP3 server response
-        $pop3_response = $this->getResponse();
-        //  Check for the +OK
-        if ($this->checkResponse($pop3_response)) {
-            //  The connection is established and the POP3 server is talking
-            $this->connected = true;
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Log in to the POP3 server.
-     * Does not support APOP (RFC 2828, 4949).
-     * @access public
-     * @param string $username
-     * @param string $password
-     * @return boolean
-     */
-    public function login($username = '', $password = '')
-    {
-        if (!$this->connected) {
-            $this->setError('Not connected to POP3 server');
-        }
-        if (empty($username)) {
-            $username = $this->username;
-        }
-        if (empty($password)) {
-            $password = $this->password;
-        }
-
-        // Send the Username
-        $this->sendString("USER $username" . self::CRLF);
-        $pop3_response = $this->getResponse();
-        if ($this->checkResponse($pop3_response)) {
-            // Send the Password
-            $this->sendString("PASS $password" . self::CRLF);
-            $pop3_response = $this->getResponse();
-            if ($this->checkResponse($pop3_response)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Disconnect from the POP3 server.
-     * @access public
-     */
-    public function disconnect()
-    {
-        $this->sendString('QUIT');
-        //The QUIT command may cause the daemon to exit, which will kill our connection
-        //So ignore errors here
-        try {
-            @fclose($this->pop_conn);
-        } catch (Exception $e) {
-            //Do nothing
-        };
-    }
-
-    /**
-     * Get a response from the POP3 server.
-     * $size is the maximum number of bytes to retrieve
-     * @param integer $size
-     * @return string
-     * @access protected
-     */
-    protected function getResponse($size = 128)
-    {
-        $response = fgets($this->pop_conn, $size);
-        if ($this->do_debug >= 1) {
-            echo "Server -> Client: $response";
-        }
-        return $response;
-    }
-
-    /**
-     * Send raw data to the POP3 server.
-     * @param string $string
-     * @return integer
-     * @access protected
-     */
-    protected function sendString($string)
-    {
-        if ($this->pop_conn) {
-            if ($this->do_debug >= 2) { //Show client messages when debug >= 2
-                echo "Client -> Server: $string";
-            }
-            return fwrite($this->pop_conn, $string, strlen($string));
-        }
-        return 0;
-    }
-
-    /**
-     * Checks the POP3 server response.
-     * Looks for for +OK or -ERR.
-     * @param string $string
-     * @return boolean
-     * @access protected
-     */
-    protected function checkResponse($string)
-    {
-        if (substr($string, 0, 3) !== '+OK') {
-            $this->setError(array(
-                'error' => "Server reported an error: $string",
-                'errno' => 0,
-                'errstr' => ''
-            ));
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Add an error to the internal error store.
-     * Also display debug output if it's enabled.
-     * @param $error
-     * @access protected
-     */
-    protected function setError($error)
-    {
-        $this->errors[] = $error;
-        if ($this->do_debug >= 1) {
-            echo '<pre>';
-            foreach ($this->errors as $error) {
-                print_r($error);
-            }
-            echo '</pre>';
-        }
-    }
-
-    /**
-     * Get an array of error messages, if any.
-     * @return array
-     */
-    public function getErrors()
-    {
-        return $this->errors;
-    }
-
-    /**
-     * POP3 connection error handler.
-     * @param integer $errno
-     * @param string $errstr
-     * @param string $errfile
-     * @param integer $errline
-     * @access protected
-     */
-    protected function catchWarning($errno, $errstr, $errfile, $errline)
-    {
-        $this->setError(array(
-            'error' => "Connecting to the POP3 server raised a PHP warning: ",
-            'errno' => $errno,
-            'errstr' => $errstr,
-            'errfile' => $errfile,
-            'errline' => $errline
-        ));
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/class.smtp.php b/www/plugins/facteur/phpmailer-php5/class.smtp.php
deleted file mode 100755 (executable)
index 270162b..0000000
+++ /dev/null
@@ -1,1249 +0,0 @@
-<?php
-/**
- * PHPMailer RFC821 SMTP email transport class.
- * PHP Version 5
- * @package PHPMailer
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
- * @author Brent R. Matzelle (original founder)
- * @copyright 2014 Marcus Bointon
- * @copyright 2010 - 2012 Jim Jagielski
- * @copyright 2004 - 2009 Andy Prevost
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
- * @note This program is distributed in the hope that it will be useful - WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/**
- * PHPMailer RFC821 SMTP email transport class.
- * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
- * @package PHPMailer
- * @author Chris Ryan
- * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
- */
-class SMTP
-{
-    /**
-     * The PHPMailer SMTP version number.
-     * @var string
-     */
-    const VERSION = '5.2.21';
-
-    /**
-     * SMTP line break constant.
-     * @var string
-     */
-    const CRLF = "\r\n";
-
-    /**
-     * The SMTP port to use if one is not specified.
-     * @var integer
-     */
-    const DEFAULT_SMTP_PORT = 25;
-
-    /**
-     * The maximum line length allowed by RFC 2822 section 2.1.1
-     * @var integer
-     */
-    const MAX_LINE_LENGTH = 998;
-
-    /**
-     * Debug level for no output
-     */
-    const DEBUG_OFF = 0;
-
-    /**
-     * Debug level to show client -> server messages
-     */
-    const DEBUG_CLIENT = 1;
-
-    /**
-     * Debug level to show client -> server and server -> client messages
-     */
-    const DEBUG_SERVER = 2;
-
-    /**
-     * Debug level to show connection status, client -> server and server -> client messages
-     */
-    const DEBUG_CONNECTION = 3;
-
-    /**
-     * Debug level to show all messages
-     */
-    const DEBUG_LOWLEVEL = 4;
-
-    /**
-     * The PHPMailer SMTP Version number.
-     * @var string
-     * @deprecated Use the `VERSION` constant instead
-     * @see SMTP::VERSION
-     */
-    public $Version = '5.2.21';
-
-    /**
-     * SMTP server port number.
-     * @var integer
-     * @deprecated This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead
-     * @see SMTP::DEFAULT_SMTP_PORT
-     */
-    public $SMTP_PORT = 25;
-
-    /**
-     * SMTP reply line ending.
-     * @var string
-     * @deprecated Use the `CRLF` constant instead
-     * @see SMTP::CRLF
-     */
-    public $CRLF = "\r\n";
-
-    /**
-     * Debug output level.
-     * Options:
-     * * self::DEBUG_OFF (`0`) No debug output, default
-     * * self::DEBUG_CLIENT (`1`) Client commands
-     * * self::DEBUG_SERVER (`2`) Client commands and server responses
-     * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
-     * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages
-     * @var integer
-     */
-    public $do_debug = self::DEBUG_OFF;
-
-    /**
-     * How to handle debug output.
-     * Options:
-     * * `echo` Output plain-text as-is, appropriate for CLI
-     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
-     * * `error_log` Output to error log as configured in php.ini
-     *
-     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
-     * <code>
-     * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
-     * </code>
-     * @var string|callable
-     */
-    public $Debugoutput = 'echo';
-
-    /**
-     * Whether to use VERP.
-     * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path
-     * @link http://www.postfix.org/VERP_README.html Info on VERP
-     * @var boolean
-     */
-    public $do_verp = false;
-
-    /**
-     * The timeout value for connection, in seconds.
-     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
-     * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
-     * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2
-     * @var integer
-     */
-    public $Timeout = 300;
-
-    /**
-     * How long to wait for commands to complete, in seconds.
-     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
-     * @var integer
-     */
-    public $Timelimit = 300;
-
-       /**
-        * @var array patterns to extract smtp transaction id from smtp reply
-        * Only first capture group will be use, use non-capturing group to deal with it
-        * Extend this class to override this property to fulfil your needs.
-        */
-       protected $smtp_transaction_id_patterns = array(
-               'exim' => '/[0-9]{3} OK id=(.*)/',
-               'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/',
-               'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/'
-       );
-
-    /**
-     * The socket for the server connection.
-     * @var resource
-     */
-    protected $smtp_conn;
-
-    /**
-     * Error information, if any, for the last SMTP command.
-     * @var array
-     */
-    protected $error = array(
-        'error' => '',
-        'detail' => '',
-        'smtp_code' => '',
-        'smtp_code_ex' => ''
-    );
-
-    /**
-     * The reply the server sent to us for HELO.
-     * If null, no HELO string has yet been received.
-     * @var string|null
-     */
-    protected $helo_rply = null;
-
-    /**
-     * The set of SMTP extensions sent in reply to EHLO command.
-     * Indexes of the array are extension names.
-     * Value at index 'HELO' or 'EHLO' (according to command that was sent)
-     * represents the server name. In case of HELO it is the only element of the array.
-     * Other values can be boolean TRUE or an array containing extension options.
-     * If null, no HELO/EHLO string has yet been received.
-     * @var array|null
-     */
-    protected $server_caps = null;
-
-    /**
-     * The most recent reply received from the server.
-     * @var string
-     */
-    protected $last_reply = '';
-
-    /**
-     * Output debugging info via a user-selected method.
-     * @see SMTP::$Debugoutput
-     * @see SMTP::$do_debug
-     * @param string $str Debug string to output
-     * @param integer $level The debug level of this message; see DEBUG_* constants
-     * @return void
-     */
-    protected function edebug($str, $level = 0)
-    {
-        if ($level > $this->do_debug) {
-            return;
-        }
-        //Avoid clash with built-in function names
-        if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
-            call_user_func($this->Debugoutput, $str, $level);
-            return;
-        }
-        switch ($this->Debugoutput) {
-            case 'error_log':
-                //Don't output, just log
-                error_log($str);
-                break;
-            case 'html':
-                //Cleans up output a bit for a better looking, HTML-safe output
-                echo htmlentities(
-                    preg_replace('/[\r\n]+/', '', $str),
-                    ENT_QUOTES,
-                    'UTF-8'
-                )
-                . "<br>\n";
-                break;
-            case 'echo':
-            default:
-                //Normalize line breaks
-                $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str);
-                echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
-                    "\n",
-                    "\n                   \t                  ",
-                    trim($str)
-                )."\n";
-        }
-    }
-
-    /**
-     * Connect to an SMTP server.
-     * @param string $host SMTP server IP or host name
-     * @param integer $port The port number to connect to
-     * @param integer $timeout How long to wait for the connection to open
-     * @param array $options An array of options for stream_context_create()
-     * @access public
-     * @return boolean
-     */
-    public function connect($host, $port = null, $timeout = 30, $options = array())
-    {
-        static $streamok;
-        //This is enabled by default since 5.0.0 but some providers disable it
-        //Check this once and cache the result
-        if (is_null($streamok)) {
-            $streamok = function_exists('stream_socket_client');
-        }
-        // Clear errors to avoid confusion
-        $this->setError('');
-        // Make sure we are __not__ connected
-        if ($this->connected()) {
-            // Already connected, generate error
-            $this->setError('Already connected to a server');
-            return false;
-        }
-        if (empty($port)) {
-            $port = self::DEFAULT_SMTP_PORT;
-        }
-        // Connect to the SMTP server
-        $this->edebug(
-            "Connection: opening to $host:$port, timeout=$timeout, options=".var_export($options, true),
-            self::DEBUG_CONNECTION
-        );
-        $errno = 0;
-        $errstr = '';
-        if ($streamok) {
-            $socket_context = stream_context_create($options);
-            set_error_handler(array($this, 'errorHandler'));
-            $this->smtp_conn = stream_socket_client(
-                $host . ":" . $port,
-                $errno,
-                $errstr,
-                $timeout,
-                STREAM_CLIENT_CONNECT,
-                $socket_context
-            );
-            restore_error_handler();
-        } else {
-            //Fall back to fsockopen which should work in more places, but is missing some features
-            $this->edebug(
-                "Connection: stream_socket_client not available, falling back to fsockopen",
-                self::DEBUG_CONNECTION
-            );
-            set_error_handler(array($this, 'errorHandler'));
-            $this->smtp_conn = fsockopen(
-                $host,
-                $port,
-                $errno,
-                $errstr,
-                $timeout
-            );
-            restore_error_handler();
-        }
-        // Verify we connected properly
-        if (!is_resource($this->smtp_conn)) {
-            $this->setError(
-                'Failed to connect to server',
-                $errno,
-                $errstr
-            );
-            $this->edebug(
-                'SMTP ERROR: ' . $this->error['error']
-                . ": $errstr ($errno)",
-                self::DEBUG_CLIENT
-            );
-            return false;
-        }
-        $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
-        // SMTP server can take longer to respond, give longer timeout for first read
-        // Windows does not have support for this timeout function
-        if (substr(PHP_OS, 0, 3) != 'WIN') {
-            $max = ini_get('max_execution_time');
-            // Don't bother if unlimited
-            if ($max != 0 && $timeout > $max) {
-                @set_time_limit($timeout);
-            }
-            stream_set_timeout($this->smtp_conn, $timeout, 0);
-        }
-        // Get any announcement
-        $announce = $this->get_lines();
-        $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
-        return true;
-    }
-
-    /**
-     * Initiate a TLS (encrypted) session.
-     * @access public
-     * @return boolean
-     */
-    public function startTLS()
-    {
-        if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
-            return false;
-        }
-
-        //Allow the best TLS version(s) we can
-        $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
-
-        //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
-        //so add them back in manually if we can
-        if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
-            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
-            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
-        }
-
-        // Begin encrypted connection
-        if (!stream_socket_enable_crypto(
-            $this->smtp_conn,
-            true,
-            $crypto_method
-        )) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Perform SMTP authentication.
-     * Must be run after hello().
-     * @see hello()
-     * @param string $username The user name
-     * @param string $password The password
-     * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2)
-     * @param string $realm The auth realm for NTLM
-     * @param string $workstation The auth workstation for NTLM
-     * @param null|OAuth $OAuth An optional OAuth instance (@see PHPMailerOAuth)
-     * @return bool True if successfully authenticated.* @access public
-     */
-    public function authenticate(
-        $username,
-        $password,
-        $authtype = null,
-        $realm = '',
-        $workstation = '',
-        $OAuth = null
-    ) {
-        if (!$this->server_caps) {
-            $this->setError('Authentication is not allowed before HELO/EHLO');
-            return false;
-        }
-
-        if (array_key_exists('EHLO', $this->server_caps)) {
-        // SMTP extensions are available. Let's try to find a proper authentication method
-
-            if (!array_key_exists('AUTH', $this->server_caps)) {
-                $this->setError('Authentication is not allowed at this stage');
-                // 'at this stage' means that auth may be allowed after the stage changes
-                // e.g. after STARTTLS
-                return false;
-            }
-
-            self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL);
-            self::edebug(
-                'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
-                self::DEBUG_LOWLEVEL
-            );
-
-            if (empty($authtype)) {
-                foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) {
-                    if (in_array($method, $this->server_caps['AUTH'])) {
-                        $authtype = $method;
-                        break;
-                    }
-                }
-                if (empty($authtype)) {
-                    $this->setError('No supported authentication methods found');
-                    return false;
-                }
-                self::edebug('Auth method selected: '.$authtype, self::DEBUG_LOWLEVEL);
-            }
-
-            if (!in_array($authtype, $this->server_caps['AUTH'])) {
-                $this->setError("The requested authentication method \"$authtype\" is not supported by the server");
-                return false;
-            }
-        } elseif (empty($authtype)) {
-            $authtype = 'LOGIN';
-        }
-        switch ($authtype) {
-            case 'PLAIN':
-                // Start authentication
-                if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
-                    return false;
-                }
-                // Send encoded username and password
-                if (!$this->sendCommand(
-                    'User & Password',
-                    base64_encode("\0" . $username . "\0" . $password),
-                    235
-                )
-                ) {
-                    return false;
-                }
-                break;
-            case 'LOGIN':
-                // Start authentication
-                if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
-                    return false;
-                }
-                if (!$this->sendCommand("Username", base64_encode($username), 334)) {
-                    return false;
-                }
-                if (!$this->sendCommand("Password", base64_encode($password), 235)) {
-                    return false;
-                }
-                break;
-            case 'XOAUTH2':
-                //If the OAuth Instance is not set. Can be a case when PHPMailer is used
-                //instead of PHPMailerOAuth
-                if (is_null($OAuth)) {
-                    return false;
-                }
-                $oauth = $OAuth->getOauth64();
-
-                // Start authentication
-                if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
-                    return false;
-                }
-                break;
-            case 'NTLM':
-                /*
-                 * ntlm_sasl_client.php
-                 * Bundled with Permission
-                 *
-                 * How to telnet in windows:
-                 * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx
-                 * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication
-                 */
-                require_once 'extras/ntlm_sasl_client.php';
-                $temp = new stdClass;
-                $ntlm_client = new ntlm_sasl_client_class;
-                //Check that functions are available
-                if (!$ntlm_client->initialize($temp)) {
-                    $this->setError($temp->error);
-                    $this->edebug(
-                        'You need to enable some modules in your php.ini file: '
-                        . $this->error['error'],
-                        self::DEBUG_CLIENT
-                    );
-                    return false;
-                }
-                //msg1
-                $msg1 = $ntlm_client->typeMsg1($realm, $workstation); //msg1
-
-                if (!$this->sendCommand(
-                    'AUTH NTLM',
-                    'AUTH NTLM ' . base64_encode($msg1),
-                    334
-                )
-                ) {
-                    return false;
-                }
-                //Though 0 based, there is a white space after the 3 digit number
-                //msg2
-                $challenge = substr($this->last_reply, 3);
-                $challenge = base64_decode($challenge);
-                $ntlm_res = $ntlm_client->NTLMResponse(
-                    substr($challenge, 24, 8),
-                    $password
-                );
-                //msg3
-                $msg3 = $ntlm_client->typeMsg3(
-                    $ntlm_res,
-                    $username,
-                    $realm,
-                    $workstation
-                );
-                // send encoded username
-                return $this->sendCommand('Username', base64_encode($msg3), 235);
-            case 'CRAM-MD5':
-                // Start authentication
-                if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
-                    return false;
-                }
-                // Get the challenge
-                $challenge = base64_decode(substr($this->last_reply, 4));
-
-                // Build the response
-                $response = $username . ' ' . $this->hmac($challenge, $password);
-
-                // send encoded credentials
-                return $this->sendCommand('Username', base64_encode($response), 235);
-            default:
-                $this->setError("Authentication method \"$authtype\" is not supported");
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * Calculate an MD5 HMAC hash.
-     * Works like hash_hmac('md5', $data, $key)
-     * in case that function is not available
-     * @param string $data The data to hash
-     * @param string $key  The key to hash with
-     * @access protected
-     * @return string
-     */
-    protected function hmac($data, $key)
-    {
-        if (function_exists('hash_hmac')) {
-            return hash_hmac('md5', $data, $key);
-        }
-
-        // The following borrowed from
-        // http://php.net/manual/en/function.mhash.php#27225
-
-        // RFC 2104 HMAC implementation for php.
-        // Creates an md5 HMAC.
-        // Eliminates the need to install mhash to compute a HMAC
-        // by Lance Rushing
-
-        $bytelen = 64; // byte length for md5
-        if (strlen($key) > $bytelen) {
-            $key = pack('H*', md5($key));
-        }
-        $key = str_pad($key, $bytelen, chr(0x00));
-        $ipad = str_pad('', $bytelen, chr(0x36));
-        $opad = str_pad('', $bytelen, chr(0x5c));
-        $k_ipad = $key ^ $ipad;
-        $k_opad = $key ^ $opad;
-
-        return md5($k_opad . pack('H*', md5($k_ipad . $data)));
-    }
-
-    /**
-     * Check connection state.
-     * @access public
-     * @return boolean True if connected.
-     */
-    public function connected()
-    {
-        if (is_resource($this->smtp_conn)) {
-            $sock_status = stream_get_meta_data($this->smtp_conn);
-            if ($sock_status['eof']) {
-                // The socket is valid but we are not connected
-                $this->edebug(
-                    'SMTP NOTICE: EOF caught while checking if connected',
-                    self::DEBUG_CLIENT
-                );
-                $this->close();
-                return false;
-            }
-            return true; // everything looks good
-        }
-        return false;
-    }
-
-    /**
-     * Close the socket and clean up the state of the class.
-     * Don't use this function without first trying to use QUIT.
-     * @see quit()
-     * @access public
-     * @return void
-     */
-    public function close()
-    {
-        $this->setError('');
-        $this->server_caps = null;
-        $this->helo_rply = null;
-        if (is_resource($this->smtp_conn)) {
-            // close the connection and cleanup
-            fclose($this->smtp_conn);
-            $this->smtp_conn = null; //Makes for cleaner serialization
-            $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
-        }
-    }
-
-    /**
-     * Send an SMTP DATA command.
-     * Issues a data command and sends the msg_data to the server,
-     * finializing the mail transaction. $msg_data is the message
-     * that is to be send with the headers. Each header needs to be
-     * on a single line followed by a <CRLF> with the message headers
-     * and the message body being separated by and additional <CRLF>.
-     * Implements rfc 821: DATA <CRLF>
-     * @param string $msg_data Message data to send
-     * @access public
-     * @return boolean
-     */
-    public function data($msg_data)
-    {
-        //This will use the standard timelimit
-        if (!$this->sendCommand('DATA', 'DATA', 354)) {
-            return false;
-        }
-
-        /* The server is ready to accept data!
-         * According to rfc821 we should not send more than 1000 characters on a single line (including the CRLF)
-         * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
-         * smaller lines to fit within the limit.
-         * We will also look for lines that start with a '.' and prepend an additional '.'.
-         * NOTE: this does not count towards line-length limit.
-         */
-
-        // Normalize line breaks before exploding
-        $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data));
-
-        /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
-         * of the first line (':' separated) does not contain a space then it _should_ be a header and we will
-         * process all lines before a blank line as headers.
-         */
-
-        $field = substr($lines[0], 0, strpos($lines[0], ':'));
-        $in_headers = false;
-        if (!empty($field) && strpos($field, ' ') === false) {
-            $in_headers = true;
-        }
-
-        foreach ($lines as $line) {
-            $lines_out = array();
-            if ($in_headers and $line == '') {
-                $in_headers = false;
-            }
-            //Break this line up into several smaller lines if it's too long
-            //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
-            while (isset($line[self::MAX_LINE_LENGTH])) {
-                //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
-                //so as to avoid breaking in the middle of a word
-                $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
-                //Deliberately matches both false and 0
-                if (!$pos) {
-                    //No nice break found, add a hard break
-                    $pos = self::MAX_LINE_LENGTH - 1;
-                    $lines_out[] = substr($line, 0, $pos);
-                    $line = substr($line, $pos);
-                } else {
-                    //Break at the found point
-                    $lines_out[] = substr($line, 0, $pos);
-                    //Move along by the amount we dealt with
-                    $line = substr($line, $pos + 1);
-                }
-                //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
-                if ($in_headers) {
-                    $line = "\t" . $line;
-                }
-            }
-            $lines_out[] = $line;
-
-            //Send the lines to the server
-            foreach ($lines_out as $line_out) {
-                //RFC2821 section 4.5.2
-                if (!empty($line_out) and $line_out[0] == '.') {
-                    $line_out = '.' . $line_out;
-                }
-                $this->client_send($line_out . self::CRLF);
-            }
-        }
-
-        //Message data has been sent, complete the command
-        //Increase timelimit for end of DATA command
-        $savetimelimit = $this->Timelimit;
-        $this->Timelimit = $this->Timelimit * 2;
-        $result = $this->sendCommand('DATA END', '.', 250);
-        //Restore timelimit
-        $this->Timelimit = $savetimelimit;
-        return $result;
-    }
-
-    /**
-     * Send an SMTP HELO or EHLO command.
-     * Used to identify the sending server to the receiving server.
-     * This makes sure that client and server are in a known state.
-     * Implements RFC 821: HELO <SP> <domain> <CRLF>
-     * and RFC 2821 EHLO.
-     * @param string $host The host name or IP to connect to
-     * @access public
-     * @return boolean
-     */
-    public function hello($host = '')
-    {
-        //Try extended hello first (RFC 2821)
-        return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host));
-    }
-
-    /**
-     * Send an SMTP HELO or EHLO command.
-     * Low-level implementation used by hello()
-     * @see hello()
-     * @param string $hello The HELO string
-     * @param string $host The hostname to say we are
-     * @access protected
-     * @return boolean
-     */
-    protected function sendHello($hello, $host)
-    {
-        $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
-        $this->helo_rply = $this->last_reply;
-        if ($noerror) {
-            $this->parseHelloFields($hello);
-        } else {
-            $this->server_caps = null;
-        }
-        return $noerror;
-    }
-
-    /**
-     * Parse a reply to HELO/EHLO command to discover server extensions.
-     * In case of HELO, the only parameter that can be discovered is a server name.
-     * @access protected
-     * @param string $type - 'HELO' or 'EHLO'
-     */
-    protected function parseHelloFields($type)
-    {
-        $this->server_caps = array();
-        $lines = explode("\n", $this->helo_rply);
-
-        foreach ($lines as $n => $s) {
-            //First 4 chars contain response code followed by - or space
-            $s = trim(substr($s, 4));
-            if (empty($s)) {
-                continue;
-            }
-            $fields = explode(' ', $s);
-            if (!empty($fields)) {
-                if (!$n) {
-                    $name = $type;
-                    $fields = $fields[0];
-                } else {
-                    $name = array_shift($fields);
-                    switch ($name) {
-                        case 'SIZE':
-                            $fields = ($fields ? $fields[0] : 0);
-                            break;
-                        case 'AUTH':
-                            if (!is_array($fields)) {
-                                $fields = array();
-                            }
-                            break;
-                        default:
-                            $fields = true;
-                    }
-                }
-                $this->server_caps[$name] = $fields;
-            }
-        }
-    }
-
-    /**
-     * Send an SMTP MAIL command.
-     * Starts a mail transaction from the email address specified in
-     * $from. Returns true if successful or false otherwise. If True
-     * the mail transaction is started and then one or more recipient
-     * commands may be called followed by a data command.
-     * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
-     * @param string $from Source address of this message
-     * @access public
-     * @return boolean
-     */
-    public function mail($from)
-    {
-        $useVerp = ($this->do_verp ? ' XVERP' : '');
-        return $this->sendCommand(
-            'MAIL FROM',
-            'MAIL FROM:<' . $from . '>' . $useVerp,
-            250
-        );
-    }
-
-    /**
-     * Send an SMTP QUIT command.
-     * Closes the socket if there is no error or the $close_on_error argument is true.
-     * Implements from rfc 821: QUIT <CRLF>
-     * @param boolean $close_on_error Should the connection close if an error occurs?
-     * @access public
-     * @return boolean
-     */
-    public function quit($close_on_error = true)
-    {
-        $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
-        $err = $this->error; //Save any error
-        if ($noerror or $close_on_error) {
-            $this->close();
-            $this->error = $err; //Restore any error from the quit command
-        }
-        return $noerror;
-    }
-
-    /**
-     * Send an SMTP RCPT command.
-     * Sets the TO argument to $toaddr.
-     * Returns true if the recipient was accepted false if it was rejected.
-     * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
-     * @param string $address The address the message is being sent to
-     * @access public
-     * @return boolean
-     */
-    public function recipient($address)
-    {
-        return $this->sendCommand(
-            'RCPT TO',
-            'RCPT TO:<' . $address . '>',
-            array(250, 251)
-        );
-    }
-
-    /**
-     * Send an SMTP RSET command.
-     * Abort any transaction that is currently in progress.
-     * Implements rfc 821: RSET <CRLF>
-     * @access public
-     * @return boolean True on success.
-     */
-    public function reset()
-    {
-        return $this->sendCommand('RSET', 'RSET', 250);
-    }
-
-    /**
-     * Send a command to an SMTP server and check its return code.
-     * @param string $command The command name - not sent to the server
-     * @param string $commandstring The actual command to send
-     * @param integer|array $expect One or more expected integer success codes
-     * @access protected
-     * @return boolean True on success.
-     */
-    protected function sendCommand($command, $commandstring, $expect)
-    {
-        if (!$this->connected()) {
-            $this->setError("Called $command without being connected");
-            return false;
-        }
-        //Reject line breaks in all commands
-        if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) {
-            $this->setError("Command '$command' contained line breaks");
-            return false;
-        }
-        $this->client_send($commandstring . self::CRLF);
-
-        $this->last_reply = $this->get_lines();
-        // Fetch SMTP code and possible error code explanation
-        $matches = array();
-        if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) {
-            $code = $matches[1];
-            $code_ex = (count($matches) > 2 ? $matches[2] : null);
-            // Cut off error code from each response line
-            $detail = preg_replace(
-                "/{$code}[ -]".($code_ex ? str_replace('.', '\\.', $code_ex).' ' : '')."/m",
-                '',
-                $this->last_reply
-            );
-        } else {
-            // Fall back to simple parsing if regex fails
-            $code = substr($this->last_reply, 0, 3);
-            $code_ex = null;
-            $detail = substr($this->last_reply, 4);
-        }
-
-        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
-
-        if (!in_array($code, (array)$expect)) {
-            $this->setError(
-                "$command command failed",
-                $detail,
-                $code,
-                $code_ex
-            );
-            $this->edebug(
-                'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
-                self::DEBUG_CLIENT
-            );
-            return false;
-        }
-
-        $this->setError('');
-        return true;
-    }
-
-    /**
-     * Send an SMTP SAML command.
-     * Starts a mail transaction from the email address specified in $from.
-     * Returns true if successful or false otherwise. If True
-     * the mail transaction is started and then one or more recipient
-     * commands may be called followed by a data command. This command
-     * will send the message to the users terminal if they are logged
-     * in and send them an email.
-     * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
-     * @param string $from The address the message is from
-     * @access public
-     * @return boolean
-     */
-    public function sendAndMail($from)
-    {
-        return $this->sendCommand('SAML', "SAML FROM:$from", 250);
-    }
-
-    /**
-     * Send an SMTP VRFY command.
-     * @param string $name The name to verify
-     * @access public
-     * @return boolean
-     */
-    public function verify($name)
-    {
-        return $this->sendCommand('VRFY', "VRFY $name", array(250, 251));
-    }
-
-    /**
-     * Send an SMTP NOOP command.
-     * Used to keep keep-alives alive, doesn't actually do anything
-     * @access public
-     * @return boolean
-     */
-    public function noop()
-    {
-        return $this->sendCommand('NOOP', 'NOOP', 250);
-    }
-
-    /**
-     * Send an SMTP TURN command.
-     * This is an optional command for SMTP that this class does not support.
-     * This method is here to make the RFC821 Definition complete for this class
-     * and _may_ be implemented in future
-     * Implements from rfc 821: TURN <CRLF>
-     * @access public
-     * @return boolean
-     */
-    public function turn()
-    {
-        $this->setError('The SMTP TURN command is not implemented');
-        $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);
-        return false;
-    }
-
-    /**
-     * Send raw data to the server.
-     * @param string $data The data to send
-     * @access public
-     * @return integer|boolean The number of bytes sent to the server or false on error
-     */
-    public function client_send($data)
-    {
-        $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT);
-        return fwrite($this->smtp_conn, $data);
-    }
-
-    /**
-     * Get the latest error.
-     * @access public
-     * @return array
-     */
-    public function getError()
-    {
-        return $this->error;
-    }
-
-    /**
-     * Get SMTP extensions available on the server
-     * @access public
-     * @return array|null
-     */
-    public function getServerExtList()
-    {
-        return $this->server_caps;
-    }
-
-    /**
-     * A multipurpose method
-     * The method works in three ways, dependent on argument value and current state
-     *   1. HELO/EHLO was not sent - returns null and set up $this->error
-     *   2. HELO was sent
-     *     $name = 'HELO': returns server name
-     *     $name = 'EHLO': returns boolean false
-     *     $name = any string: returns null and set up $this->error
-     *   3. EHLO was sent
-     *     $name = 'HELO'|'EHLO': returns server name
-     *     $name = any string: if extension $name exists, returns boolean True
-     *       or its options. Otherwise returns boolean False
-     * In other words, one can use this method to detect 3 conditions:
-     *  - null returned: handshake was not or we don't know about ext (refer to $this->error)
-     *  - false returned: the requested feature exactly not exists
-     *  - positive value returned: the requested feature exists
-     * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
-     * @return mixed
-     */
-    public function getServerExt($name)
-    {
-        if (!$this->server_caps) {
-            $this->setError('No HELO/EHLO was sent');
-            return null;
-        }
-
-        // the tight logic knot ;)
-        if (!array_key_exists($name, $this->server_caps)) {
-            if ($name == 'HELO') {
-                return $this->server_caps['EHLO'];
-            }
-            if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) {
-                return false;
-            }
-            $this->setError('HELO handshake was used. Client knows nothing about server extensions');
-            return null;
-        }
-
-        return $this->server_caps[$name];
-    }
-
-    /**
-     * Get the last reply from the server.
-     * @access public
-     * @return string
-     */
-    public function getLastReply()
-    {
-        return $this->last_reply;
-    }
-
-    /**
-     * Read the SMTP server's response.
-     * Either before eof or socket timeout occurs on the operation.
-     * With SMTP we can tell if we have more lines to read if the
-     * 4th character is '-' symbol. If it is a space then we don't
-     * need to read anything else.
-     * @access protected
-     * @return string
-     */
-    protected function get_lines()
-    {
-        // If the connection is bad, give up straight away
-        if (!is_resource($this->smtp_conn)) {
-            return '';
-        }
-        $data = '';
-        $endtime = 0;
-        stream_set_timeout($this->smtp_conn, $this->Timeout);
-        if ($this->Timelimit > 0) {
-            $endtime = time() + $this->Timelimit;
-        }
-        while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
-            $str = @fgets($this->smtp_conn, 515);
-            $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL);
-            $this->edebug("SMTP -> get_lines(): \$str is  \"$str\"", self::DEBUG_LOWLEVEL);
-            $data .= $str;
-            // If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen
-            if ((isset($str[3]) and $str[3] == ' ')) {
-                break;
-            }
-            // Timed-out? Log and break
-            $info = stream_get_meta_data($this->smtp_conn);
-            if ($info['timed_out']) {
-                $this->edebug(
-                    'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
-                    self::DEBUG_LOWLEVEL
-                );
-                break;
-            }
-            // Now check if reads took too long
-            if ($endtime and time() > $endtime) {
-                $this->edebug(
-                    'SMTP -> get_lines(): timelimit reached ('.
-                    $this->Timelimit . ' sec)',
-                    self::DEBUG_LOWLEVEL
-                );
-                break;
-            }
-        }
-        return $data;
-    }
-
-    /**
-     * Enable or disable VERP address generation.
-     * @param boolean $enabled
-     */
-    public function setVerp($enabled = false)
-    {
-        $this->do_verp = $enabled;
-    }
-
-    /**
-     * Get VERP address generation mode.
-     * @return boolean
-     */
-    public function getVerp()
-    {
-        return $this->do_verp;
-    }
-
-    /**
-     * Set error messages and codes.
-     * @param string $message The error message
-     * @param string $detail Further detail on the error
-     * @param string $smtp_code An associated SMTP error code
-     * @param string $smtp_code_ex Extended SMTP code
-     */
-    protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
-    {
-        $this->error = array(
-            'error' => $message,
-            'detail' => $detail,
-            'smtp_code' => $smtp_code,
-            'smtp_code_ex' => $smtp_code_ex
-        );
-    }
-
-    /**
-     * Set debug output method.
-     * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it.
-     */
-    public function setDebugOutput($method = 'echo')
-    {
-        $this->Debugoutput = $method;
-    }
-
-    /**
-     * Get debug output method.
-     * @return string
-     */
-    public function getDebugOutput()
-    {
-        return $this->Debugoutput;
-    }
-
-    /**
-     * Set debug output level.
-     * @param integer $level
-     */
-    public function setDebugLevel($level = 0)
-    {
-        $this->do_debug = $level;
-    }
-
-    /**
-     * Get debug output level.
-     * @return integer
-     */
-    public function getDebugLevel()
-    {
-        return $this->do_debug;
-    }
-
-    /**
-     * Set SMTP timeout.
-     * @param integer $timeout
-     */
-    public function setTimeout($timeout = 0)
-    {
-        $this->Timeout = $timeout;
-    }
-
-    /**
-     * Get SMTP timeout.
-     * @return integer
-     */
-    public function getTimeout()
-    {
-        return $this->Timeout;
-    }
-
-    /**
-     * Reports an error number and string.
-     * @param integer $errno The error number returned by PHP.
-     * @param string $errmsg The error message returned by PHP.
-     */
-    protected function errorHandler($errno, $errmsg)
-    {
-        $notice = 'Connection: Failed to connect to server.';
-        $this->setError(
-            $notice,
-            $errno,
-            $errmsg
-        );
-        $this->edebug(
-            $notice . ' Error number ' . $errno . '. "Error notice: ' . $errmsg,
-            self::DEBUG_CONNECTION
-        );
-    }
-
-       /**
-        * Will return the ID of the last smtp transaction based on a list of patterns provided
-        * in SMTP::$smtp_transaction_id_patterns.
-        * If no reply has been received yet, it will return null.
-        * If no pattern has been matched, it will return false.
-        * @return bool|null|string
-        */
-       public function getLastTransactionID()
-       {
-               $reply = $this->getLastReply();
-
-               if (empty($reply)) {
-                       return null;
-               }
-
-               foreach($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
-                       if(preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
-                               return $matches[1];
-                       }
-               }
-
-               return false;
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/composer.json b/www/plugins/facteur/phpmailer-php5/composer.json
deleted file mode 100644 (file)
index 1112fb9..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-    "name": "phpmailer/phpmailer",
-    "type": "library",
-    "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
-    "authors": [
-        {
-            "name": "Marcus Bointon",
-            "email": "phpmailer@synchromedia.co.uk"
-        },
-        {
-            "name": "Jim Jagielski",
-            "email": "jimjag@gmail.com"
-        },
-        {
-            "name": "Andy Prevost",
-            "email": "codeworxtech@users.sourceforge.net"
-        },
-        {
-            "name": "Brent R. Matzelle"
-        }
-    ],
-    "require": {
-        "php": ">=5.0.0"
-    },
-    "require-dev": {
-        "phpdocumentor/phpdocumentor": "*",
-        "phpunit/phpunit": "4.7.*"
-    },
-    "suggest": {
-        "league/oauth2-google": "Needed for Google XOAUTH2 authentication"
-    },
-    "autoload": {
-        "classmap": [
-            "class.phpmailer.php",
-            "class.phpmaileroauth.php",
-            "class.phpmaileroauthgoogle.php",
-            "class.smtp.php",
-            "class.pop3.php",
-            "extras/EasyPeasyICS.php",
-            "extras/ntlm_sasl_client.php"
-        ]
-    },
-    "license": "LGPL-2.1"
-}
diff --git a/www/plugins/facteur/phpmailer-php5/composer.lock b/www/plugins/facteur/phpmailer-php5/composer.lock
deleted file mode 100644 (file)
index 9edbf55..0000000
+++ /dev/null
@@ -1,3576 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
-        "This file is @generated automatically"
-    ],
-    "hash": "ca5abc72444d9608a35c39f9064c139b",
-    "content-hash": "8b66ed71ae9ca8cd0258c814615d624f",
-    "packages": [],
-    "packages-dev": [
-        {
-            "name": "cilex/cilex",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Cilex/Cilex.git",
-                "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Cilex/Cilex/zipball/7acd965a609a56d0345e8b6071c261fbdb926cb5",
-                "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5",
-                "shasum": ""
-            },
-            "require": {
-                "cilex/console-service-provider": "1.*",
-                "php": ">=5.3.3",
-                "pimple/pimple": "~1.0",
-                "symfony/finder": "~2.1",
-                "symfony/process": "~2.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "3.7.*",
-                "symfony/validator": "~2.1"
-            },
-            "suggest": {
-                "monolog/monolog": ">=1.0.0",
-                "symfony/validator": ">=1.0.0",
-                "symfony/yaml": ">=1.0.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Cilex": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "mike.vanriel@naenius.com"
-                }
-            ],
-            "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components",
-            "homepage": "http://cilex.github.com",
-            "keywords": [
-                "cli",
-                "microframework"
-            ],
-            "time": "2014-03-29 14:03:13"
-        },
-        {
-            "name": "cilex/console-service-provider",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Cilex/console-service-provider.git",
-                "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/25ee3d1875243d38e1a3448ff94bdf944f70d24e",
-                "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "pimple/pimple": "1.*@dev",
-                "symfony/console": "~2.1"
-            },
-            "require-dev": {
-                "cilex/cilex": "1.*@dev",
-                "silex/silex": "1.*@dev"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Cilex\\Provider\\Console": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Beau Simensen",
-                    "email": "beau@dflydev.com",
-                    "homepage": "http://beausimensen.com"
-                },
-                {
-                    "name": "Mike van Riel",
-                    "email": "mike.vanriel@naenius.com"
-                }
-            ],
-            "description": "Console Service Provider",
-            "keywords": [
-                "cilex",
-                "console",
-                "pimple",
-                "service-provider",
-                "silex"
-            ],
-            "time": "2012-12-19 10:50:58"
-        },
-        {
-            "name": "container-interop/container-interop",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/container-interop/container-interop.git",
-                "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e",
-                "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e",
-                "shasum": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Interop\\Container\\": "src/Interop/Container/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
-            "time": "2014-12-30 15:22:37"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "v1.2.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535",
-                "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "php": ">=5.3.2"
-            },
-            "require-dev": {
-                "doctrine/cache": "1.*",
-                "phpunit/phpunit": "4.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Annotations\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "time": "2015-08-31 12:32:49"
-        },
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3,<8.0-DEV"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2015-06-14 21:17:01"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Lexer\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "lexer",
-                "parser"
-            ],
-            "time": "2014-09-09 13:34:57"
-        },
-        {
-            "name": "erusev/parsedown",
-            "version": "1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/erusev/parsedown.git",
-                "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/erusev/parsedown/zipball/3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7",
-                "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7",
-                "shasum": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Parsedown": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Emanuil Rusev",
-                    "email": "hello@erusev.com",
-                    "homepage": "http://erusev.com"
-                }
-            ],
-            "description": "Parser for Markdown.",
-            "homepage": "http://parsedown.org",
-            "keywords": [
-                "markdown",
-                "parser"
-            ],
-            "time": "2015-10-04 16:44:32"
-        },
-        {
-            "name": "herrera-io/json",
-            "version": "1.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/kherge-abandoned/php-json.git",
-                "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/kherge-abandoned/php-json/zipball/60c696c9370a1e5136816ca557c17f82a6fa83f1",
-                "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "justinrainbow/json-schema": ">=1.0,<2.0-dev",
-                "php": ">=5.3.3",
-                "seld/jsonlint": ">=1.0,<2.0-dev"
-            },
-            "require-dev": {
-                "herrera-io/phpunit-test-case": "1.*",
-                "mikey179/vfsstream": "1.1.0",
-                "phpunit/phpunit": "3.7.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/lib/json_version.php"
-                ],
-                "psr-0": {
-                    "Herrera\\Json": "src/lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kevin Herrera",
-                    "email": "kevin@herrera.io",
-                    "homepage": "http://kevin.herrera.io/",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A library for simplifying JSON linting and validation.",
-            "homepage": "http://herrera-io.github.com/php-json",
-            "keywords": [
-                "json",
-                "lint",
-                "schema",
-                "validate"
-            ],
-            "time": "2013-10-30 16:51:34"
-        },
-        {
-            "name": "herrera-io/phar-update",
-            "version": "1.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/kherge-abandoned/php-phar-update.git",
-                "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/kherge-abandoned/php-phar-update/zipball/00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b",
-                "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b",
-                "shasum": ""
-            },
-            "require": {
-                "herrera-io/json": "1.*",
-                "kherge/version": "1.*",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "herrera-io/phpunit-test-case": "1.*",
-                "mikey179/vfsstream": "1.1.0",
-                "phpunit/phpunit": "3.7.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/lib/constants.php"
-                ],
-                "psr-0": {
-                    "Herrera\\Phar\\Update": "src/lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kevin Herrera",
-                    "email": "kevin@herrera.io",
-                    "homepage": "http://kevin.herrera.io/",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A library for self-updating Phars.",
-            "homepage": "http://herrera-io.github.com/php-phar-update",
-            "keywords": [
-                "phar",
-                "update"
-            ],
-            "time": "2013-10-30 17:23:01"
-        },
-        {
-            "name": "jms/metadata",
-            "version": "1.5.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/schmittjoh/metadata.git",
-                "reference": "22b72455559a25777cfd28c4ffda81ff7639f353"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/22b72455559a25777cfd28c4ffda81ff7639f353",
-                "reference": "22b72455559a25777cfd28c4ffda81ff7639f353",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "require-dev": {
-                "doctrine/cache": "~1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.5.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Metadata\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache"
-            ],
-            "authors": [
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com",
-                    "homepage": "https://github.com/schmittjoh",
-                    "role": "Developer of wrapped JMSSerializerBundle"
-                }
-            ],
-            "description": "Class/method/property metadata management in PHP",
-            "keywords": [
-                "annotations",
-                "metadata",
-                "xml",
-                "yaml"
-            ],
-            "time": "2014-07-12 07:13:19"
-        },
-        {
-            "name": "jms/parser-lib",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/schmittjoh/parser-lib.git",
-                "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d",
-                "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d",
-                "shasum": ""
-            },
-            "require": {
-                "phpoption/phpoption": ">=0.9,<2.0-dev"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "JMS\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache2"
-            ],
-            "description": "A library for easily creating recursive-descent parsers.",
-            "time": "2012-11-18 18:08:43"
-        },
-        {
-            "name": "jms/serializer",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/schmittjoh/serializer.git",
-                "reference": "fe13a1f993ea3456e195b7820692f2eb2b6bbb48"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/fe13a1f993ea3456e195b7820692f2eb2b6bbb48",
-                "reference": "fe13a1f993ea3456e195b7820692f2eb2b6bbb48",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "1.*",
-                "doctrine/instantiator": "~1.0.3",
-                "jms/metadata": "~1.1",
-                "jms/parser-lib": "1.*",
-                "php": ">=5.4.0",
-                "phpcollection/phpcollection": "~0.1"
-            },
-            "conflict": {
-                "twig/twig": "<1.12"
-            },
-            "require-dev": {
-                "doctrine/orm": "~2.1",
-                "doctrine/phpcr-odm": "~1.0.1",
-                "jackalope/jackalope-doctrine-dbal": "1.0.*",
-                "phpunit/phpunit": "~4.0",
-                "propel/propel1": "~1.7",
-                "symfony/filesystem": "2.*",
-                "symfony/form": "~2.1",
-                "symfony/translation": "~2.0",
-                "symfony/validator": "~2.0",
-                "symfony/yaml": "2.*",
-                "twig/twig": "~1.12|~2.0"
-            },
-            "suggest": {
-                "symfony/yaml": "Required if you'd like to serialize data to YAML format."
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "JMS\\Serializer": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache2"
-            ],
-            "authors": [
-                {
-                    "name": "Johannes M. Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.",
-            "homepage": "http://jmsyst.com/libs/serializer",
-            "keywords": [
-                "deserialization",
-                "jaxb",
-                "json",
-                "serialization",
-                "xml"
-            ],
-            "time": "2015-10-27 09:24:41"
-        },
-        {
-            "name": "justinrainbow/json-schema",
-            "version": "1.6.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/cc84765fb7317f6b07bd8ac78364747f95b86341",
-                "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.29"
-            },
-            "require-dev": {
-                "json-schema/json-schema-test-suite": "1.1.0",
-                "phpdocumentor/phpdocumentor": "~2",
-                "phpunit/phpunit": "~3.7"
-            },
-            "bin": [
-                "bin/validate-json"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
-                },
-                {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
-                }
-            ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
-            "keywords": [
-                "json",
-                "schema"
-            ],
-            "time": "2016-01-25 15:43:01"
-        },
-        {
-            "name": "kherge/version",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/kherge-abandoned/Version.git",
-                "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/kherge-abandoned/Version/zipball/f07cf83f8ce533be8f93d2893d96d674bbeb7e30",
-                "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "KevinGH\\Version": "src/lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kevin Herrera",
-                    "email": "me@kevingh.com",
-                    "homepage": "http://www.kevingh.com/"
-                }
-            ],
-            "description": "A parsing and comparison library for semantic versioning.",
-            "homepage": "http://github.com/kherge/Version",
-            "time": "2012-08-16 17:13:03"
-        },
-        {
-            "name": "monolog/monolog",
-            "version": "1.19.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5f56ed5212dc509c8dc8caeba2715732abb32dbf",
-                "reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0",
-                "psr/log": "~1.0"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0.0"
-            },
-            "require-dev": {
-                "aws/aws-sdk-php": "^2.4.9",
-                "doctrine/couchdb": "~1.0@dev",
-                "graylog2/gelf-php": "~1.0",
-                "jakub-onderka/php-parallel-lint": "0.9",
-                "php-amqplib/php-amqplib": "~2.4",
-                "php-console/php-console": "^3.1.3",
-                "phpunit/phpunit": "~4.5",
-                "phpunit/phpunit-mock-objects": "2.3.0",
-                "raven/raven": "^0.13",
-                "ruflin/elastica": ">=0.90 <3.0",
-                "swiftmailer/swiftmailer": "~5.3"
-            },
-            "suggest": {
-                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
-                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
-                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
-                "ext-mongo": "Allow sending log messages to a MongoDB server",
-                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
-                "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
-                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
-                "php-console/php-console": "Allow sending log messages to Google Chrome",
-                "raven/raven": "Allow sending log messages to a Sentry server",
-                "rollbar/rollbar": "Allow sending log messages to Rollbar",
-                "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Monolog\\": "src/Monolog"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
-            "homepage": "http://github.com/Seldaek/monolog",
-            "keywords": [
-                "log",
-                "logging",
-                "psr-3"
-            ],
-            "time": "2016-04-12 18:29:35"
-        },
-        {
-            "name": "nikic/php-parser",
-            "version": "v1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51",
-                "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "lib/bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov"
-                }
-            ],
-            "description": "A PHP parser written in PHP",
-            "keywords": [
-                "parser",
-                "php"
-            ],
-            "time": "2015-09-19 14:15:08"
-        },
-        {
-            "name": "phpcollection/phpcollection",
-            "version": "0.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/schmittjoh/php-collection.git",
-                "reference": "b8bf55a0a929ca43b01232b36719f176f86c7e83"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/b8bf55a0a929ca43b01232b36719f176f86c7e83",
-                "reference": "b8bf55a0a929ca43b01232b36719f176f86c7e83",
-                "shasum": ""
-            },
-            "require": {
-                "phpoption/phpoption": "1.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "0.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "PhpCollection": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache2"
-            ],
-            "authors": [
-                {
-                    "name": "Johannes M. Schmitt",
-                    "email": "schmittjoh@gmail.com",
-                    "homepage": "http://jmsyst.com",
-                    "role": "Developer of wrapped JMSSerializerBundle"
-                }
-            ],
-            "description": "General-Purpose Collection Library for PHP",
-            "keywords": [
-                "collection",
-                "list",
-                "map",
-                "sequence",
-                "set"
-            ],
-            "time": "2014-03-11 13:46:42"
-        },
-        {
-            "name": "phpdocumentor/fileset",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/Fileset.git",
-                "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/Fileset/zipball/bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0",
-                "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "symfony/finder": "~2.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~3.7"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "phpDocumentor": [
-                        "src/",
-                        "tests/unit/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Fileset component for collecting a set of files given directories and file paths",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "files",
-                "fileset",
-                "phpdoc"
-            ],
-            "time": "2013-08-06 21:07:42"
-        },
-        {
-            "name": "phpdocumentor/graphviz",
-            "version": "1.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/GraphViz.git",
-                "reference": "a906a90a9f230535f25ea31caf81b2323956283f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/GraphViz/zipball/a906a90a9f230535f25ea31caf81b2323956283f",
-                "reference": "a906a90a9f230535f25ea31caf81b2323956283f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "phpDocumentor": [
-                        "src/",
-                        "tests/unit"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "mike.vanriel@naenius.com"
-                }
-            ],
-            "time": "2016-02-02 13:00:08"
-        },
-        {
-            "name": "phpdocumentor/phpdocumentor",
-            "version": "v2.9.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/phpDocumentor2.git",
-                "reference": "be607da0eef9b9249c43c5b4820d25d631c73667"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/phpDocumentor2/zipball/be607da0eef9b9249c43c5b4820d25d631c73667",
-                "reference": "be607da0eef9b9249c43c5b4820d25d631c73667",
-                "shasum": ""
-            },
-            "require": {
-                "cilex/cilex": "~1.0",
-                "erusev/parsedown": "~1.0",
-                "herrera-io/phar-update": "1.0.3",
-                "jms/serializer": ">=0.12",
-                "monolog/monolog": "~1.6",
-                "php": ">=5.3.3",
-                "phpdocumentor/fileset": "~1.0",
-                "phpdocumentor/graphviz": "~1.0",
-                "phpdocumentor/reflection": "^3.0",
-                "phpdocumentor/reflection-docblock": "~2.0",
-                "symfony/config": "~2.3",
-                "symfony/console": "~2.3",
-                "symfony/event-dispatcher": "~2.1",
-                "symfony/process": "~2.0",
-                "symfony/stopwatch": "~2.3",
-                "symfony/validator": "~2.2",
-                "twig/twig": "~1.3",
-                "zendframework/zend-cache": "~2.1",
-                "zendframework/zend-config": "~2.1",
-                "zendframework/zend-filter": "~2.1",
-                "zendframework/zend-i18n": "~2.1",
-                "zendframework/zend-serializer": "~2.1",
-                "zendframework/zend-servicemanager": "~2.1",
-                "zendframework/zend-stdlib": "~2.1",
-                "zetacomponents/document": ">=1.3.1"
-            },
-            "require-dev": {
-                "behat/behat": "~3.0",
-                "mikey179/vfsstream": "~1.2",
-                "mockery/mockery": "~0.9@dev",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~1.4",
-                "symfony/expression-language": "~2.4"
-            },
-            "suggest": {
-                "ext-twig": "Enabling the twig extension improves the generation of twig based templates.",
-                "ext-xslcache": "Enabling the XSLCache extension improves the generation of xml based templates."
-            },
-            "bin": [
-                "bin/phpdoc.php",
-                "bin/phpdoc"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-develop": "2.9-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "phpDocumentor": [
-                        "src/",
-                        "tests/unit/"
-                    ],
-                    "Cilex\\Provider": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Documentation Generator for PHP",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "api",
-                "application",
-                "dga",
-                "documentation",
-                "phpdoc"
-            ],
-            "time": "2016-05-22 09:50:56"
-        },
-        {
-            "name": "phpdocumentor/reflection",
-            "version": "3.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/Reflection.git",
-                "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d",
-                "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^1.0",
-                "php": ">=5.3.3",
-                "phpdocumentor/reflection-docblock": "~2.0",
-                "psr/log": "~1.0"
-            },
-            "require-dev": {
-                "behat/behat": "~2.4",
-                "mockery/mockery": "~0.8",
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "phpDocumentor": [
-                        "src/",
-                        "tests/unit/",
-                        "tests/mocks/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Reflection library to do Static Analysis for PHP Projects",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
-            ],
-            "time": "2016-05-21 08:42:32"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "2.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
-                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "suggest": {
-                "dflydev/markdown": "~1.0",
-                "erusev/parsedown": "~1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "phpDocumentor": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "mike.vanriel@naenius.com"
-                }
-            ],
-            "time": "2015-02-03 12:10:50"
-        },
-        {
-            "name": "phpoption/phpoption",
-            "version": "1.5.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/schmittjoh/php-option.git",
-                "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed",
-                "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "4.7.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "PhpOption\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache2"
-            ],
-            "authors": [
-                {
-                    "name": "Johannes M. Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Option Type for PHP",
-            "keywords": [
-                "language",
-                "option",
-                "php",
-                "type"
-            ],
-            "time": "2015-07-25 16:39:46"
-        },
-        {
-            "name": "phpspec/prophecy",
-            "version": "v1.6.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "58a8137754bc24b25740d4281399a4a3596058e0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0",
-                "reference": "58a8137754bc24b25740d4281399a4a3596058e0",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
-                "sebastian/comparator": "^1.1",
-                "sebastian/recursion-context": "^1.0"
-            },
-            "require-dev": {
-                "phpspec/phpspec": "^2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte@gmail.com"
-                }
-            ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
-            "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
-            ],
-            "time": "2016-06-07 08:13:47"
-        },
-        {
-            "name": "phpunit/php-code-coverage",
-            "version": "2.2.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "phpunit/php-file-iterator": "~1.3",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-token-stream": "~1.3",
-                "sebastian/environment": "^1.3.2",
-                "sebastian/version": "~1.0"
-            },
-            "require-dev": {
-                "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4"
-            },
-            "suggest": {
-                "ext-dom": "*",
-                "ext-xdebug": ">=2.2.1",
-                "ext-xmlwriter": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
-            "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
-            ],
-            "time": "2015-10-06 15:47:00"
-        },
-        {
-            "name": "phpunit/php-file-iterator",
-            "version": "1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
-                "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
-            "time": "2015-06-21 13:08:43"
-        },
-        {
-            "name": "phpunit/php-text-template",
-            "version": "1.2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-            "keywords": [
-                "template"
-            ],
-            "time": "2015-06-21 13:50:34"
-        },
-        {
-            "name": "phpunit/php-timer",
-            "version": "1.0.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
-                "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4|~5"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
-            "keywords": [
-                "timer"
-            ],
-            "time": "2016-05-12 18:03:57"
-        },
-        {
-            "name": "phpunit/php-token-stream",
-            "version": "1.4.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
-                "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Wrapper around PHP's tokenizer extension.",
-            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-            "keywords": [
-                "tokenizer"
-            ],
-            "time": "2015-09-15 10:49:45"
-        },
-        {
-            "name": "phpunit/phpunit",
-            "version": "4.7.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "9b97f9d807b862c2de2a36e86690000801c85724"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9b97f9d807b862c2de2a36e86690000801c85724",
-                "reference": "9b97f9d807b862c2de2a36e86690000801c85724",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=5.3.3",
-                "phpspec/prophecy": "~1.3,>=1.3.1",
-                "phpunit/php-code-coverage": "~2.1",
-                "phpunit/php-file-iterator": "~1.4",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-timer": ">=1.0.6",
-                "phpunit/phpunit-mock-objects": "~2.3",
-                "sebastian/comparator": "~1.1",
-                "sebastian/diff": "~1.2",
-                "sebastian/environment": "~1.2",
-                "sebastian/exporter": "~1.2",
-                "sebastian/global-state": "~1.0",
-                "sebastian/version": "~1.0",
-                "symfony/yaml": "~2.1|~3.0"
-            },
-            "suggest": {
-                "phpunit/php-invoker": "~1.1"
-            },
-            "bin": [
-                "phpunit"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.7.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
-            "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
-            ],
-            "time": "2015-07-13 11:28:34"
-        },
-        {
-            "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": ">=5.3.3",
-                "phpunit/php-text-template": "~1.2",
-                "sebastian/exporter": "~1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "suggest": {
-                "ext-soap": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Mock Object library for PHPUnit",
-            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
-            "keywords": [
-                "mock",
-                "xunit"
-            ],
-            "time": "2015-10-02 06:51:40"
-        },
-        {
-            "name": "pimple/pimple",
-            "version": "v1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/silexphp/Pimple.git",
-                "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d",
-                "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Pimple": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com",
-                    "homepage": "http://fabien.potencier.org",
-                    "role": "Lead Developer"
-                }
-            ],
-            "description": "Pimple is a simple Dependency Injection Container for PHP 5.3",
-            "homepage": "http://pimple.sensiolabs.org",
-            "keywords": [
-                "container",
-                "dependency injection"
-            ],
-            "time": "2013-11-22 08:30:29"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
-                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
-                "shasum": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Psr\\Log\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "time": "2012-12-21 11:40:51"
-        },
-        {
-            "name": "sebastian/comparator",
-            "version": "1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
-                "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "sebastian/diff": "~1.2",
-                "sebastian/exporter": "~1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "http://www.github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
-            "time": "2015-07-26 15:48:44"
-        },
-        {
-            "name": "sebastian/diff",
-            "version": "1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
-                "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Diff implementation",
-            "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff"
-            ],
-            "time": "2015-12-08 07:14:41"
-        },
-        {
-            "name": "sebastian/environment",
-            "version": "1.3.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716",
-                "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "time": "2016-05-17 03:18:57"
-        },
-        {
-            "name": "sebastian/exporter",
-            "version": "1.2.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "sebastian/recursion-context": "~1.0"
-            },
-            "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2016-06-17 09:04:28"
-        },
-        {
-            "name": "sebastian/global-state",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "suggest": {
-                "ext-uopz": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
-            "keywords": [
-                "global state"
-            ],
-            "time": "2015-10-12 03:26:01"
-        },
-        {
-            "name": "sebastian/recursion-context",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
-                "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2015-11-11 19:50:13"
-        },
-        {
-            "name": "sebastian/version",
-            "version": "1.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "shasum": ""
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21 13:59:46"
-        },
-        {
-            "name": "seld/jsonlint",
-            "version": "1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "66834d3e3566bb5798db7294619388786ae99394"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/66834d3e3566bb5798db7294619388786ae99394",
-                "reference": "66834d3e3566bb5798db7294619388786ae99394",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3 || ^7.0"
-            },
-            "bin": [
-                "bin/jsonlint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "time": "2015-11-21 02:21:41"
-        },
-        {
-            "name": "symfony/config",
-            "version": "v2.8.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/config.git",
-                "reference": "a2edd59c2163c65747fc3f35d132b5a39266bd05"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/a2edd59c2163c65747fc3f35d132b5a39266bd05",
-                "reference": "a2edd59c2163c65747fc3f35d132b5a39266bd05",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9",
-                "symfony/filesystem": "~2.3|~3.0.0"
-            },
-            "suggest": {
-                "symfony/yaml": "To use the yaml reference dumper"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Config\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Config Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-06 11:11:27"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v2.8.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3",
-                "reference": "5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/event-dispatcher": "~2.1|~3.0.0",
-                "symfony/process": "~2.1|~3.0.0"
-            },
-            "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Console Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-06 15:06:25"
-        },
-        {
-            "name": "symfony/event-dispatcher",
-            "version": "v2.8.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "2a6b8713f8bdb582058cfda463527f195b066110"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2a6b8713f8bdb582058cfda463527f195b066110",
-                "reference": "2a6b8713f8bdb582058cfda463527f195b066110",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.0,>=2.0.5|~3.0.0",
-                "symfony/dependency-injection": "~2.6|~3.0.0",
-                "symfony/expression-language": "~2.6|~3.0.0",
-                "symfony/stopwatch": "~2.3|~3.0.0"
-            },
-            "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony EventDispatcher Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-06 11:11:27"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v3.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "74fec3511b62cb934b64bce1d96f06fffa4beafd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/74fec3511b62cb934b64bce1d96f06fffa4beafd",
-                "reference": "74fec3511b62cb934b64bce1d96f06fffa4beafd",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5.9"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-04-12 18:09:53"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v2.8.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "3ec095fab1800222732ca522a95dce8fa124007b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/3ec095fab1800222732ca522a95dce8fa124007b",
-                "reference": "3ec095fab1800222732ca522a95dce8fa124007b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-06 11:11:27"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "dff51f72b0706335131b00a7f49606168c582594"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594",
-                "reference": "dff51f72b0706335131b00a7f49606168c582594",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2016-05-18 14:26:46"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v2.8.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "115347d00c342198cdc52a7bd8bc15b5ab43500c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/115347d00c342198cdc52a7bd8bc15b5ab43500c",
-                "reference": "115347d00c342198cdc52a7bd8bc15b5ab43500c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Process Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-06 11:11:27"
-        },
-        {
-            "name": "symfony/stopwatch",
-            "version": "v2.8.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "5e628055488bcc42dbace3af65be435d094e37e4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5e628055488bcc42dbace3af65be435d094e37e4",
-                "reference": "5e628055488bcc42dbace3af65be435d094e37e4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Stopwatch\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Stopwatch Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-06 11:11:27"
-        },
-        {
-            "name": "symfony/translation",
-            "version": "v3.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/translation.git",
-                "reference": "2b0aacaa613c0ec1ad8046f972d8abdcb19c1db7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/2b0aacaa613c0ec1ad8046f972d8abdcb19c1db7",
-                "reference": "2b0aacaa613c0ec1ad8046f972d8abdcb19c1db7",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5.9",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/config": "<2.8"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.8|~3.0",
-                "symfony/intl": "~2.8|~3.0",
-                "symfony/yaml": "~2.8|~3.0"
-            },
-            "suggest": {
-                "psr/log": "To use logging capability in translator",
-                "symfony/config": "",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Translation\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Translation Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-06 11:33:26"
-        },
-        {
-            "name": "symfony/validator",
-            "version": "v2.8.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/validator.git",
-                "reference": "4c8f9fd8e2150dbc4745ef13378e690588365df0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/validator/zipball/4c8f9fd8e2150dbc4745ef13378e690588365df0",
-                "reference": "4c8f9fd8e2150dbc4745ef13378e690588365df0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/translation": "~2.4|~3.0.0"
-            },
-            "require-dev": {
-                "doctrine/annotations": "~1.0",
-                "doctrine/cache": "~1.0",
-                "egulias/email-validator": "~1.2,>=1.2.1",
-                "symfony/config": "~2.2|~3.0.0",
-                "symfony/expression-language": "~2.4|~3.0.0",
-                "symfony/http-foundation": "~2.1|~3.0.0",
-                "symfony/intl": "~2.7.4|~2.8|~3.0.0",
-                "symfony/property-access": "~2.3|~3.0.0",
-                "symfony/yaml": "~2.0,>=2.0.5|~3.0.0"
-            },
-            "suggest": {
-                "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
-                "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
-                "egulias/email-validator": "Strict (RFC compliant) email validation",
-                "symfony/config": "",
-                "symfony/expression-language": "For using the 2.4 Expression validator",
-                "symfony/http-foundation": "",
-                "symfony/intl": "",
-                "symfony/property-access": "For using the 2.4 Validator API",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Validator\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Validator Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-04-14 08:48:44"
-        },
-        {
-            "name": "symfony/yaml",
-            "version": "v3.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/c5a7e7fc273c758b92b85dcb9c46149ccda89623",
-                "reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5.9"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Yaml Component",
-            "homepage": "https://symfony.com",
-            "time": "2016-06-14 11:18:07"
-        },
-        {
-            "name": "twig/twig",
-            "version": "v1.24.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/twigphp/Twig.git",
-                "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/3566d311a92aae4deec6e48682dc5a4528c4a512",
-                "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.2.7"
-            },
-            "require-dev": {
-                "symfony/debug": "~2.7",
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.24-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Twig_": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com",
-                    "homepage": "http://fabien.potencier.org",
-                    "role": "Lead Developer"
-                },
-                {
-                    "name": "Armin Ronacher",
-                    "email": "armin.ronacher@active-4.com",
-                    "role": "Project Founder"
-                },
-                {
-                    "name": "Twig Team",
-                    "homepage": "http://twig.sensiolabs.org/contributors",
-                    "role": "Contributors"
-                }
-            ],
-            "description": "Twig, the flexible, fast, and secure template language for PHP",
-            "homepage": "http://twig.sensiolabs.org",
-            "keywords": [
-                "templating"
-            ],
-            "time": "2016-05-30 09:11:59"
-        },
-        {
-            "name": "zendframework/zend-cache",
-            "version": "2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-cache.git",
-                "reference": "2c68def8f96ce842d2f2a9a69e2f3508c2f5312d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-cache/zipball/2c68def8f96ce842d2f2a9a69e2f3508c2f5312d",
-                "reference": "2c68def8f96ce842d2f2a9a69e2f3508c2f5312d",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpbench/phpbench": "^0.10.0",
-                "phpunit/phpunit": "^4.5",
-                "zendframework/zend-serializer": "^2.6",
-                "zendframework/zend-session": "^2.6.2"
-            },
-            "suggest": {
-                "ext-apc": "APC or compatible extension, to use the APC storage adapter",
-                "ext-apcu": "APCU >= 5.1.0, to use the APCu storage adapter",
-                "ext-dba": "DBA, to use the DBA storage adapter",
-                "ext-memcache": "Memcache >= 2.0.0 to use the Memcache storage adapter",
-                "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
-                "ext-mongo": "Mongo, to use MongoDb storage adapter",
-                "ext-redis": "Redis, to use Redis storage adapter",
-                "ext-wincache": "WinCache, to use the WinCache storage adapter",
-                "ext-xcache": "XCache, to use the XCache storage adapter",
-                "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement",
-                "zendframework/zend-serializer": "Zend\\Serializer component",
-                "zendframework/zend-session": "Zend\\Session component"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev",
-                    "dev-develop": "2.8-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Cache",
-                    "config-provider": "Zend\\Cache\\ConfigProvider"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Cache\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "provides a generic way to cache any data",
-            "homepage": "https://github.com/zendframework/zend-cache",
-            "keywords": [
-                "cache",
-                "zf2"
-            ],
-            "time": "2016-05-12 21:47:55"
-        },
-        {
-            "name": "zendframework/zend-config",
-            "version": "2.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-config.git",
-                "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-config/zipball/2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d",
-                "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "zendframework/zend-filter": "^2.6",
-                "zendframework/zend-i18n": "^2.5",
-                "zendframework/zend-json": "^2.6.1",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3"
-            },
-            "suggest": {
-                "zendframework/zend-filter": "Zend\\Filter component",
-                "zendframework/zend-i18n": "Zend\\I18n component",
-                "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.6-dev",
-                    "dev-develop": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Config\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "provides a nested object property based user interface for accessing this configuration data within application code",
-            "homepage": "https://github.com/zendframework/zend-config",
-            "keywords": [
-                "config",
-                "zf2"
-            ],
-            "time": "2016-02-04 23:01:10"
-        },
-        {
-            "name": "zendframework/zend-eventmanager",
-            "version": "3.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-eventmanager.git",
-                "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/5c80bdee0e952be112dcec0968bad770082c3a6e",
-                "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0"
-            },
-            "require-dev": {
-                "athletic/athletic": "^0.1",
-                "container-interop/container-interop": "^1.1.0",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "^2.0",
-                "zendframework/zend-stdlib": "^2.7.3 || ^3.0"
-            },
-            "suggest": {
-                "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature",
-                "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev",
-                    "dev-develop": "3.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\EventManager\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "Trigger and listen to events within a PHP application",
-            "homepage": "https://github.com/zendframework/zend-eventmanager",
-            "keywords": [
-                "event",
-                "eventmanager",
-                "events",
-                "zf2"
-            ],
-            "time": "2016-02-18 20:53:00"
-        },
-        {
-            "name": "zendframework/zend-filter",
-            "version": "2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-filter.git",
-                "reference": "84c50246428efb0a1e52868e162dab3e149d5b80"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/84c50246428efb0a1e52868e162dab3e149d5b80",
-                "reference": "84c50246428efb0a1e52868e162dab3e149d5b80",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "pear/archive_tar": "^1.4",
-                "phpunit/phpunit": "~4.0",
-                "zendframework/zend-crypt": "^2.6",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-uri": "^2.5"
-            },
-            "suggest": {
-                "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters",
-                "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality",
-                "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev",
-                    "dev-develop": "2.8-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Filter",
-                    "config-provider": "Zend\\Filter\\ConfigProvider"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Filter\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "provides a set of commonly needed data filters",
-            "homepage": "https://github.com/zendframework/zend-filter",
-            "keywords": [
-                "filter",
-                "zf2"
-            ],
-            "time": "2016-04-18 18:32:43"
-        },
-        {
-            "name": "zendframework/zend-hydrator",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-hydrator.git",
-                "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-hydrator/zipball/22652e1661a5a10b3f564cf7824a2206cf5a4a65",
-                "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "^2.0@dev",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-filter": "^2.6",
-                "zendframework/zend-inputfilter": "^2.6",
-                "zendframework/zend-serializer": "^2.6.1",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3"
-            },
-            "suggest": {
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, to support aggregate hydrator usage",
-                "zendframework/zend-filter": "^2.6, to support naming strategy hydrator usage",
-                "zendframework/zend-serializer": "^2.6.1, to use the SerializableStrategy",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, to support hydrator plugin manager usage"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-release-1.0": "1.0-dev",
-                    "dev-release-1.1": "1.1-dev",
-                    "dev-master": "2.0-dev",
-                    "dev-develop": "2.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Hydrator\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "homepage": "https://github.com/zendframework/zend-hydrator",
-            "keywords": [
-                "hydrator",
-                "zf2"
-            ],
-            "time": "2016-02-18 22:38:26"
-        },
-        {
-            "name": "zendframework/zend-i18n",
-            "version": "2.7.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-i18n.git",
-                "reference": "b2db0d8246a865c659f93199f90f5fc2cd2f3cd8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/b2db0d8246a865c659f93199f90f5fc2cd2f3cd8",
-                "reference": "b2db0d8246a865c659f93199f90f5fc2cd2f3cd8",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-config": "^2.6",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-filter": "^2.6.1",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-validator": "^2.6",
-                "zendframework/zend-view": "^2.6.3"
-            },
-            "suggest": {
-                "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP",
-                "zendframework/zend-cache": "Zend\\Cache component",
-                "zendframework/zend-config": "Zend\\Config component",
-                "zendframework/zend-eventmanager": "You should install this package to use the events in the translator",
-                "zendframework/zend-filter": "You should install this package to use the provided filters",
-                "zendframework/zend-i18n-resources": "Translation resources",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
-                "zendframework/zend-validator": "You should install this package to use the provided validators",
-                "zendframework/zend-view": "You should install this package to use the provided view helpers"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev",
-                    "dev-develop": "2.8-dev"
-                },
-                "zf": {
-                    "component": "Zend\\I18n",
-                    "config-provider": "Zend\\I18n\\ConfigProvider"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\I18n\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "homepage": "https://github.com/zendframework/zend-i18n",
-            "keywords": [
-                "i18n",
-                "zf2"
-            ],
-            "time": "2016-06-07 21:08:30"
-        },
-        {
-            "name": "zendframework/zend-json",
-            "version": "3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-json.git",
-                "reference": "f42a1588e75c2a3e338cd94c37906231e616daab"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-json/zipball/f42a1588e75c2a3e338cd94c37906231e616daab",
-                "reference": "f42a1588e75c2a3e338cd94c37906231e616daab",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "^2.3",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "suggest": {
-                "zendframework/zend-json-server": "For implementing JSON-RPC servers",
-                "zendframework/zend-xml2json": "For converting XML documents to JSON"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev",
-                    "dev-develop": "3.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Json\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP",
-            "homepage": "https://github.com/zendframework/zend-json",
-            "keywords": [
-                "json",
-                "zf2"
-            ],
-            "time": "2016-04-01 02:34:00"
-        },
-        {
-            "name": "zendframework/zend-serializer",
-            "version": "2.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-serializer.git",
-                "reference": "ff74ea020f5f90866eb28365327e9bc765a61a6e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/ff74ea020f5f90866eb28365327e9bc765a61a6e",
-                "reference": "ff74ea020f5f90866eb28365327e9bc765a61a6e",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-json": "^2.5 || ^3.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.5",
-                "squizlabs/php_codesniffer": "^2.3.1",
-                "zendframework/zend-math": "^2.6",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3"
-            },
-            "suggest": {
-                "zendframework/zend-math": "(^2.6 || ^3.0) To support Python Pickle serialization",
-                "zendframework/zend-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev",
-                    "dev-develop": "2.9-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Serializer",
-                    "config-provider": "Zend\\Serializer\\ConfigProvider"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Serializer\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover",
-            "homepage": "https://github.com/zendframework/zend-serializer",
-            "keywords": [
-                "serializer",
-                "zf2"
-            ],
-            "time": "2016-06-21 17:01:55"
-        },
-        {
-            "name": "zendframework/zend-servicemanager",
-            "version": "2.7.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-servicemanager.git",
-                "reference": "a6db4d13b9141fccce5dcb553df0295d6ad7d477"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/a6db4d13b9141fccce5dcb553df0295d6ad7d477",
-                "reference": "a6db4d13b9141fccce5dcb553df0295d6ad7d477",
-                "shasum": ""
-            },
-            "require": {
-                "container-interop/container-interop": "~1.0",
-                "php": "^5.5 || ^7.0"
-            },
-            "require-dev": {
-                "athletic/athletic": "dev-master",
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "zendframework/zend-di": "~2.5",
-                "zendframework/zend-mvc": "~2.5"
-            },
-            "suggest": {
-                "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services",
-                "zendframework/zend-di": "Zend\\Di component"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev",
-                    "dev-develop": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\ServiceManager\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "homepage": "https://github.com/zendframework/zend-servicemanager",
-            "keywords": [
-                "servicemanager",
-                "zf2"
-            ],
-            "time": "2016-04-27 19:07:40"
-        },
-        {
-            "name": "zendframework/zend-stdlib",
-            "version": "2.7.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-stdlib.git",
-                "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/0e44eb46788f65e09e077eb7f44d2659143bcc1f",
-                "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "zendframework/zend-hydrator": "~1.1"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1",
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "zendframework/zend-config": "~2.5",
-                "zendframework/zend-eventmanager": "~2.5",
-                "zendframework/zend-filter": "~2.5",
-                "zendframework/zend-inputfilter": "~2.5",
-                "zendframework/zend-serializer": "~2.5",
-                "zendframework/zend-servicemanager": "~2.5"
-            },
-            "suggest": {
-                "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
-                "zendframework/zend-filter": "To support naming strategy hydrator usage",
-                "zendframework/zend-serializer": "Zend\\Serializer component",
-                "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-release-2.7": "2.7-dev",
-                    "dev-master": "3.0-dev",
-                    "dev-develop": "3.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Stdlib\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "homepage": "https://github.com/zendframework/zend-stdlib",
-            "keywords": [
-                "stdlib",
-                "zf2"
-            ],
-            "time": "2016-04-12 21:17:31"
-        },
-        {
-            "name": "zetacomponents/base",
-            "version": "1.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zetacomponents/Base.git",
-                "reference": "f20df24e8de3e48b6b69b2503f917e457281e687"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zetacomponents/Base/zipball/f20df24e8de3e48b6b69b2503f917e457281e687",
-                "reference": "f20df24e8de3e48b6b69b2503f917e457281e687",
-                "shasum": ""
-            },
-            "require-dev": {
-                "zetacomponents/unit-test": "*"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Sergey Alexeev"
-                },
-                {
-                    "name": "Sebastian Bergmann"
-                },
-                {
-                    "name": "Jan Borsodi"
-                },
-                {
-                    "name": "Raymond Bosman"
-                },
-                {
-                    "name": "Frederik Holljen"
-                },
-                {
-                    "name": "Kore Nordmann"
-                },
-                {
-                    "name": "Derick Rethans"
-                },
-                {
-                    "name": "Vadym Savchuk"
-                },
-                {
-                    "name": "Tobias Schlitt"
-                },
-                {
-                    "name": "Alexandru Stanoi"
-                }
-            ],
-            "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.",
-            "homepage": "https://github.com/zetacomponents",
-            "time": "2014-09-19 03:28:34"
-        },
-        {
-            "name": "zetacomponents/document",
-            "version": "1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zetacomponents/Document.git",
-                "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zetacomponents/Document/zipball/688abfde573cf3fe0730f82538fbd7aa9fc95bc8",
-                "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8",
-                "shasum": ""
-            },
-            "require": {
-                "zetacomponents/base": "*"
-            },
-            "require-dev": {
-                "zetacomponents/unit-test": "dev-master"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann"
-                },
-                {
-                    "name": "Kore Nordmann"
-                },
-                {
-                    "name": "Derick Rethans"
-                },
-                {
-                    "name": "Tobias Schlitt"
-                },
-                {
-                    "name": "Alexandru Stanoi"
-                }
-            ],
-            "description": "The Document components provides a general conversion framework for different semantic document markup languages like XHTML, Docbook, RST and similar.",
-            "homepage": "https://github.com/zetacomponents",
-            "time": "2013-12-19 11:40:00"
-        }
-    ],
-    "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": [],
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": {
-        "php": ">=5.0.0"
-    },
-    "platform-dev": []
-}
diff --git a/www/plugins/facteur/phpmailer-php5/extras/EasyPeasyICS.php b/www/plugins/facteur/phpmailer-php5/extras/EasyPeasyICS.php
deleted file mode 100644 (file)
index d8bfcfa..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-/**
- * EasyPeasyICS Simple ICS/vCal data generator.
- * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
- * @author Manuel Reinhard <manu@sprain.ch>
- *
- * Built with inspiration from
- * http://stackoverflow.com/questions/1463480/how-can-i-use-php-to-dynamically-publish-an-ical-file-to-be-read-by-google-calend/1464355#1464355
- * History:
- * 2010/12/17 - Manuel Reinhard - when it all started
- * 2014 PHPMailer project becomes maintainer
- */
-
-/**
- * Class EasyPeasyICS.
- * Simple ICS data generator
- * @package phpmailer
- * @subpackage easypeasyics
- */
-class EasyPeasyICS
-{
-    /**
-     * The name of the calendar
-     * @var string
-     */
-    protected $calendarName;
-    /**
-     * The array of events to add to this calendar
-     * @var array
-     */
-    protected $events = array();
-
-    /**
-     * Constructor
-     * @param string $calendarName
-     */
-    public function __construct($calendarName = "")
-    {
-        $this->calendarName = $calendarName;
-    }
-
-    /**
-     * Add an event to this calendar.
-     * @param string $start The start date and time as a unix timestamp
-     * @param string $end The end date and time as a unix timestamp
-     * @param string $summary A summary or title for the event
-     * @param string $description A description of the event
-     * @param string $url A URL for the event
-     * @param string $uid A unique identifier for the event - generated automatically if not provided
-     * @return array An array of event details, including any generated UID
-     */
-    public function addEvent($start, $end, $summary = '', $description = '', $url = '', $uid = '')
-    {
-        if (empty($uid)) {
-            $uid = md5(uniqid(mt_rand(), true)) . '@EasyPeasyICS';
-        }
-        $event = array(
-            'start' => gmdate('Ymd', $start) . 'T' . gmdate('His', $start) . 'Z',
-            'end' => gmdate('Ymd', $end) . 'T' . gmdate('His', $end) . 'Z',
-            'summary' => $summary,
-            'description' => $description,
-            'url' => $url,
-            'uid' => $uid
-        );
-        $this->events[] = $event;
-        return $event;
-    }
-
-    /**
-     * @return array Get the array of events.
-     */
-    public function getEvents()
-    {
-        return $this->events;
-    }
-
-    /**
-     * Clear all events.
-     */
-    public function clearEvents()
-    {
-        $this->events = array();
-    }
-
-    /**
-     * Get the name of the calendar.
-     * @return string
-     */
-    public function getName()
-    {
-        return $this->calendarName;
-    }
-
-    /**
-     * Set the name of the calendar.
-     * @param $name
-     */
-    public function setName($name)
-    {
-        $this->calendarName = $name;
-    }
-
-    /**
-     * Render and optionally output a vcal string.
-     * @param bool $output Whether to output the calendar data directly (the default).
-     * @return string The complete rendered vlal
-     */
-    public function render($output = true)
-    {
-        //Add header
-        $ics = 'BEGIN:VCALENDAR
-METHOD:PUBLISH
-VERSION:2.0
-X-WR-CALNAME:' . $this->calendarName . '
-PRODID:-//hacksw/handcal//NONSGML v1.0//EN';
-
-        //Add events
-        foreach ($this->events as $event) {
-            $ics .= '
-BEGIN:VEVENT
-UID:' . $event['uid'] . '
-DTSTAMP:' . gmdate('Ymd') . 'T' . gmdate('His') . 'Z
-DTSTART:' . $event['start'] . '
-DTEND:' . $event['end'] . '
-SUMMARY:' . str_replace("\n", "\\n", $event['summary']) . '
-DESCRIPTION:' . str_replace("\n", "\\n", $event['description']) . '
-URL;VALUE=URI:' . $event['url'] . '
-END:VEVENT';
-        }
-
-        //Add footer
-        $ics .= '
-END:VCALENDAR';
-
-        if ($output) {
-            //Output
-            $filename = $this->calendarName;
-            //Filename needs quoting if it contains spaces
-            if (strpos($filename, ' ') !== false) {
-                $filename = '"'.$filename.'"';
-            }
-            header('Content-type: text/calendar; charset=utf-8');
-            header('Content-Disposition: inline; filename=' . $filename . '.ics');
-            echo $ics;
-        }
-        return $ics;
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/extras/README.md b/www/plugins/facteur/phpmailer-php5/extras/README.md
deleted file mode 100644 (file)
index dac79e0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#PHPMailer Extras
-
-These classes provide optional additional functions to PHPMailer.
-
-These are not loaded by the PHPMailer autoloader, so in some cases you may need to `require` them yourself before using them.
-
-##EasyPeasyICS
-
-This class was originally written by Manuel Reinhard and provides a simple means of generating ICS/vCal files that are used in sending calendar events. PHPMailer does not use it directly, but you can use it to generate content appropriate for placing in the `Ical` property of PHPMailer. The PHPMailer project is now its official home as Manuel has given permission for that and is no longer maintaining it himself.
-
-##htmlfilter
-
-This class by Konstantin Riabitsev and Jim Jagielski implements HTML filtering to remove potentially malicious tags, such as `<script>` or `onclick=` attributes that can result in XSS attacks. This is a simple filter and is not as comprehensive as [HTMLawed](http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/) or [HTMLPurifier](http://htmlpurifier.org), but it's easier to use and considerably better than nothing! PHPMailer does not use it directly, but you may want to apply it to user-supplied HTML before using it as a message body.
-
-##NTLM_SASL_client
-
-This class by Manuel Lemos (bundled with permission) adds the ability to authenticate with Microsoft Windows mail servers that use NTLM-based authentication. It is used by PHPMailer if you send via SMTP and set the `AuthType` property to `NTLM`; you will also need to use the `Realm` and `Workstation` properties. The original source is [here](http://www.phpclasses.org/browse/file/7495.html).
diff --git a/www/plugins/facteur/phpmailer-php5/extras/htmlfilter.php b/www/plugins/facteur/phpmailer-php5/extras/htmlfilter.php
deleted file mode 100644 (file)
index 7727487..0000000
+++ /dev/null
@@ -1,1159 +0,0 @@
-<?php
-/**
- * htmlfilter.inc
- * ---------------
- * This set of functions allows you to filter html in order to remove
- * any malicious tags from it. Useful in cases when you need to filter
- * user input for any cross-site-scripting attempts.
- *
- * Copyright (C) 2002-2004 by Duke University
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301  USA
- *
- * @Author     Konstantin Riabitsev <icon@linux.duke.edu>
- * @Author  Jim Jagielski <jim@jaguNET.com / jimjag@gmail.com>
- * @Version 1.1 ($Date$)
- */
-
-/**
- * This function returns the final tag out of the tag name, an array
- * of attributes, and the type of the tag. This function is called by
- * tln_sanitize internally.
- *
- * @param string $tagname the name of the tag.
- * @param array $attary the array of attributes and their values
- * @param integer $tagtype The type of the tag (see in comments).
- * @return string A string with the final tag representation.
- */
-function tln_tagprint($tagname, $attary, $tagtype)
-{
-    if ($tagtype == 2) {
-        $fulltag = '</' . $tagname . '>';
-    } else {
-        $fulltag = '<' . $tagname;
-        if (is_array($attary) && sizeof($attary)) {
-            $atts = array();
-            while (list($attname, $attvalue) = each($attary)) {
-                array_push($atts, "$attname=$attvalue");
-            }
-            $fulltag .= ' ' . join(' ', $atts);
-        }
-        if ($tagtype == 3) {
-            $fulltag .= ' /';
-        }
-        $fulltag .= '>';
-    }
-    return $fulltag;
-}
-
-/**
- * A small helper function to use with array_walk. Modifies a by-ref
- * value and makes it lowercase.
- *
- * @param string $val a value passed by-ref.
- * @return             void since it modifies a by-ref value.
- */
-function tln_casenormalize(&$val)
-{
-    $val = strtolower($val);
-}
-
-/**
- * This function skips any whitespace from the current position within
- * a string and to the next non-whitespace value.
- *
- * @param string $body the string
- * @param integer $offset the offset within the string where we should start
- *                                looking for the next non-whitespace character.
- * @return integer          the location within the $body where the next
- *                                non-whitespace char is located.
- */
-function tln_skipspace($body, $offset)
-{
-    preg_match('/^(\s*)/s', substr($body, $offset), $matches);
-    if (sizeof($matches[1])) {
-        $count = strlen($matches[1]);
-        $offset += $count;
-    }
-    return $offset;
-}
-
-/**
- * This function looks for the next character within a string. It's
- * really just a glorified "strpos", except it catches the failures
- * nicely.
- *
- * @param string $body   The string to look for needle in.
- * @param integer $offset Start looking from this position.
- * @param string $needle The character/string to look for.
- * @return integer           location of the next occurrence of the needle, or
- *                                strlen($body) if needle wasn't found.
- */
-function tln_findnxstr($body, $offset, $needle)
-{
-    $pos = strpos($body, $needle, $offset);
-    if ($pos === false) {
-        $pos = strlen($body);
-    }
-    return $pos;
-}
-
-/**
- * This function takes a PCRE-style regexp and tries to match it
- * within the string.
- *
- * @param string $body   The string to look for needle in.
- * @param integer $offset Start looking from here.
- * @param string $reg       A PCRE-style regex to match.
- * @return array|boolean  Returns a false if no matches found, or an array
- *                                with the following members:
- *                                - integer with the location of the match within $body
- *                                - string with whatever content between offset and the match
- *                                - string with whatever it is we matched
- */
-function tln_findnxreg($body, $offset, $reg)
-{
-    $matches = array();
-    $retarr = array();
-    $preg_rule = '%^(.*?)(' . $reg . ')%s';
-    preg_match($preg_rule, substr($body, $offset), $matches);
-    if (!isset($matches[0]) || !$matches[0]) {
-        $retarr = false;
-    } else {
-        $retarr[0] = $offset + strlen($matches[1]);
-        $retarr[1] = $matches[1];
-        $retarr[2] = $matches[2];
-    }
-    return $retarr;
-}
-
-/**
- * This function looks for the next tag.
- *
- * @param string $body   String where to look for the next tag.
- * @param integer $offset Start looking from here.
- * @return array|boolean false if no more tags exist in the body, or
- *                                an array with the following members:
- *                                - string with the name of the tag
- *                                - array with attributes and their values
- *                                - integer with tag type (1, 2, or 3)
- *                                - integer where the tag starts (starting "<")
- *                                - integer where the tag ends (ending ">")
- *                                first three members will be false, if the tag is invalid.
- */
-function tln_getnxtag($body, $offset)
-{
-    if ($offset > strlen($body)) {
-        return false;
-    }
-    $lt = tln_findnxstr($body, $offset, '<');
-    if ($lt == strlen($body)) {
-        return false;
-    }
-    /**
-     * We are here:
-     * blah blah <tag attribute="value">
-     * \---------^
-     */
-    $pos = tln_skipspace($body, $lt + 1);
-    if ($pos >= strlen($body)) {
-        return array(false, false, false, $lt, strlen($body));
-    }
-    /**
-     * There are 3 kinds of tags:
-     * 1. Opening tag, e.g.:
-     *   <a href="blah">
-     * 2. Closing tag, e.g.:
-     *   </a>
-     * 3. XHTML-style content-less tag, e.g.:
-     *   <img src="blah"/>
-     */
-    switch (substr($body, $pos, 1)) {
-    case '/':
-        $tagtype = 2;
-        $pos++;
-        break;
-    case '!':
-        /**
-         * A comment or an SGML declaration.
-         */
-            if (substr($body, $pos + 1, 2) == '--') {
-            $gt = strpos($body, '-->', $pos);
-            if ($gt === false) {
-                $gt = strlen($body);
-            } else {
-                $gt += 2;
-            }
-            return array(false, false, false, $lt, $gt);
-        } else {
-            $gt = tln_findnxstr($body, $pos, '>');
-            return array(false, false, false, $lt, $gt);
-        }
-        break;
-    default:
-        /**
-         * Assume tagtype 1 for now. If it's type 3, we'll switch values
-         * later.
-         */
-        $tagtype = 1;
-        break;
-    }
-
-    /**
-     * Look for next [\W-_], which will indicate the end of the tag name.
-     */
-    $regary = tln_findnxreg($body, $pos, '[^\w\-_]');
-    if ($regary == false) {
-        return array(false, false, false, $lt, strlen($body));
-    }
-    list($pos, $tagname, $match) = $regary;
-    $tagname = strtolower($tagname);
-
-    /**
-     * $match can be either of these:
-     * '>'     indicating the end of the tag entirely.
-     * '\s' indicating the end of the tag name.
-     * '/'     indicating that this is type-3 xhtml tag.
-     *
-     * Whatever else we find there indicates an invalid tag.
-     */
-    switch ($match) {
-    case '/':
-        /**
-         * This is an xhtml-style tag with a closing / at the
-         * end, like so: <img src="blah"/>. Check if it's followed
-         * by the closing bracket. If not, then this tag is invalid
-         */
-        if (substr($body, $pos, 2) == '/>') {
-            $pos++;
-            $tagtype = 3;
-        } else {
-            $gt = tln_findnxstr($body, $pos, '>');
-            $retary = array(false, false, false, $lt, $gt);
-            return $retary;
-        }
-            //intentional fall-through
-    case '>':
-        return array($tagname, false, $tagtype, $lt, $pos);
-        break;
-    default:
-        /**
-         * Check if it's whitespace
-         */
-        if (!preg_match('/\s/', $match)) {
-            /**
-             * This is an invalid tag! Look for the next closing ">".
-             */
-            $gt = tln_findnxstr($body, $lt, '>');
-            return array(false, false, false, $lt, $gt);
-        }
-        break;
-    }
-
-    /**
-     * At this point we're here:
-     * <tagname         attribute='blah'>
-     * \-------^
-     *
-     * At this point we loop in order to find all attributes.
-     */
-    $attary = array();
-
-    while ($pos <= strlen($body)) {
-        $pos = tln_skipspace($body, $pos);
-        if ($pos == strlen($body)) {
-            /**
-             * Non-closed tag.
-             */
-            return array(false, false, false, $lt, $pos);
-        }
-        /**
-         * See if we arrived at a ">" or "/>", which means that we reached
-         * the end of the tag.
-         */
-        $matches = array();
-        if (preg_match('%^(\s*)(>|/>)%s', substr($body, $pos), $matches)) {
-            /**
-             * Yep. So we did.
-             */
-            $pos += strlen($matches[1]);
-            if ($matches[2] == '/>') {
-                $tagtype = 3;
-                $pos++;
-            }
-            return array($tagname, $attary, $tagtype, $lt, $pos);
-        }
-
-        /**
-         * There are several types of attributes, with optional
-         * [:space:] between members.
-         * Type 1:
-         *      attrname[:space:]=[:space:]'CDATA'
-         * Type 2:
-         *      attrname[:space:]=[:space:]"CDATA"
-         * Type 3:
-         *      attr[:space:]=[:space:]CDATA
-         * Type 4:
-         *      attrname
-         *
-         * We leave types 1 and 2 the same, type 3 we check for
-         * '"' and convert to "&quot" if needed, then wrap in
-         * double quotes. Type 4 we convert into:
-         * attrname="yes".
-         */
-        $regary = tln_findnxreg($body, $pos, '[^\w\-_]');
-        if ($regary == false) {
-            /**
-             * Looks like body ended before the end of tag.
-             */
-            return array(false, false, false, $lt, strlen($body));
-        }
-        list($pos, $attname, $match) = $regary;
-        $attname = strtolower($attname);
-        /**
-         * We arrived at the end of attribute name. Several things possible
-         * here:
-         * '>' means the end of the tag and this is attribute type 4
-         * '/' if followed by '>' means the same thing as above
-         * '\s' means a lot of things -- look what it's followed by.
-         *             anything else means the attribute is invalid.
-         */
-        switch ($match) {
-        case '/':
-            /**
-             * This is an xhtml-style tag with a closing / at the
-             * end, like so: <img src="blah"/>. Check if it's followed
-             * by the closing bracket. If not, then this tag is invalid
-             */
-            if (substr($body, $pos, 2) == '/>') {
-                $pos++;
-                $tagtype = 3;
-            } else {
-                $gt = tln_findnxstr($body, $pos, '>');
-                $retary = array(false, false, false, $lt, $gt);
-                return $retary;
-            }
-                //intentional fall-through
-        case '>':
-            $attary{$attname} = '"yes"';
-            return array($tagname, $attary, $tagtype, $lt, $pos);
-            break;
-        default:
-            /**
-             * Skip whitespace and see what we arrive at.
-             */
-            $pos = tln_skipspace($body, $pos);
-            $char = substr($body, $pos, 1);
-            /**
-             * Two things are valid here:
-             * '=' means this is attribute type 1 2 or 3.
-             * \w means this was attribute type 4.
-             * anything else we ignore and re-loop. End of tag and
-             * invalid stuff will be caught by our checks at the beginning
-             * of the loop.
-             */
-            if ($char == '=') {
-                $pos++;
-                $pos = tln_skipspace($body, $pos);
-                /**
-                 * Here are 3 possibilities:
-                 * "'" attribute type 1
-                 * '"' attribute type 2
-                 * everything else is the content of tag type 3
-                 */
-                $quot = substr($body, $pos, 1);
-                if ($quot == '\'') {
-                        $regary = tln_findnxreg($body, $pos + 1, '\'');
-                    if ($regary == false) {
-                        return array(false, false, false, $lt, strlen($body));
-                    }
-                    list($pos, $attval, $match) = $regary;
-                    $pos++;
-                    $attary{$attname} = '\'' . $attval . '\'';
-                } elseif ($quot == '"') {
-                    $regary = tln_findnxreg($body, $pos + 1, '\"');
-                    if ($regary == false) {
-                        return array(false, false, false, $lt, strlen($body));
-                    }
-                    list($pos, $attval, $match) = $regary;
-                    $pos++;
-                            $attary{$attname} = '"' . $attval . '"';
-                } else {
-                    /**
-                     * These are hateful. Look for \s, or >.
-                     */
-                    $regary = tln_findnxreg($body, $pos, '[\s>]');
-                    if ($regary == false) {
-                        return array(false, false, false, $lt, strlen($body));
-                    }
-                    list($pos, $attval, $match) = $regary;
-                    /**
-                     * If it's ">" it will be caught at the top.
-                     */
-                    $attval = preg_replace('/\"/s', '&quot;', $attval);
-                    $attary{$attname} = '"' . $attval . '"';
-                }
-            } elseif (preg_match('|[\w/>]|', $char)) {
-                /**
-                 * That was attribute type 4.
-                 */
-                $attary{$attname} = '"yes"';
-            } else {
-                /**
-                 * An illegal character. Find next '>' and return.
-                 */
-                $gt = tln_findnxstr($body, $pos, '>');
-                return array(false, false, false, $lt, $gt);
-            }
-            break;
-        }
-    }
-    /**
-     * The fact that we got here indicates that the tag end was never
-     * found. Return invalid tag indication so it gets stripped.
-     */
-    return array(false, false, false, $lt, strlen($body));
-}
-
-/**
- * Translates entities into literal values so they can be checked.
- *
- * @param string $attvalue the by-ref value to check.
- * @param string $regex    the regular expression to check against.
- * @param boolean $hex        whether the entites are hexadecimal.
- * @return boolean            True or False depending on whether there were matches.
- */
-function tln_deent(&$attvalue, $regex, $hex = false)
-{
-    preg_match_all($regex, $attvalue, $matches);
-    if (is_array($matches) && sizeof($matches[0]) > 0) {
-        $repl = array();
-        for ($i = 0; $i < sizeof($matches[0]); $i++) {
-            $numval = $matches[1][$i];
-            if ($hex) {
-                $numval = hexdec($numval);
-            }
-            $repl{$matches[0][$i]} = chr($numval);
-        }
-        $attvalue = strtr($attvalue, $repl);
-        return true;
-    } else {
-        return false;
-    }
-}
-
-/**
- * This function checks attribute values for entity-encoded values
- * and returns them translated into 8-bit strings so we can run
- * checks on them.
- *
- * @param string $attvalue A string to run entity check against.
- */
-function tln_defang(&$attvalue)
-{
-    /**
-     * Skip this if there aren't ampersands or backslashes.
-     */
-    if (strpos($attvalue, '&') === false
-        && strpos($attvalue, '\\') === false
-    ) {
-        return;
-    }
-    do {
-        $m = false;
-        $m = $m || tln_deent($attvalue, '/\&#0*(\d+);*/s');
-        $m = $m || tln_deent($attvalue, '/\&#x0*((\d|[a-f])+);*/si', true);
-        $m = $m || tln_deent($attvalue, '/\\\\(\d+)/s', true);
-    } while ($m == true);
-    $attvalue = stripslashes($attvalue);
-}
-
-/**
- * Kill any tabs, newlines, or carriage returns. Our friends the
- * makers of the browser with 95% market value decided that it'd
- * be funny to make "java[tab]script" be just as good as "javascript".
- *
- * @param string $attvalue     The attribute value before extraneous spaces removed.
- */
-function tln_unspace(&$attvalue)
-{
-    if (strcspn($attvalue, "\t\r\n\0 ") != strlen($attvalue)) {
-        $attvalue = str_replace(
-            array("\t", "\r", "\n", "\0", " "),
-            array('', '', '', '', ''),
-            $attvalue
-        );
-    }
-}
-
-/**
- * This function runs various checks against the attributes.
- *
- * @param string $tagname            String with the name of the tag.
- * @param array $attary            Array with all tag attributes.
- * @param array $rm_attnames        See description for tln_sanitize
- * @param array $bad_attvals        See description for tln_sanitize
- * @param array $add_attr_to_tag See description for tln_sanitize
- * @param string $trans_image_path
- * @param boolean $block_external_images
- * @return array with modified attributes.
- */
-function tln_fixatts(
-    $tagname,
-    $attary,
-    $rm_attnames,
-    $bad_attvals,
-    $add_attr_to_tag,
-    $trans_image_path,
-    $block_external_images
-) {
-    while (list($attname, $attvalue) = each($attary)) {
-        /**
-         * See if this attribute should be removed.
-         */
-        foreach ($rm_attnames as $matchtag => $matchattrs) {
-            if (preg_match($matchtag, $tagname)) {
-                foreach ($matchattrs as $matchattr) {
-                    if (preg_match($matchattr, $attname)) {
-                        unset($attary{$attname});
-                        continue;
-                    }
-                }
-            }
-        }
-        /**
-         * Remove any backslashes, entities, or extraneous whitespace.
-         */
-        $oldattvalue = $attvalue;
-        tln_defang($attvalue);
-        if ($attname == 'style' && $attvalue !== $oldattvalue) {
-            $attvalue = "idiocy";
-            $attary{$attname} = $attvalue;
-        }
-        tln_unspace($attvalue);
-
-        /**
-         * Now let's run checks on the attvalues.
-         * I don't expect anyone to comprehend this. If you do,
-         * get in touch with me so I can drive to where you live and
-         * shake your hand personally. :)
-         */
-        foreach ($bad_attvals as $matchtag => $matchattrs) {
-            if (preg_match($matchtag, $tagname)) {
-                foreach ($matchattrs as $matchattr => $valary) {
-                    if (preg_match($matchattr, $attname)) {
-                        /**
-                         * There are two arrays in valary.
-                         * First is matches.
-                         * Second one is replacements
-                         */
-                        list($valmatch, $valrepl) = $valary;
-                        $newvalue = preg_replace($valmatch, $valrepl, $attvalue);
-                        if ($newvalue != $attvalue) {
-                            $attary{$attname} = $newvalue;
-                            $attvalue = $newvalue;
-                        }
-                    }
-                }
-            }
-        }
-        if ($attname == 'style') {
-            if (preg_match('/[\0-\37\200-\377]+/', $attvalue)) {
-                $attary{$attname} = '"disallowed character"';
-            }
-            preg_match_all("/url\s*\((.+)\)/si", $attvalue, $aMatch);
-            if (count($aMatch)) {
-                foreach($aMatch[1] as $sMatch) {
-                    $urlvalue = $sMatch;
-                    tln_fixurl($attname, $urlvalue, $trans_image_path, $block_external_images);
-                    $attary{$attname} = str_replace($sMatch, $urlvalue, $attvalue);
-                }
-            }
-        }
-     }
-    /**
-     * See if we need to append any attributes to this tag.
-     */
-    foreach ($add_attr_to_tag as $matchtag => $addattary) {
-        if (preg_match($matchtag, $tagname)) {
-            $attary = array_merge($attary, $addattary);
-        }
-    }
-    return $attary;
-}
-
-function tln_fixurl($attname, &$attvalue, $trans_image_path, $block_external_images)
-{
-    $sQuote = '"';
-    $attvalue = trim($attvalue);
-    if ($attvalue && ($attvalue[0] =='"'|| $attvalue[0] == "'")) {
-        // remove the double quotes
-        $sQuote = $attvalue[0];
-        $attvalue = trim(substr($attvalue,1,-1));
-    }
-
-    /**
-     * Replace empty src tags with the blank image.  src is only used
-     * for frames, images, and image inputs.  Doing a replace should
-     * not affect them working as should be, however it will stop
-     * IE from being kicked off when src for img tags are not set
-     */
-    if ($attvalue == '') {
-        $attvalue = $sQuote . $trans_image_path . $sQuote;
-    } else {
-        // first, disallow 8 bit characters and control characters
-        if (preg_match('/[\0-\37\200-\377]+/',$attvalue)) {
-            switch ($attname) {
-                case 'href':
-                    $attvalue = $sQuote . 'http://invalid-stuff-detected.example.com' . $sQuote;
-                    break;
-                default:
-                    $attvalue = $sQuote . $trans_image_path . $sQuote;
-                    break;
-            }
-        } else {
-            $aUrl = parse_url($attvalue);
-            if (isset($aUrl['scheme'])) {
-                switch(strtolower($aUrl['scheme'])) {
-                    case 'mailto':
-                    case 'http':
-                    case 'https':
-                    case 'ftp':
-                        if ($attname != 'href') {
-                            if ($block_external_images == true) {
-                                $attvalue = $sQuote . $trans_image_path . $sQuote;
-                            } else {
-                                if (!isset($aUrl['path'])) {
-                                    $attvalue = $sQuote . $trans_image_path . $sQuote;
-                                }
-                            }
-                        } else {
-                            $attvalue = $sQuote . $attvalue . $sQuote;
-                        }
-                        break;
-                    case 'outbind':
-                        $attvalue = $sQuote . $attvalue . $sQuote;
-                        break;
-                    case 'cid':
-                        $attvalue = $sQuote . $attvalue . $sQuote;
-                        break;
-                    default:
-                        $attvalue = $sQuote . $trans_image_path . $sQuote;
-                        break;
-                }
-            } else {
-                if (!isset($aUrl['path']) || $aUrl['path'] != $trans_image_path) {
-                    $$attvalue = $sQuote . $trans_image_path . $sQuote;
-                }
-            }
-        }
-    }
-}
-
-function tln_fixstyle($body, $pos, $trans_image_path, $block_external_images)
-{
-    // workaround for </style> in between comments
-    $content = '';
-    $sToken = '';
-    $bSucces = false;
-    $bEndTag = false;
-    for ($i=$pos,$iCount=strlen($body);$i<$iCount;++$i) {
-        $char = $body{$i};
-        switch ($char) {
-            case '<':
-                $sToken = $char;
-                break;
-            case '/':
-                 if ($sToken == '<') {
-                    $sToken .= $char;
-                    $bEndTag = true;
-                 } else {
-                    $content .= $char;
-                 }
-                 break;
-            case '>':
-                 if ($bEndTag) {
-                    $sToken .= $char;
-                    if (preg_match('/\<\/\s*style\s*\>/i',$sToken,$aMatch)) {
-                        $newpos = $i + 1;
-                        $bSucces = true;
-                        break 2;
-                    } else {
-                        $content .= $sToken;
-                    }
-                    $bEndTag = false;
-                 } else {
-                    $content .= $char;
-                 }
-                 break;
-            case '!':
-                if ($sToken == '<') {
-                    // possible comment
-                    if (isset($body{$i+2}) && substr($body,$i,3) == '!--') {
-                        $i = strpos($body,'-->',$i+3);
-                        if ($i === false) { // no end comment
-                            $i = strlen($body);
-                        }
-                        $sToken = '';
-                    }
-                } else {
-                    $content .= $char;
-                }
-                break;
-            default:
-                if ($bEndTag) {
-                    $sToken .= $char;
-                } else {
-                    $content .= $char;
-                }
-                break;
-        }
-    }
-    if ($bSucces == FALSE){
-        return array(FALSE, strlen($body));
-    }
-
-
-
-    /**
-     * First look for general BODY style declaration, which would be
-     * like so:
-     * body {background: blah-blah}
-     * and change it to .bodyclass so we can just assign it to a <div>
-     */
-    $content = preg_replace("|body(\s*\{.*?\})|si", ".bodyclass\\1", $content);
-
-    /**
-    * Fix url('blah') declarations.
-    */
-    //   $content = preg_replace("|url\s*\(\s*([\'\"])\s*\S+script\s*:.*?([\'\"])\s*\)|si",
-    //                           "url(\\1$trans_image_path\\2)", $content);
-
-    // first check for 8bit sequences and disallowed control characters
-    if (preg_match('/[\16-\37\200-\377]+/',$content)) {
-        $content = '<!-- style block removed by html filter due to presence of 8bit characters -->';
-        return array($content, $newpos);
-    }
-
-    // remove @import line
-    $content = preg_replace("/^\s*(@import.*)$/mi","\n<!-- @import rules forbidden -->\n",$content);
-
-    $content = preg_replace("/(\\\\)?u(\\\\)?r(\\\\)?l(\\\\)?/i", 'url', $content);
-    preg_match_all("/url\s*\((.+)\)/si",$content,$aMatch);
-    if (count($aMatch)) {
-        $aValue = $aReplace = array();
-        foreach($aMatch[1] as $sMatch) {
-            // url value
-            $urlvalue = $sMatch;
-            tln_fixurl('style',$urlvalue, $trans_image_path, $block_external_images);
-            $aValue[] = $sMatch;
-            $aReplace[] = $urlvalue;
-        }
-        $content = str_replace($aValue,$aReplace,$content);
-    }
-
-    /**
-     * Remove any backslashes, entities, and extraneous whitespace.
-     */
-    $contentTemp = $content;
-    tln_defang($contentTemp);
-    tln_unspace($contentTemp);
-
-    $match   = Array('/\/\*.*\*\//',
-                    '/expression/i',
-                    '/behaviou*r/i',
-                    '/binding/i',
-                    '/include-source/i',
-                    '/javascript/i',
-                    '/script/i',
-                    '/position/i');
-    $replace = Array('','idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', '');
-    $contentNew = preg_replace($match, $replace, $contentTemp);
-    if ($contentNew !== $contentTemp) {
-        $content = $contentNew;
-    }
-    return array($content, $newpos);
-}
-
-function tln_body2div($attary, $trans_image_path)
-{
-    $divattary = array('class' => "'bodyclass'");
-    $text = '#000000';
-    $has_bgc_stl = $has_txt_stl = false;
-    $styledef = '';
-    if (is_array($attary) && sizeof($attary) > 0){
-        foreach ($attary as $attname=>$attvalue){
-            $quotchar = substr($attvalue, 0, 1);
-            $attvalue = str_replace($quotchar, "", $attvalue);
-            switch ($attname){
-                case 'background':
-                    $styledef .= "background-image: url('$trans_image_path'); ";
-                    break;
-                case 'bgcolor':
-                    $has_bgc_stl = true;
-                    $styledef .= "background-color: $attvalue; ";
-                    break;
-                case 'text':
-                    $has_txt_stl = true;
-                    $styledef .= "color: $attvalue; ";
-                    break;
-            }
-        }
-        // Outlook defines a white bgcolor and no text color. This can lead to
-        // white text on a white bg with certain themes.
-        if ($has_bgc_stl && !$has_txt_stl) {
-            $styledef .= "color: $text; ";
-        }
-        if (strlen($styledef) > 0){
-            $divattary{"style"} = "\"$styledef\"";
-        }
-    }
-    return $divattary;
-}
-
-/**
- *
- * @param string $body                    The HTML you wish to filter
- * @param array $tag_list                see description above
- * @param array $rm_tags_with_content see description above
- * @param array $self_closing_tags    see description above
- * @param boolean $force_tag_closing    see description above
- * @param array $rm_attnames            see description above
- * @param array $bad_attvals            see description above
- * @param array $add_attr_to_tag        see description above
- * @param string $trans_image_path
- * @param boolean $block_external_images
-
- * @return string                       Sanitized html safe to show on your pages.
- */
-function tln_sanitize(
-    $body,
-    $tag_list,
-    $rm_tags_with_content,
-    $self_closing_tags,
-    $force_tag_closing,
-    $rm_attnames,
-    $bad_attvals,
-    $add_attr_to_tag,
-    $trans_image_path,
-    $block_external_images
-) {
-    /**
-     * Normalize rm_tags and rm_tags_with_content.
-     */
-    $rm_tags = array_shift($tag_list);
-    @array_walk($tag_list, 'tln_casenormalize');
-    @array_walk($rm_tags_with_content, 'tln_casenormalize');
-    @array_walk($self_closing_tags, 'tln_casenormalize');
-    /**
-     * See if tag_list is of tags to remove or tags to allow.
-     * false  means remove these tags
-     * true      means allow these tags
-     */
-    $curpos = 0;
-    $open_tags = array();
-    $trusted = "<!-- begin tln_sanitized html -->\n";
-    $skip_content = false;
-    /**
-     * Take care of netscape's stupid javascript entities like
-     * &{alert('boo')};
-     */
-    $body = preg_replace('/&(\{.*?\};)/si', '&amp;\\1', $body);
-    while (($curtag = tln_getnxtag($body, $curpos)) != false) {
-        list($tagname, $attary, $tagtype, $lt, $gt) = $curtag;
-        $free_content = substr($body, $curpos, $lt-$curpos);
-        /**
-         * Take care of <style>
-         */
-        if ($tagname == "style" && $tagtype == 1){
-            list($free_content, $curpos) =
-                tln_fixstyle($body, $gt+1, $trans_image_path, $block_external_images);
-            if ($free_content != FALSE){
-                if ( !empty($attary) ) {
-                    $attary = tln_fixatts($tagname,
-                                         $attary,
-                                         $rm_attnames,
-                                         $bad_attvals,
-                                         $add_attr_to_tag,
-                                         $trans_image_path,
-                                         $block_external_images
-                                         );
-                }
-                $trusted .= tln_tagprint($tagname, $attary, $tagtype);
-                $trusted .= $free_content;
-                $trusted .= tln_tagprint($tagname, null, 2);
-            }
-            continue;
-        }
-        if ($skip_content == false){
-            $trusted .= $free_content;
-        }
-        if ($tagname != false) {
-            if ($tagtype == 2) {
-                if ($skip_content == $tagname) {
-                    /**
-                     * Got to the end of tag we needed to remove.
-                     */
-                    $tagname = false;
-                    $skip_content = false;
-                } else {
-                    if ($skip_content == false) {
-                        if ($tagname == "body") {
-                            $tagname = "div";
-                        }
-                        if (isset($open_tags{$tagname}) &&
-                            $open_tags{$tagname} > 0
-                        ) {
-                            $open_tags{$tagname}--;
-                        } else {
-                            $tagname = false;
-                        }
-                    }
-                }
-            } else {
-                /**
-                 * $rm_tags_with_content
-                 */
-                if ($skip_content == false) {
-                    /**
-                     * See if this is a self-closing type and change
-                     * tagtype appropriately.
-                     */
-                    if ($tagtype == 1
-                        && in_array($tagname, $self_closing_tags)
-                    ) {
-                        $tagtype = 3;
-                    }
-                    /**
-                     * See if we should skip this tag and any content
-                     * inside it.
-                     */
-                    if ($tagtype == 1
-                        && in_array($tagname, $rm_tags_with_content)
-                    ) {
-                        $skip_content = $tagname;
-                    } else {
-                        if (($rm_tags == false
-                             && in_array($tagname, $tag_list)) ||
-                            ($rm_tags == true
-                                && !in_array($tagname, $tag_list))
-                        ) {
-                            $tagname = false;
-                        } else {
-                            /**
-                             * Convert body into div.
-                             */
-                            if ($tagname == "body"){
-                                $tagname = "div";
-                                $attary = tln_body2div($attary, $trans_image_path);
-                            }
-                            if ($tagtype == 1) {
-                                if (isset($open_tags{$tagname})) {
-                                    $open_tags{$tagname}++;
-                                } else {
-                                    $open_tags{$tagname} = 1;
-                                }
-                            }
-                            /**
-                             * This is where we run other checks.
-                             */
-                            if (is_array($attary) && sizeof($attary) > 0) {
-                                $attary = tln_fixatts(
-                                    $tagname,
-                                    $attary,
-                                    $rm_attnames,
-                                    $bad_attvals,
-                                    $add_attr_to_tag,
-                                    $trans_image_path,
-                                    $block_external_images
-                                );
-                            }
-                        }
-                    }
-                }
-            }
-            if ($tagname != false && $skip_content == false) {
-                $trusted .= tln_tagprint($tagname, $attary, $tagtype);
-            }
-        }
-        $curpos = $gt + 1;
-    }
-    $trusted .= substr($body, $curpos, strlen($body) - $curpos);
-    if ($force_tag_closing == true) {
-        foreach ($open_tags as $tagname => $opentimes) {
-            while ($opentimes > 0) {
-                $trusted .= '</' . $tagname . '>';
-                $opentimes--;
-            }
-        }
-        $trusted .= "\n";
-    }
-    $trusted .= "<!-- end tln_sanitized html -->\n";
-    return $trusted;
-}
-
-//
-// Use the nifty htmlfilter library
-//
-
-
-function HTMLFilter($body, $trans_image_path, $block_external_images = false)
-{
-
-    $tag_list = array(
-        false,
-        "object",
-        "meta",
-        "html",
-        "head",
-        "base",
-        "link",
-        "frame",
-        "iframe",
-        "plaintext",
-        "marquee"
-    );
-
-    $rm_tags_with_content = array(
-        "script",
-        "applet",
-        "embed",
-        "title",
-        "frameset",
-        "xmp",
-        "xml"
-    );
-
-    $self_closing_tags =  array(
-        "img",
-        "br",
-        "hr",
-        "input",
-        "outbind"
-    );
-
-    $force_tag_closing = true;
-
-    $rm_attnames = array(
-        "/.*/" =>
-            array(
-                // "/target/i",
-                "/^on.*/i",
-                "/^dynsrc/i",
-                "/^data.*/i",
-                "/^lowsrc.*/i"
-            )
-    );
-
-    $bad_attvals = array(
-        "/.*/" =>
-        array(
-            "/^src|background/i" =>
-            array(
-                array(
-                    '/^([\'"])\s*\S+script\s*:.*([\'"])/si',
-                    '/^([\'"])\s*mocha\s*:*.*([\'"])/si',
-                    '/^([\'"])\s*about\s*:.*([\'"])/si'
-                ),
-                array(
-                    "\\1$trans_image_path\\2",
-                    "\\1$trans_image_path\\2",
-                    "\\1$trans_image_path\\2"
-                )
-            ),
-            "/^href|action/i" =>
-            array(
-                array(
-                    '/^([\'"])\s*\S+script\s*:.*([\'"])/si',
-                    '/^([\'"])\s*mocha\s*:*.*([\'"])/si',
-                    '/^([\'"])\s*about\s*:.*([\'"])/si'
-                ),
-                array(
-                    "\\1#\\1",
-                    "\\1#\\1",
-                    "\\1#\\1"
-                )
-            ),
-            "/^style/i" =>
-            array(
-                array(
-                    "/\/\*.*\*\//",
-                    "/expression/i",
-                    "/binding/i",
-                    "/behaviou*r/i",
-                    "/include-source/i",
-                    '/position\s*:/i',
-                    '/(\\\\)?u(\\\\)?r(\\\\)?l(\\\\)?/i',
-                    '/url\s*\(\s*([\'"])\s*\S+script\s*:.*([\'"])\s*\)/si',
-                    '/url\s*\(\s*([\'"])\s*mocha\s*:.*([\'"])\s*\)/si',
-                    '/url\s*\(\s*([\'"])\s*about\s*:.*([\'"])\s*\)/si',
-                    '/(.*)\s*:\s*url\s*\(\s*([\'"]*)\s*\S+script\s*:.*([\'"]*)\s*\)/si'
-                ),
-                array(
-                    "",
-                    "idiocy",
-                    "idiocy",
-                    "idiocy",
-                    "idiocy",
-                    "idiocy",
-                    "url",
-                    "url(\\1#\\1)",
-                    "url(\\1#\\1)",
-                    "url(\\1#\\1)",
-                    "\\1:url(\\2#\\3)"
-                )
-            )
-        )
-    );
-
-    if ($block_external_images) {
-        array_push(
-            $bad_attvals{'/.*/'}{'/^src|background/i'}[0],
-            '/^([\'\"])\s*https*:.*([\'\"])/si'
-        );
-        array_push(
-            $bad_attvals{'/.*/'}{'/^src|background/i'}[1],
-            "\\1$trans_image_path\\1"
-        );
-        array_push(
-            $bad_attvals{'/.*/'}{'/^style/i'}[0],
-            '/url\(([\'\"])\s*https*:.*([\'\"])\)/si'
-        );
-        array_push(
-            $bad_attvals{'/.*/'}{'/^style/i'}[1],
-            "url(\\1$trans_image_path\\1)"
-        );
-    }
-
-    $add_attr_to_tag = array(
-        "/^a$/i" =>
-            array('target' => '"_blank"')
-    );
-
-    $trusted = tln_sanitize(
-        $body,
-        $tag_list,
-        $rm_tags_with_content,
-        $self_closing_tags,
-        $force_tag_closing,
-        $rm_attnames,
-        $bad_attvals,
-        $add_attr_to_tag,
-        $trans_image_path,
-        $block_external_images
-    );
-    return $trusted;
-}
diff --git a/www/plugins/facteur/phpmailer-php5/extras/ntlm_sasl_client.php b/www/plugins/facteur/phpmailer-php5/extras/ntlm_sasl_client.php
deleted file mode 100644 (file)
index 3fd5392..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-<?php
-/*
- * ntlm_sasl_client.php
- *
- * @(#) $Id: ntlm_sasl_client.php,v 1.3 2004/11/17 08:00:37 mlemos Exp $
- *
- */
-
-define("SASL_NTLM_STATE_START", 0);
-define("SASL_NTLM_STATE_IDENTIFY_DOMAIN", 1);
-define("SASL_NTLM_STATE_RESPOND_CHALLENGE", 2);
-define("SASL_NTLM_STATE_DONE", 3);
-define("SASL_FAIL", -1);
-define("SASL_CONTINUE", 1);
-
-class ntlm_sasl_client_class
-{
-    public $credentials = array();
-    public $state = SASL_NTLM_STATE_START;
-
-    public function initialize(&$client)
-    {
-        if (!function_exists($function = "mcrypt_encrypt")
-            || !function_exists($function = "mhash")
-        ) {
-            $extensions = array(
-                "mcrypt_encrypt" => "mcrypt",
-                "mhash" => "mhash"
-            );
-            $client->error = "the extension " . $extensions[$function] .
-                " required by the NTLM SASL client class is not available in this PHP configuration";
-            return (0);
-        }
-        return (1);
-    }
-
-    public function ASCIIToUnicode($ascii)
-    {
-        for ($unicode = "", $a = 0; $a < strlen($ascii); $a++) {
-            $unicode .= substr($ascii, $a, 1) . chr(0);
-        }
-        return ($unicode);
-    }
-
-    public function typeMsg1($domain, $workstation)
-    {
-        $domain_length = strlen($domain);
-        $workstation_length = strlen($workstation);
-        $workstation_offset = 32;
-        $domain_offset = $workstation_offset + $workstation_length;
-        return (
-            "NTLMSSP\0" .
-            "\x01\x00\x00\x00" .
-            "\x07\x32\x00\x00" .
-            pack("v", $domain_length) .
-            pack("v", $domain_length) .
-            pack("V", $domain_offset) .
-            pack("v", $workstation_length) .
-            pack("v", $workstation_length) .
-            pack("V", $workstation_offset) .
-            $workstation .
-            $domain
-        );
-    }
-
-    public function NTLMResponse($challenge, $password)
-    {
-        $unicode = $this->ASCIIToUnicode($password);
-        $md4 = mhash(MHASH_MD4, $unicode);
-        $padded = $md4 . str_repeat(chr(0), 21 - strlen($md4));
-        $iv_size = mcrypt_get_iv_size(MCRYPT_DES, MCRYPT_MODE_ECB);
-        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
-        for ($response = "", $third = 0; $third < 21; $third += 7) {
-            for ($packed = "", $p = $third; $p < $third + 7; $p++) {
-                $packed .= str_pad(decbin(ord(substr($padded, $p, 1))), 8, "0", STR_PAD_LEFT);
-            }
-            for ($key = "", $p = 0; $p < strlen($packed); $p += 7) {
-                $s = substr($packed, $p, 7);
-                $b = $s . ((substr_count($s, "1") % 2) ? "0" : "1");
-                $key .= chr(bindec($b));
-            }
-            $ciphertext = mcrypt_encrypt(MCRYPT_DES, $key, $challenge, MCRYPT_MODE_ECB, $iv);
-            $response .= $ciphertext;
-        }
-        return $response;
-    }
-
-    public function typeMsg3($ntlm_response, $user, $domain, $workstation)
-    {
-        $domain_unicode = $this->ASCIIToUnicode($domain);
-        $domain_length = strlen($domain_unicode);
-        $domain_offset = 64;
-        $user_unicode = $this->ASCIIToUnicode($user);
-        $user_length = strlen($user_unicode);
-        $user_offset = $domain_offset + $domain_length;
-        $workstation_unicode = $this->ASCIIToUnicode($workstation);
-        $workstation_length = strlen($workstation_unicode);
-        $workstation_offset = $user_offset + $user_length;
-        $lm = "";
-        $lm_length = strlen($lm);
-        $lm_offset = $workstation_offset + $workstation_length;
-        $ntlm = $ntlm_response;
-        $ntlm_length = strlen($ntlm);
-        $ntlm_offset = $lm_offset + $lm_length;
-        $session = "";
-        $session_length = strlen($session);
-        $session_offset = $ntlm_offset + $ntlm_length;
-        return (
-            "NTLMSSP\0" .
-            "\x03\x00\x00\x00" .
-            pack("v", $lm_length) .
-            pack("v", $lm_length) .
-            pack("V", $lm_offset) .
-            pack("v", $ntlm_length) .
-            pack("v", $ntlm_length) .
-            pack("V", $ntlm_offset) .
-            pack("v", $domain_length) .
-            pack("v", $domain_length) .
-            pack("V", $domain_offset) .
-            pack("v", $user_length) .
-            pack("v", $user_length) .
-            pack("V", $user_offset) .
-            pack("v", $workstation_length) .
-            pack("v", $workstation_length) .
-            pack("V", $workstation_offset) .
-            pack("v", $session_length) .
-            pack("v", $session_length) .
-            pack("V", $session_offset) .
-            "\x01\x02\x00\x00" .
-            $domain_unicode .
-            $user_unicode .
-            $workstation_unicode .
-            $lm .
-            $ntlm
-        );
-    }
-
-    public function start(&$client, &$message, &$interactions)
-    {
-        if ($this->state != SASL_NTLM_STATE_START) {
-            $client->error = "NTLM authentication state is not at the start";
-            return (SASL_FAIL);
-        }
-        $this->credentials = array(
-            "user" => "",
-            "password" => "",
-            "realm" => "",
-            "workstation" => ""
-        );
-        $defaults = array();
-        $status = $client->GetCredentials($this->credentials, $defaults, $interactions);
-        if ($status == SASL_CONTINUE) {
-            $this->state = SASL_NTLM_STATE_IDENTIFY_DOMAIN;
-        }
-        unset($message);
-        return ($status);
-    }
-
-    public function step(&$client, $response, &$message, &$interactions)
-    {
-        switch ($this->state) {
-            case SASL_NTLM_STATE_IDENTIFY_DOMAIN:
-                $message = $this->typeMsg1($this->credentials["realm"], $this->credentials["workstation"]);
-                $this->state = SASL_NTLM_STATE_RESPOND_CHALLENGE;
-                break;
-            case SASL_NTLM_STATE_RESPOND_CHALLENGE:
-                $ntlm_response = $this->NTLMResponse(substr($response, 24, 8), $this->credentials["password"]);
-                $message = $this->typeMsg3(
-                    $ntlm_response,
-                    $this->credentials["user"],
-                    $this->credentials["realm"],
-                    $this->credentials["workstation"]
-                );
-                $this->state = SASL_NTLM_STATE_DONE;
-                break;
-            case SASL_NTLM_STATE_DONE:
-                $client->error = "NTLM authentication was finished without success";
-                return (SASL_FAIL);
-            default:
-                $client->error = "invalid NTLM authentication step state";
-                return (SASL_FAIL);
-        }
-        return (SASL_CONTINUE);
-    }
-}
diff --git a/www/plugins/facteur/phpmailer-php5/get_oauth_token.php b/www/plugins/facteur/phpmailer-php5/get_oauth_token.php
deleted file mode 100644 (file)
index 2c26d0f..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-/**
- * Get an OAuth2 token from Google.
- * * Install this script on your server so that it's accessible
- * as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
- * e.g.: http://localhost/phpmail/get_oauth_token.php
- * * Ensure dependencies are installed with 'composer install'
- * * Set up an app in your Google developer console
- * * Set the script address as the app's redirect URL
- * If no refresh token is obtained when running this file, revoke access to your app
- * using link: https://accounts.google.com/b/0/IssuedAuthSubTokens and run the script again.
- * This script requires PHP 5.4 or later
- * PHP Version 5.4
- */
-
-namespace League\OAuth2\Client\Provider;
-
-require 'vendor/autoload.php';
-
-use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
-use League\OAuth2\Client\Token\AccessToken;
-use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
-use Psr\Http\Message\ResponseInterface;
-
-session_start();
-
-//If this automatic URL doesn't work, set it yourself manually
-$redirectUri = isset($_SERVER['HTTPS']) ? 'https://' : 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
-//$redirectUri = 'http://localhost/phpmailer/get_oauth_token.php';
-
-//These details obtained are by setting up app in Google developer console.
-$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
-$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
-
-class Google extends AbstractProvider
-{
-    use BearerAuthorizationTrait;
-
-    const ACCESS_TOKEN_RESOURCE_OWNER_ID = 'id';
-
-    /**
-     * @var string If set, this will be sent to google as the "access_type" parameter.
-     * @link https://developers.google.com/accounts/docs/OAuth2WebServer#offline
-     */
-    protected $accessType;
-
-    /**
-     * @var string If set, this will be sent to google as the "hd" parameter.
-     * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param
-     */
-    protected $hostedDomain;
-
-    /**
-     * @var string If set, this will be sent to google as the "scope" parameter.
-     * @link https://developers.google.com/gmail/api/auth/scopes
-     */
-    protected $scope;
-
-    public function getBaseAuthorizationUrl()
-    {
-        return 'https://accounts.google.com/o/oauth2/auth';
-    }
-
-    public function getBaseAccessTokenUrl(array $params)
-    {
-        return 'https://accounts.google.com/o/oauth2/token';
-    }
-
-    public function getResourceOwnerDetailsUrl(AccessToken $token)
-    {
-       return ' ';
-    }
-
-    protected function getAuthorizationParameters(array $options)
-    {
-       if (is_array($this->scope)) {
-            $separator = $this->getScopeSeparator();
-            $this->scope = implode($separator, $this->scope);
-        }
-
-        $params = array_merge(
-            parent::getAuthorizationParameters($options),
-            array_filter([
-                'hd'          => $this->hostedDomain,
-                'access_type' => $this->accessType,
-               'scope'       => $this->scope,
-                // if the user is logged in with more than one account ask which one to use for the login!
-                'authuser'    => '-1'
-            ])
-        );
-        return $params;
-    }
-
-    protected function getDefaultScopes()
-    {
-        return [
-            'email',
-            'openid',
-            'profile',
-        ];
-    }
-
-    protected function getScopeSeparator()
-    {
-        return ' ';
-    }
-
-    protected function checkResponse(ResponseInterface $response, $data)
-    {
-        if (!empty($data['error'])) {
-            $code  = 0;
-            $error = $data['error'];
-
-            if (is_array($error)) {
-                $code  = $error['code'];
-                $error = $error['message'];
-            }
-
-            throw new IdentityProviderException($error, $code, $data);
-        }
-    }
-
-    protected function createResourceOwner(array $response, AccessToken $token)
-    {
-        return new GoogleUser($response);
-    }
-}
-
-
-//Set Redirect URI in Developer Console as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
-$provider = new Google(
-    array(
-        'clientId' => $clientId,
-        'clientSecret' => $clientSecret,
-        'redirectUri' => $redirectUri,
-        'scope' => array('https://mail.google.com/'),
-       'accessType' => 'offline'
-    )
-);
-
-if (!isset($_GET['code'])) {
-    // If we don't have an authorization code then get one
-    $authUrl = $provider->getAuthorizationUrl();
-    $_SESSION['oauth2state'] = $provider->getState();
-    header('Location: ' . $authUrl);
-    exit;
-// Check given state against previously stored one to mitigate CSRF attack
-} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
-    unset($_SESSION['oauth2state']);
-    exit('Invalid state');
-} else {
-    // Try to get an access token (using the authorization code grant)
-    $token = $provider->getAccessToken(
-        'authorization_code',
-        array(
-            'code' => $_GET['code']
-        )
-    );
-
-    // Use this to get a new access token if the old one expires
-    echo 'Refresh Token: ' . $token->getRefreshToken();
-}
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-am.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-am.php
deleted file mode 100755 (executable)
index ff2a969..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Armenian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Hrayr Grigoryan <hrayr@bits.am>
- */
-$PHPMAILER_LANG['authenticate']         = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP -ի սխալ: տվյալները ընդունված չեն.';
-$PHPMAILER_LANG['empty_message']        = 'Հաղորդագրությունը դատարկ է';
-$PHPMAILER_LANG['encoding']             = 'Կոդավորման անհայտ տեսակ: ';
-$PHPMAILER_LANG['execute']              = 'Չհաջողվեց իրականացնել հրամանը: ';
-$PHPMAILER_LANG['file_access']          = 'Ֆայլը հասանելի չէ: ';
-$PHPMAILER_LANG['file_open']            = 'Ֆայլի սխալ: ֆայլը չհաջողվեց բացել: ';
-$PHPMAILER_LANG['from_failed']          = 'Ուղարկողի հետևյալ հասցեն սխալ է: ';
-$PHPMAILER_LANG['instantiate']          = 'Հնարավոր չէ կանչել mail ֆունկցիան.';
-$PHPMAILER_LANG['invalid_address']      = 'Հասցեն սխալ է: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' փոստային սերվերի հետ չի աշխատում.';
-$PHPMAILER_LANG['provide_address']      = 'Անհրաժեշտ է տրամադրել գոնե մեկ ստացողի e-mail հասցե.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP -ի սխալ: չի հաջողվել ուղարկել հետևյալ ստացողների հասցեներին: ';
-$PHPMAILER_LANG['signing']              = 'Ստորագրման սխալ: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP -ի connect() ֆունկցիան չի հաջողվել';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP սերվերի սխալ: ';
-$PHPMAILER_LANG['variable_set']         = 'Չի հաջողվում ստեղծել կամ վերափոխել փոփոխականը: ';
-$PHPMAILER_LANG['extension_missing']    = 'Հավելվածը բացակայում է: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ar.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ar.php
deleted file mode 100755 (executable)
index 790e2a5..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Arabic PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author bahjat al mostafa <bahjat983@hotmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'خطأ SMTP : لا يمكن تأكيد الهوية.';
-$PHPMAILER_LANG['connect_host']         = 'خطأ SMTP: لا يمكن الاتصال بالخادم SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'خطأ SMTP: لم يتم قبول المعلومات .';
-$PHPMAILER_LANG['empty_message']        = 'نص الرسالة فارغ';
-$PHPMAILER_LANG['encoding']             = 'ترميز غير معروف: ';
-$PHPMAILER_LANG['execute']              = 'لا يمكن تنفيذ : ';
-$PHPMAILER_LANG['file_access']          = 'لا يمكن الوصول للملف: ';
-$PHPMAILER_LANG['file_open']            = 'خطأ في الملف: لا يمكن فتحه: ';
-$PHPMAILER_LANG['from_failed']          = 'خطأ على مستوى عنوان المرسل : ';
-$PHPMAILER_LANG['instantiate']          = 'لا يمكن توفير خدمة البريد.';
-$PHPMAILER_LANG['invalid_address']      = 'الإرسال غير ممكن لأن عنوان البريد الإلكتروني غير صالح: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' برنامج الإرسال غير مدعوم.';
-$PHPMAILER_LANG['provide_address']      = 'يجب توفير عنوان البريد الإلكتروني لمستلم واحد على الأقل.';
-$PHPMAILER_LANG['recipients_failed']    = 'خطأ SMTP: الأخطاء التالية ' .
-                                          'فشل في الارسال لكل من : ';
-$PHPMAILER_LANG['signing']              = 'خطأ في التوقيع: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() غير ممكن.';
-$PHPMAILER_LANG['smtp_error']           = 'خطأ على مستوى الخادم SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'لا يمكن تعيين أو إعادة تعيين متغير: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-az.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-az.php
deleted file mode 100644 (file)
index 3749d83..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Azerbaijani PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author @mirjalal
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP xətası: Giriş uğursuz oldu.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP xətası: SMTP serverinə qoşulma uğursuz oldu.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP xətası: Verilənlər qəbul edilməyib.';
-$PHPMAILER_LANG['empty_message']        = 'Boş mesaj göndərilə bilməz.';
-$PHPMAILER_LANG['encoding']             = 'Qeyri-müəyyən kodlaşdırma: ';
-$PHPMAILER_LANG['execute']              = 'Əmr yerinə yetirilmədi: ';
-$PHPMAILER_LANG['file_access']          = 'Fayla giriş yoxdur: ';
-$PHPMAILER_LANG['file_open']            = 'Fayl xətası: Fayl açıla bilmədi: ';
-$PHPMAILER_LANG['from_failed']          = 'Göstərilən poçtlara göndərmə uğursuz oldu: ';
-$PHPMAILER_LANG['instantiate']          = 'Mail funksiyası işə salına bilmədi.';
-$PHPMAILER_LANG['invalid_address']      = 'Düzgün olmayan e-mail adresi: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' - e-mail kitabxanası dəstəklənmir.';
-$PHPMAILER_LANG['provide_address']      = 'Ən azı bir e-mail adresi daxil edilməlidir.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP xətası: Aşağıdakı ünvanlar üzrə alıcılara göndərmə uğursuzdur: ';
-$PHPMAILER_LANG['signing']              = 'İmzalama xətası: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP serverinə qoşulma uğursuz oldu.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri xətası: ';
-$PHPMAILER_LANG['variable_set']         = 'Dəyişənin quraşdırılması uğursuz oldu: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-be.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-be.php
deleted file mode 100644 (file)
index e2f98f0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Belarusian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Aleksander Maksymiuk <info@setpro.pl>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Памылка SMTP: памылка ідэнтыфікацыі.';
-$PHPMAILER_LANG['connect_host']         = 'Памылка SMTP: нельга ўстанавіць сувязь з SMTP-серверам.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Памылка SMTP: звесткі непрынятыя.';
-$PHPMAILER_LANG['empty_message']        = 'Пустое паведамленне.';
-$PHPMAILER_LANG['encoding']             = 'Невядомая кадыроўка тэксту: ';
-$PHPMAILER_LANG['execute']              = 'Нельга выканаць каманду: ';
-$PHPMAILER_LANG['file_access']          = 'Няма доступу да файла: ';
-$PHPMAILER_LANG['file_open']            = 'Нельга адкрыць файл: ';
-$PHPMAILER_LANG['from_failed']          = 'Няправільны адрас адпраўніка: ';
-$PHPMAILER_LANG['instantiate']          = 'Нельга прымяніць функцыю mail().';
-$PHPMAILER_LANG['invalid_address']      = 'Нельга даслаць паведамленне, няправільны email атрымальніка: ';
-$PHPMAILER_LANG['provide_address']      = 'Запоўніце, калі ласка, правільны email атрымальніка.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' - паштовы сервер не падтрымліваецца.';
-$PHPMAILER_LANG['recipients_failed']    = 'Памылка SMTP: няправільныя атрымальнікі: ';
-$PHPMAILER_LANG['signing']              = 'Памылка подпісу паведамлення: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Памылка сувязі з SMTP-серверам.';
-$PHPMAILER_LANG['smtp_error']           = 'Памылка SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Нельга ўстанавіць або перамяніць значэнне пераменнай: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-bg.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-bg.php
deleted file mode 100644 (file)
index b22941f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Bulgarian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Mikhail Kyosev <mialygk@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: Не може да се удостовери пред сървъра.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: Не може да се свърже с SMTP хоста.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: данните не са приети.';
-$PHPMAILER_LANG['empty_message']        = 'Съдържанието на съобщението е празно';
-$PHPMAILER_LANG['encoding']             = 'Неизвестно кодиране: ';
-$PHPMAILER_LANG['execute']              = 'Не може да се изпълни: ';
-$PHPMAILER_LANG['file_access']          = 'Няма достъп до файл: ';
-$PHPMAILER_LANG['file_open']            = 'Файлова грешка: Не може да се отвори файл: ';
-$PHPMAILER_LANG['from_failed']          = 'Следните адреси за подател са невалидни: ';
-$PHPMAILER_LANG['instantiate']          = 'Не може да се инстанцира функцията mail.';
-$PHPMAILER_LANG['invalid_address']      = 'Невалиден адрес: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' - пощенски сървър не се поддържа.';
-$PHPMAILER_LANG['provide_address']      = 'Трябва да предоставите поне един email адрес за получател.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: Следните адреси за Получател са невалидни: ';
-$PHPMAILER_LANG['signing']              = 'Грешка при подписване: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP провален connect().';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP сървърна грешка: ';
-$PHPMAILER_LANG['variable_set']         = 'Не може да се установи или възстанови променлива: ';
-$PHPMAILER_LANG['extension_missing']    = 'Липсва разширение: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ca.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ca.php
deleted file mode 100644 (file)
index 4117596..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Catalan PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Ivan <web AT microstudi DOT com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Error SMTP: No s’ha pogut autenticar.';
-$PHPMAILER_LANG['connect_host']         = 'Error SMTP: No es pot connectar al servidor SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Dades no acceptades.';
-$PHPMAILER_LANG['empty_message']        = 'El cos del missatge està buit.';
-$PHPMAILER_LANG['encoding']             = 'Codificació desconeguda: ';
-$PHPMAILER_LANG['execute']              = 'No es pot executar: ';
-$PHPMAILER_LANG['file_access']          = 'No es pot accedir a l’arxiu: ';
-$PHPMAILER_LANG['file_open']            = 'Error d’Arxiu: No es pot obrir l’arxiu: ';
-$PHPMAILER_LANG['from_failed']          = 'La(s) següent(s) adreces de remitent han fallat: ';
-$PHPMAILER_LANG['instantiate']          = 'No s’ha pogut crear una instància de la funció Mail.';
-$PHPMAILER_LANG['invalid_address']      = 'Adreça d’email invalida: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat';
-$PHPMAILER_LANG['provide_address']      = 'S’ha de proveir almenys una adreça d’email com a destinatari.';
-$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Els següents destinataris han fallat: ';
-$PHPMAILER_LANG['signing']              = 'Error al signar: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Ha fallat el SMTP Connect().';
-$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'No s’ha pogut establir o restablir la variable: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ch.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ch.php
deleted file mode 100755 (executable)
index 4fda6b8..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Chinese PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author LiuXin <http://www.80x86.cn/blog/>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP 错误:身份验证失败。';
-$PHPMAILER_LANG['connect_host']         = 'SMTP 错误: 不能连接SMTP主机。';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 错误: 数据不可接受。';
-//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
-$PHPMAILER_LANG['encoding']             = '未知编码:';
-$PHPMAILER_LANG['execute']              = '不能执行: ';
-$PHPMAILER_LANG['file_access']          = '不能访问文件:';
-$PHPMAILER_LANG['file_open']            = '文件错误:不能打开文件:';
-$PHPMAILER_LANG['from_failed']          = '下面的发送地址邮件发送失败了: ';
-$PHPMAILER_LANG['instantiate']          = '不能实现mail方法。';
-//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。';
-$PHPMAILER_LANG['provide_address']      = '您必须提供至少一个 收信人的email地址。';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP 错误: 下面的 收件人失败了: ';
-//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
-//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
-//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
-//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-cs.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-cs.php
deleted file mode 100644 (file)
index 8cb1a3d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Czech PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Chyba SMTP: Autentizace selhala.';
-$PHPMAILER_LANG['connect_host']         = 'Chyba SMTP: Nelze navázat spojení se SMTP serverem.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Chyba SMTP: Data nebyla přijata.';
-$PHPMAILER_LANG['empty_message']        = 'Prázdné tělo zprávy';
-$PHPMAILER_LANG['encoding']             = 'Neznámé kódování: ';
-$PHPMAILER_LANG['execute']              = 'Nelze provést: ';
-$PHPMAILER_LANG['file_access']          = 'Nelze získat přístup k souboru: ';
-$PHPMAILER_LANG['file_open']            = 'Chyba souboru: Nelze otevřít soubor pro čtení: ';
-$PHPMAILER_LANG['from_failed']          = 'Následující adresa odesílatele je nesprávná: ';
-$PHPMAILER_LANG['instantiate']          = 'Nelze vytvořit instanci emailové funkce.';
-$PHPMAILER_LANG['invalid_address']      = 'Neplatná adresa: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer není podporován.';
-$PHPMAILER_LANG['provide_address']      = 'Musíte zadat alespoň jednu emailovou adresu příjemce.';
-$PHPMAILER_LANG['recipients_failed']    = 'Chyba SMTP: Následující adresy příjemců nejsou správně: ';
-$PHPMAILER_LANG['signing']              = 'Chyba přihlašování: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() selhal.';
-$PHPMAILER_LANG['smtp_error']           = 'Chyba SMTP serveru: ';
-$PHPMAILER_LANG['variable_set']         = 'Nelze nastavit nebo změnit proměnnou: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-da.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-da.php
deleted file mode 100644 (file)
index e725f4b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Danish PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Mikael Stokkebro <info@stokkebro.dk>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP fejl: Kunne ikke logge på.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP fejl: Kunne ikke tilslutte SMTP serveren.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fejl: Data kunne ikke accepteres.';
-//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
-$PHPMAILER_LANG['encoding']             = 'Ukendt encode-format: ';
-$PHPMAILER_LANG['execute']              = 'Kunne ikke køre: ';
-$PHPMAILER_LANG['file_access']          = 'Ingen adgang til fil: ';
-$PHPMAILER_LANG['file_open']            = 'Fil fejl: Kunne ikke åbne filen: ';
-$PHPMAILER_LANG['from_failed']          = 'Følgende afsenderadresse er forkert: ';
-$PHPMAILER_LANG['instantiate']          = 'Kunne ikke initialisere email funktionen.';
-//$PHPMAILER_LANG['invalid_address']        = 'Invalid address: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
-$PHPMAILER_LANG['provide_address']      = 'Du skal indtaste mindst en modtagers emailadresse.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP fejl: Følgende modtagere er forkerte: ';
-//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
-//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
-//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
-//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-de.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-de.php
deleted file mode 100755 (executable)
index aa987a9..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * German PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP-Fehler: Konnte keine Verbindung zum SMTP-Host herstellen.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-Fehler: Daten werden nicht akzeptiert.';
-$PHPMAILER_LANG['empty_message']        = 'E-Mail-Inhalt ist leer.';
-$PHPMAILER_LANG['encoding']             = 'Unbekannte Kodierung: ';
-$PHPMAILER_LANG['execute']              = 'Konnte folgenden Befehl nicht ausführen: ';
-$PHPMAILER_LANG['file_access']          = 'Zugriff auf folgende Datei fehlgeschlagen: ';
-$PHPMAILER_LANG['file_open']            = 'Dateifehler: Konnte folgende Datei nicht öffnen: ';
-$PHPMAILER_LANG['from_failed']          = 'Die folgende Absenderadresse ist nicht korrekt: ';
-$PHPMAILER_LANG['instantiate']          = 'Mail-Funktion konnte nicht initialisiert werden.';
-$PHPMAILER_LANG['invalid_address']      = 'Die Adresse ist ungültig: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
-$PHPMAILER_LANG['provide_address']      = 'Bitte geben Sie mindestens eine Empfängeradresse an.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP-Fehler: Die folgenden Empfänger sind nicht korrekt: ';
-$PHPMAILER_LANG['signing']              = 'Fehler beim Signieren: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Verbindung zum SMTP-Server fehlgeschlagen.';
-$PHPMAILER_LANG['smtp_error']           = 'Fehler vom SMTP-Server: ';
-$PHPMAILER_LANG['variable_set']         = 'Kann Variable nicht setzen oder zurücksetzen: ';
-$PHPMAILER_LANG['extension_missing']    = 'Fehlende Erweiterung: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-el.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-el.php
deleted file mode 100644 (file)
index 7109641..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Greek PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP Σφάλμα: Αδυναμία πιστοποίησης (authentication).';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Σφάλμα: Αδυναμία σύνδεσης στον SMTP-Host.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Σφάλμα: Τα δεδομένα δεν έγιναν αποδεκτά.';
-$PHPMAILER_LANG['empty_message']        = 'Το E-Mail δεν έχει περιεχόμενο .';
-$PHPMAILER_LANG['encoding']             = 'Αγνωστο Encoding-Format: ';
-$PHPMAILER_LANG['execute']              = 'Αδυναμία εκτέλεσης ακόλουθης εντολής: ';
-$PHPMAILER_LANG['file_access']          = 'Αδυναμία προσπέλασης του αρχείου: ';
-$PHPMAILER_LANG['file_open']            = 'Σφάλμα Αρχείου: Δεν είναι δυνατό το άνοιγμα του ακόλουθου αρχείου: ';
-$PHPMAILER_LANG['from_failed']          = 'Η παρακάτω διεύθυνση αποστολέα δεν είναι σωστή: ';
-$PHPMAILER_LANG['instantiate']          = 'Αδυναμία εκκίνησης Mail function.';
-$PHPMAILER_LANG['invalid_address']      = 'Το μήνυμα δεν εστάλη, η διεύθυνση δεν είναι έγκυρη: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.';
-$PHPMAILER_LANG['provide_address']      = 'Παρακαλούμε δώστε τουλάχιστον μια e-mail διεύθυνση παραλήπτη.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Σφάλμα: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';
-$PHPMAILER_LANG['signing']              = 'Σφάλμα υπογραφής: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Αποτυχία σύνδεσης στον SMTP Server.';
-$PHPMAILER_LANG['smtp_error']           = 'Σφάλμα από τον SMTP Server: ';
-$PHPMAILER_LANG['variable_set']         = 'Αδυναμία ορισμού ή αρχικοποίησης μεταβλητής: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-eo.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-eo.php
deleted file mode 100644 (file)
index 2cf7d5c..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Esperanto PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Eraro de servilo SMTP : aŭtentigo malsukcesis.';
-$PHPMAILER_LANG['connect_host']         = 'Eraro de servilo SMTP : konektado al servilo malsukcesis.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Eraro de servilo SMTP : neĝustaj datumoj.';
-$PHPMAILER_LANG['empty_message']        = 'Teksto de mesaĝo mankas.';
-$PHPMAILER_LANG['encoding']             = 'Nekonata kodoprezento: ';
-$PHPMAILER_LANG['execute']              = 'Lanĉi rulumadon ne eblis: ';
-$PHPMAILER_LANG['file_access']          = 'Aliro al dosiero ne sukcesis: ';
-$PHPMAILER_LANG['file_open']            = 'Eraro de dosiero: malfermo neeblas: ';
-$PHPMAILER_LANG['from_failed']          = 'Jena adreso de sendinto malsukcesis: ';
-$PHPMAILER_LANG['instantiate']          = 'Genero de retmesaĝa funkcio neeblis.';
-$PHPMAILER_LANG['invalid_address']      = 'Retadreso ne validas: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mesaĝilo ne subtenata.';
-$PHPMAILER_LANG['provide_address']      = 'Vi devas tajpi almenaŭ unu recevontan retadreson.';
-$PHPMAILER_LANG['recipients_failed']    = 'Eraro de servilo SMTP : la jenaj poŝtrecivuloj kaŭzis eraron: ';
-$PHPMAILER_LANG['signing']              = 'Eraro de subskribo: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP konektado malsukcesis.';
-$PHPMAILER_LANG['smtp_error']           = 'Eraro de servilo SMTP : ';
-$PHPMAILER_LANG['variable_set']         = 'Variablo ne pravalorizeblas aŭ ne repravalorizeblas: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-es.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-es.php
deleted file mode 100755 (executable)
index d2eac8d..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Spanish PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Matt Sturdy <matt.sturdy@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Error SMTP: Imposible autentificar.';
-$PHPMAILER_LANG['connect_host']         = 'Error SMTP: Imposible conectar al servidor SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Datos no aceptados.';
-$PHPMAILER_LANG['empty_message']        = 'El cuerpo del mensaje está vacío';
-$PHPMAILER_LANG['encoding']             = 'Codificación desconocida: ';
-$PHPMAILER_LANG['execute']              = 'Imposible ejecutar: ';
-$PHPMAILER_LANG['file_access']          = 'Imposible acceder al archivo: ';
-$PHPMAILER_LANG['file_open']            = 'Error de Archivo: Imposible abrir el archivo: ';
-$PHPMAILER_LANG['from_failed']          = 'La(s) siguiente(s) direcciones de remitente fallaron: ';
-$PHPMAILER_LANG['instantiate']          = 'Imposible crear una instancia de la función Mail.';
-$PHPMAILER_LANG['invalid_address']      = 'Imposible enviar: dirección de email inválido: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.';
-$PHPMAILER_LANG['provide_address']      = 'Debe proporcionar al menos una dirección de email de destino.';
-$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Los siguientes destinos fallaron: ';
-$PHPMAILER_LANG['signing']              = 'Error al firmar: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falló.';
-$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'No se pudo configurar la variable: ';
-$PHPMAILER_LANG['extension_missing']    = 'Extensión faltante: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-et.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-et.php
deleted file mode 100755 (executable)
index 7e06da1..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Estonian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Indrek Päri
- * @author Elan Ruusamäe <glen@delfi.ee>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP Viga: Autoriseerimise viga.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Viga: Vigased andmed.';
-$PHPMAILER_LANG['empty_message']        = 'Tühi kirja sisu';
-$PHPMAILER_LANG["encoding"]             = 'Tundmatu kodeering: ';
-$PHPMAILER_LANG['execute']              = 'Tegevus ebaõnnestus: ';
-$PHPMAILER_LANG['file_access']          = 'Pole piisavalt õiguseid järgneva faili avamiseks: ';
-$PHPMAILER_LANG['file_open']            = 'Faili Viga: Faili avamine ebaõnnestus: ';
-$PHPMAILER_LANG['from_failed']          = 'Järgnev saatja e-posti aadress on vigane: ';
-$PHPMAILER_LANG['instantiate']          = 'mail funktiooni käivitamine ebaõnnestus.';
-$PHPMAILER_LANG['invalid_address']      = 'Saatmine peatatud, e-posti address vigane: ';
-$PHPMAILER_LANG['provide_address']      = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: ';
-$PHPMAILER_LANG["signing"]              = 'Viga allkirjastamisel: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() ebaõnnestus.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri viga: ';
-$PHPMAILER_LANG['variable_set']         = 'Ei õnnestunud määrata või lähtestada muutujat: ';
-$PHPMAILER_LANG['extension_missing']    = 'Nõutud laiendus on puudu: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fa.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fa.php
deleted file mode 100644 (file)
index ad0745c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Persian/Farsi PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Ali Jazayeri <jaza.ali@gmail.com>
- * @author Mohammad Hossein Mojtahedi <mhm5000@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'خطای SMTP: احراز هویت با شکست مواجه شد.';
-$PHPMAILER_LANG['connect_host']         = 'خطای SMTP: اتصال به سرور SMTP برقرار نشد.';
-$PHPMAILER_LANG['data_not_accepted']    = 'خطای SMTP: داده‌ها نا‌درست هستند.';
-$PHPMAILER_LANG['empty_message']        = 'بخش متن پیام خالی است.';
-$PHPMAILER_LANG['encoding']             = 'کد‌گذاری نا‌شناخته: ';
-$PHPMAILER_LANG['execute']              = 'امکان اجرا وجود ندارد: ';
-$PHPMAILER_LANG['file_access']          = 'امکان دسترسی به فایل وجود ندارد: ';
-$PHPMAILER_LANG['file_open']            = 'خطای File: امکان بازکردن فایل وجود ندارد: ';
-$PHPMAILER_LANG['from_failed']          = 'آدرس فرستنده اشتباه است: ';
-$PHPMAILER_LANG['instantiate']          = 'امکان معرفی تابع ایمیل وجود ندارد.';
-$PHPMAILER_LANG['invalid_address']      = 'آدرس ایمیل معتبر نیست: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer پشتیبانی نمی‌شود.';
-$PHPMAILER_LANG['provide_address']      = 'باید حداقل یک آدرس گیرنده وارد کنید.';
-$PHPMAILER_LANG['recipients_failed']    = 'خطای SMTP: ارسال به آدرس گیرنده با خطا مواجه شد: ';
-$PHPMAILER_LANG['signing']              = 'خطا در امضا: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'خطا در اتصال به SMTP.';
-$PHPMAILER_LANG['smtp_error']           = 'خطا در SMTP Server: ';
-$PHPMAILER_LANG['variable_set']         = 'امکان ارسال یا ارسال مجدد متغیر‌ها وجود ندارد: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fi.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fi.php
deleted file mode 100644 (file)
index ec4e752..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Finnish PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Jyry Kuukanen
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP-virhe: käyttäjätunnistus epäonnistui.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP-virhe: yhteys palvelimeen ei onnistu.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-virhe: data on virheellinen.';
-//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
-$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';
-$PHPMAILER_LANG['execute']              = 'Suoritus epäonnistui: ';
-$PHPMAILER_LANG['file_access']          = 'Seuraavaan tiedostoon ei ole oikeuksia: ';
-$PHPMAILER_LANG['file_open']            = 'Tiedostovirhe: Ei voida avata tiedostoa: ';
-$PHPMAILER_LANG['from_failed']          = 'Seuraava lähettäjän osoite on virheellinen: ';
-$PHPMAILER_LANG['instantiate']          = 'mail-funktion luonti epäonnistui.';
-//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
-$PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.';
-$PHPMAILER_LANG['provide_address']      = 'Aseta vähintään yksi vastaanottajan sähk&ouml;postiosoite.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.';
-$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';
-//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
-//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
-//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
-//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fo.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fo.php
deleted file mode 100644 (file)
index 68cdef1..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Faroese PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Dávur Sørensen <http://www.profo-webdesign.dk>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP feilur: Kundi ikki góðkenna.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP feilur: Data ikki góðkent.';
-//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
-$PHPMAILER_LANG['encoding']             = 'Ókend encoding: ';
-$PHPMAILER_LANG['execute']              = 'Kundi ikki útføra: ';
-$PHPMAILER_LANG['file_access']          = 'Kundi ikki tilganga fílu: ';
-$PHPMAILER_LANG['file_open']            = 'Fílu feilur: Kundi ikki opna fílu: ';
-$PHPMAILER_LANG['from_failed']          = 'fylgjandi Frá/From adressa miseydnaðist: ';
-$PHPMAILER_LANG['instantiate']          = 'Kuni ikki instantiera mail funktión.';
-//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.';
-$PHPMAILER_LANG['provide_address']      = 'Tú skal uppgeva minst móttakara-emailadressu(r).';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: ';
-//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
-//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
-//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
-//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fr.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-fr.php
deleted file mode 100755 (executable)
index a661f98..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * French PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * Some French punctuation requires a thin non-breaking space (U+202F) character before it,
- * for example before a colon or exclamation mark.
- * There is one of these characters between these quotes: " "
- * @link http://unicode.org/udhr/n/notes_fra.html
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Erreur SMTP : échec de l\'authentification.';
-$PHPMAILER_LANG['connect_host']         = 'Erreur SMTP : impossible de se connecter au serveur SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Erreur SMTP : données incorrectes.';
-$PHPMAILER_LANG['empty_message']        = 'Corps du message vide.';
-$PHPMAILER_LANG['encoding']             = 'Encodage inconnu : ';
-$PHPMAILER_LANG['execute']              = 'Impossible de lancer l\'exécution : ';
-$PHPMAILER_LANG['file_access']          = 'Impossible d\'accéder au fichier : ';
-$PHPMAILER_LANG['file_open']            = 'Ouverture du fichier impossible : ';
-$PHPMAILER_LANG['from_failed']          = 'L\'adresse d\'expéditeur suivante a échoué : ';
-$PHPMAILER_LANG['instantiate']          = 'Impossible d\'instancier la fonction mail.';
-$PHPMAILER_LANG['invalid_address']      = 'L\'adresse courriel n\'est pas valide : ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
-$PHPMAILER_LANG['provide_address']      = 'Vous devez fournir au moins une adresse de destinataire.';
-$PHPMAILER_LANG['recipients_failed']    = 'Erreur SMTP : les destinataires suivants sont en erreur : ';
-$PHPMAILER_LANG['signing']              = 'Erreur de signature : ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Échec de la connexion SMTP.';
-$PHPMAILER_LANG['smtp_error']           = 'Erreur du serveur SMTP : ';
-$PHPMAILER_LANG['variable_set']         = 'Impossible d\'initialiser ou de réinitialiser une variable : ';
-$PHPMAILER_LANG['extension_missing']    = 'Extension manquante : ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-gl.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-gl.php
deleted file mode 100644 (file)
index 9b4ce4d..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Galician PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author by Donato Rouco <donatorouco@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Erro SMTP: Non puido ser autentificado.';
-$PHPMAILER_LANG['connect_host']         = 'Erro SMTP: Non puido conectar co servidor SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Erro SMTP: Datos non aceptados.';
-$PHPMAILER_LANG['empty_message']        = 'Corpo da mensaxe vacía';
-$PHPMAILER_LANG['encoding']             = 'Codificación descoñecida: ';
-$PHPMAILER_LANG['execute']              = 'Non puido ser executado: ';
-$PHPMAILER_LANG['file_access']          = 'Nob puido acceder ó arquivo: ';
-$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: No puido abrir o arquivo: ';
-$PHPMAILER_LANG['from_failed']          = 'A(s) seguinte(s) dirección(s) de remitente(s) deron erro: ';
-$PHPMAILER_LANG['instantiate']          = 'Non puido crear unha instancia da función Mail.';
-$PHPMAILER_LANG['invalid_address']      = 'Non puido envia-lo correo: dirección de email inválida: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer non está soportado.';
-$PHPMAILER_LANG['provide_address']      = 'Debe engadir polo menos unha dirección de email coma destino.';
-$PHPMAILER_LANG['recipients_failed']    = 'Erro SMTP: Os seguintes destinos fallaron: ';
-$PHPMAILER_LANG['signing']              = 'Erro ó firmar: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallou.';
-$PHPMAILER_LANG['smtp_error']           = 'Erro do servidor SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Non puidemos axustar ou reaxustar a variábel: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-he.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-he.php
deleted file mode 100644 (file)
index 70eb717..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Hebrew PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Ronny Sherer <ronny@hoojima.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'שגיאת SMTP: פעולת האימות נכשלה.';
-$PHPMAILER_LANG['connect_host']         = 'שגיאת SMTP: לא הצלחתי להתחבר לשרת SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'שגיאת SMTP: מידע לא התקבל.';
-$PHPMAILER_LANG['empty_message']        = 'גוף ההודעה ריק';
-$PHPMAILER_LANG['invalid_address']      = 'כתובת שגויה: ';
-$PHPMAILER_LANG['encoding']             = 'קידוד לא מוכר: ';
-$PHPMAILER_LANG['execute']              = 'לא הצלחתי להפעיל את: ';
-$PHPMAILER_LANG['file_access']          = 'לא ניתן לגשת לקובץ: ';
-$PHPMAILER_LANG['file_open']            = 'שגיאת קובץ: לא ניתן לגשת לקובץ: ';
-$PHPMAILER_LANG['from_failed']          = 'כתובות הנמענים הבאות נכשלו: ';
-$PHPMAILER_LANG['instantiate']          = 'לא הצלחתי להפעיל את פונקציית המייל.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' אינה נתמכת.';
-$PHPMAILER_LANG['provide_address']      = 'חובה לספק לפחות כתובת אחת של מקבל המייל.';
-$PHPMAILER_LANG['recipients_failed']    = 'שגיאת SMTP: הנמענים הבאים נכשלו: ';
-$PHPMAILER_LANG['signing']              = 'שגיאת חתימה: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
-$PHPMAILER_LANG['smtp_error']           = 'שגיאת שרת SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'לא ניתן לקבוע או לשנות את המשתנה: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-hr.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-hr.php
deleted file mode 100644 (file)
index 3822920..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Croatian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Hrvoj3e <hrvoj3e@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP Greška: Neuspjela autentikacija.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Ne mogu se spojiti na SMTP poslužitelj.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Greška: Podatci nisu prihvaćeni.';
-$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';
-$PHPMAILER_LANG['encoding']             = 'Nepoznati encoding: ';
-$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';
-$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';
-$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';
-$PHPMAILER_LANG['from_failed']          = 'SMTP Greška: Slanje s navedenih e-mail adresa nije uspjelo: ';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Greška: Slanje na navedenih e-mail adresa nije uspjelo: ';
-$PHPMAILER_LANG['instantiate']          = 'Ne mogu pokrenuti mail funkcionalnost.';
-$PHPMAILER_LANG['invalid_address']      = 'E-mail nije poslan. Neispravna e-mail adresa: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';
-$PHPMAILER_LANG['provide_address']      = 'Definirajte barem jednu adresu primatelja.';
-$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Spajanje na SMTP poslužitelj nije uspjelo.';
-$PHPMAILER_LANG['smtp_error']           = 'Greška SMTP poslužitelja: ';
-$PHPMAILER_LANG['variable_set']         = 'Ne mogu postaviti varijablu niti ju vratiti nazad: ';
-$PHPMAILER_LANG['extension_missing']    = 'Nedostaje proširenje: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-hu.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-hu.php
deleted file mode 100644 (file)
index d7ca888..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Hungarian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author @dominicus-75
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP hiba: az azonosítás sikertelen.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP hiba: nem lehet kapcsolódni az SMTP-szerverhez.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP hiba: adatok visszautasítva.';
-$PHPMAILER_LANG['empty_message']        = 'Üres az üzenettörzs.';
-$PHPMAILER_LANG['encoding']             = 'Ismeretlen kódolás: ';
-$PHPMAILER_LANG['execute']              = 'Nem lehet végrehajtani: ';
-$PHPMAILER_LANG['file_access']          = 'A következő fájl nem elérhető: ';
-$PHPMAILER_LANG['file_open']            = 'Fájl hiba: a következő fájlt nem lehet megnyitni: ';
-$PHPMAILER_LANG['from_failed']          = 'A feladóként megadott következő cím hibás: ';
-$PHPMAILER_LANG['instantiate']          = 'A PHP mail() függvényt nem sikerült végrehajtani.';
-$PHPMAILER_LANG['invalid_address']      = 'Érvénytelen cím: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' a mailer-osztály nem támogatott.';
-$PHPMAILER_LANG['provide_address']      = 'Legalább egy címzettet fel kell tüntetni.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP hiba: a címzettként megadott következő címek hibásak: ';
-$PHPMAILER_LANG['signing']              = 'Hibás aláírás: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Hiba az SMTP-kapcsolatban.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP-szerver hiba: ';
-$PHPMAILER_LANG['variable_set']         = 'A következő változók beállítása nem sikerült: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-id.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-id.php
deleted file mode 100644 (file)
index e57b524..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Indonesian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Cecep Prawiro <cecep.prawiro@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Kesalahan SMTP: Tidak dapat mengautentikasi.';
-$PHPMAILER_LANG['connect_host']         = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Kesalahan SMTP: Data tidak diterima peladen.';
-$PHPMAILER_LANG['empty_message']        = 'Isi pesan kosong';
-$PHPMAILER_LANG['encoding']             = 'Pengkodean karakter tidak dikenali: ';
-$PHPMAILER_LANG['execute']              = 'Tidak dapat menjalankan proses : ';
-$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses berkas : ';
-$PHPMAILER_LANG['file_open']            = 'Kesalahan File: Berkas tidak bisa dibuka : ';
-$PHPMAILER_LANG['from_failed']          = 'Alamat pengirim berikut mengakibatkan error : ';
-$PHPMAILER_LANG['instantiate']          = 'Tidak dapat menginisialisasi fungsi email';
-$PHPMAILER_LANG['invalid_address']      = 'Gagal terkirim, alamat email tidak valid : ';
-$PHPMAILER_LANG['provide_address']      = 'Harus disediakan minimal satu alamat tujuan';
-$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer tidak didukung';
-$PHPMAILER_LANG['recipients_failed']    = 'Kesalahan SMTP: Alamat tujuan berikut menghasilkan error : ';
-$PHPMAILER_LANG['signing']              = 'Kesalahan dalam tanda tangan : ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() gagal.';
-$PHPMAILER_LANG['smtp_error']           = 'Kesalahan peladen SMTP : ';
-$PHPMAILER_LANG['variable_set']         = 'Tidak berhasil mengatur atau mengatur ulang variable : ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-it.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-it.php
deleted file mode 100755 (executable)
index d2f4643..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Italian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Ilias Bartolini <brain79@inwind.it>
- * @author Stefano Sabatini <sabas88@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Impossibile autenticarsi.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Impossibile connettersi all\'host SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dati non accettati dal server.';
-$PHPMAILER_LANG['empty_message']        = 'Il corpo del messaggio è vuoto';
-$PHPMAILER_LANG['encoding']             = 'Codifica dei caratteri sconosciuta: ';
-$PHPMAILER_LANG['execute']              = 'Impossibile eseguire l\'operazione: ';
-$PHPMAILER_LANG['file_access']          = 'Impossibile accedere al file: ';
-$PHPMAILER_LANG['file_open']            = 'File Error: Impossibile aprire il file: ';
-$PHPMAILER_LANG['from_failed']          = 'I seguenti indirizzi mittenti hanno generato errore: ';
-$PHPMAILER_LANG['instantiate']          = 'Impossibile istanziare la funzione mail';
-$PHPMAILER_LANG['invalid_address']      = 'Impossibile inviare, l\'indirizzo email non è valido: ';
-$PHPMAILER_LANG['provide_address']      = 'Deve essere fornito almeno un indirizzo ricevente';
-$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: I seguenti indirizzi destinatari hanno generato un errore: ';
-$PHPMAILER_LANG['signing']              = 'Errore nella firma: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallita.';
-$PHPMAILER_LANG['smtp_error']           = 'Errore del server SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Impossibile impostare o resettare la variabile: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ja.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ja.php
deleted file mode 100644 (file)
index 2d77872..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Japanese PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Mitsuhiro Yoshida <http://mitstek.com/>
- * @author Yoshi Sakai <http://bluemooninc.jp/>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTPエラー: 認証できませんでした。';
-$PHPMAILER_LANG['connect_host']         = 'SMTPエラー: SMTPホストに接続できませんでした。';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTPエラー: データが受け付けられませんでした。';
-//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
-$PHPMAILER_LANG['encoding']             = '不明なエンコーディング: ';
-$PHPMAILER_LANG['execute']              = '実行できませんでした: ';
-$PHPMAILER_LANG['file_access']          = 'ファイルにアクセスできません: ';
-$PHPMAILER_LANG['file_open']            = 'ファイルエラー: ファイルを開けません: ';
-$PHPMAILER_LANG['from_failed']          = 'Fromアドレスを登録する際にエラーが発生しました: ';
-$PHPMAILER_LANG['instantiate']          = 'メール関数が正常に動作しませんでした。';
-//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
-$PHPMAILER_LANG['provide_address']      = '少なくとも1つメールアドレスを 指定する必要があります。';
-$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: ';
-//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
-//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
-//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
-//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ka.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ka.php
deleted file mode 100644 (file)
index dd1af8a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Georgian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP შეცდომა: ავტორიზაცია შეუძლებელია.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP შეცდომა: SMTP სერვერთან დაკავშირება შეუძლებელია.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP შეცდომა: მონაცემები არ იქნა მიღებული.';
-$PHPMAILER_LANG['encoding']             = 'კოდირების უცნობი ტიპი: ';
-$PHPMAILER_LANG['execute']              = 'შეუძლებელია შემდეგი ბრძანების შესრულება: ';
-$PHPMAILER_LANG['file_access']          = 'შეუძლებელია წვდომა ფაილთან: ';
-$PHPMAILER_LANG['file_open']            = 'ფაილური სისტემის შეცდომა: არ იხსნება ფაილი: ';
-$PHPMAILER_LANG['from_failed']          = 'გამგზავნის არასწორი მისამართი: ';
-$PHPMAILER_LANG['instantiate']          = 'mail ფუნქციის გაშვება ვერ ხერხდება.';
-$PHPMAILER_LANG['provide_address']      = 'გთხოვთ მიუთითოთ ერთი ადრესატის e-mail მისამართი მაინც.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' - საფოსტო სერვერის მხარდაჭერა არ არის.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP შეცდომა: შემდეგ მისამართებზე გაგზავნა ვერ მოხერხდა: ';
-$PHPMAILER_LANG['empty_message']        = 'შეტყობინება ცარიელია';
-$PHPMAILER_LANG['invalid_address']      = 'არ გაიგზავნა, e-mail მისამართის არასწორი ფორმატი: ';
-$PHPMAILER_LANG['signing']              = 'ხელმოწერის შეცდომა: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'შეცდომა SMTP სერვერთან დაკავშირებისას';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP სერვერის შეცდომა: ';
-$PHPMAILER_LANG['variable_set']         = 'შეუძლებელია შემდეგი ცვლადის შექმნა ან შეცვლა: ';
-$PHPMAILER_LANG['extension_missing']    = 'ბიბლიოთეკა არ არსებობს: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ko.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ko.php
deleted file mode 100644 (file)
index 9599fa6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Korean PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author ChalkPE <amato0617@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP 오류: 인증할 수 없습니다.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP 오류: SMTP 호스트에 접속할 수 없습니다.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 오류: 데이터가 받아들여지지 않았습니다.';
-$PHPMAILER_LANG['empty_message']        = '메세지 내용이 없습니다';
-$PHPMAILER_LANG['encoding']             = '알 수 없는 인코딩: ';
-$PHPMAILER_LANG['execute']              = '실행 불가: ';
-$PHPMAILER_LANG['file_access']          = '파일 접근 불가: ';
-$PHPMAILER_LANG['file_open']            = '파일 오류: 파일을 열 수 없습니다: ';
-$PHPMAILER_LANG['from_failed']          = '다음 From 주소에서 오류가 발생했습니다: ';
-$PHPMAILER_LANG['instantiate']          = 'mail 함수를 인스턴스화할 수 없습니다';
-$PHPMAILER_LANG['invalid_address']      = '잘못된 주소: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' 메일러는 지원되지 않습니다.';
-$PHPMAILER_LANG['provide_address']      = '적어도 한 개 이상의 수신자 메일 주소를 제공해야 합니다.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP 오류: 다음 수신자에서 오류가 발생했습니다: ';
-$PHPMAILER_LANG['signing']              = '서명 오류: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP 연결을 실패하였습니다.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP 서버 오류: ';
-$PHPMAILER_LANG['variable_set']         = '변수 설정 및 초기화 불가: ';
-$PHPMAILER_LANG['extension_missing']    = '확장자 없음: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-lt.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-lt.php
deleted file mode 100644 (file)
index 1253a4f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Lithuanian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Dainius Kaupaitis <dk@sum.lt>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP klaida: autentifikacija nepavyko.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP klaida: nepavyksta prisijungti prie SMTP stoties.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP klaida: duomenys nepriimti.';
-$PHPMAILER_LANG['empty_message']        = 'Laiško turinys tuščias';
-$PHPMAILER_LANG['encoding']             = 'Neatpažinta koduotė: ';
-$PHPMAILER_LANG['execute']              = 'Nepavyko įvykdyti komandos: ';
-$PHPMAILER_LANG['file_access']          = 'Byla nepasiekiama: ';
-$PHPMAILER_LANG['file_open']            = 'Bylos klaida: Nepavyksta atidaryti: ';
-$PHPMAILER_LANG['from_failed']          = 'Neteisingas siuntėjo adresas: ';
-$PHPMAILER_LANG['instantiate']          = 'Nepavyko paleisti mail funkcijos.';
-$PHPMAILER_LANG['invalid_address']      = 'Neteisingas adresas: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' pašto stotis nepalaikoma.';
-$PHPMAILER_LANG['provide_address']      = 'Nurodykite bent vieną gavėjo adresą.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP klaida: nepavyko išsiųsti šiems gavėjams: ';
-$PHPMAILER_LANG['signing']              = 'Prisijungimo klaida: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP susijungimo klaida';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP stoties klaida: ';
-$PHPMAILER_LANG['variable_set']         = 'Nepavyko priskirti reikšmės kintamajam: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-lv.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-lv.php
deleted file mode 100644 (file)
index 39bf9a1..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Latvian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Eduards M. <e@npd.lv>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP kļūda: Autorizācija neizdevās.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Kļūda: Nevar izveidot savienojumu ar SMTP serveri.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Kļūda: Nepieņem informāciju.';
-$PHPMAILER_LANG['empty_message']        = 'Ziņojuma teksts ir tukšs';
-$PHPMAILER_LANG['encoding']             = 'Neatpazīts kodējums: ';
-$PHPMAILER_LANG['execute']              = 'Neizdevās izpildīt komandu: ';
-$PHPMAILER_LANG['file_access']          = 'Fails nav pieejams: ';
-$PHPMAILER_LANG['file_open']            = 'Faila kļūda: Nevar atvērt failu: ';
-$PHPMAILER_LANG['from_failed']          = 'Nepareiza sūtītāja adrese: ';
-$PHPMAILER_LANG['instantiate']          = 'Nevar palaist sūtīšanas funkciju.';
-$PHPMAILER_LANG['invalid_address']      = 'Nepareiza adrese: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' sūtītājs netiek atbalstīts.';
-$PHPMAILER_LANG['provide_address']      = 'Lūdzu, norādiet vismaz vienu adresātu.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP kļūda: neizdevās nosūtīt šādiem saņēmējiem: ';
-$PHPMAILER_LANG['signing']              = 'Autorizācijas kļūda: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP savienojuma kļūda';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP servera kļūda: ';
-$PHPMAILER_LANG['variable_set']         = 'Nevar piešķirt mainīgā vērtību: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ms.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ms.php
deleted file mode 100644 (file)
index 4e2c340..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Malaysian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Nawawi Jamili <nawawi@rutweb.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Ralat SMTP: Tidak dapat pengesahan.';
-$PHPMAILER_LANG['connect_host']         = 'Ralat SMTP: Tidak dapat menghubungi hos pelayan SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Ralat SMTP: Data tidak diterima oleh pelayan.';
-$PHPMAILER_LANG['empty_message']        = 'Tiada isi untuk mesej';
-$PHPMAILER_LANG['encoding']             = 'Pengekodan tidak diketahui: ';
-$PHPMAILER_LANG['execute']              = 'Tidak dapat melaksanakan: ';
-$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses fail: ';
-$PHPMAILER_LANG['file_open']            = 'Ralat Fail: Tidak dapat membuka fail: ';
-$PHPMAILER_LANG['from_failed']          = 'Berikut merupakan ralat dari alamat e-mel: ';
-$PHPMAILER_LANG['instantiate']          = 'Tidak dapat memberi contoh fungsi e-mel.';
-$PHPMAILER_LANG['invalid_address']      = 'Alamat emel tidak sah: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' jenis penghantar emel tidak disokong.';
-$PHPMAILER_LANG['provide_address']      = 'Anda perlu menyediakan sekurang-kurangnya satu alamat e-mel penerima.';
-$PHPMAILER_LANG['recipients_failed']    = 'Ralat SMTP: Penerima e-mel berikut telah gagal: ';
-$PHPMAILER_LANG['signing']              = 'Ralat pada tanda tangan: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() telah gagal.';
-$PHPMAILER_LANG['smtp_error']           = 'Ralat pada pelayan SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-nb.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-nb.php
deleted file mode 100644 (file)
index 383dd51..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Norwegian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP Feil: Kunne ikke autentisere.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Feil: Kunne ikke koble til SMTP tjener.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Feil: Data ble ikke akseptert.';
-$PHPMAILER_LANG['empty_message']        = 'Meldingsinnholdet er tomt';
-$PHPMAILER_LANG['encoding']             = 'Ukjent tegnkoding: ';
-$PHPMAILER_LANG['execute']              = 'Kunne ikke utføre: ';
-$PHPMAILER_LANG['file_access']          = 'Får ikke tilgang til filen: ';
-$PHPMAILER_LANG['file_open']            = 'Fil feil: Kunne ikke åpne filen: ';
-$PHPMAILER_LANG['from_failed']          = 'Følgende avsenderadresse feilet: ';
-$PHPMAILER_LANG['instantiate']          = 'Kunne ikke initialisere mailfunksjonen.';
-$PHPMAILER_LANG['invalid_address']      = 'Meldingen ble ikke sendt, følgende adresse er ugyldig: ';
-$PHPMAILER_LANG['provide_address']      = 'Du må angi minst en mottakeradresse.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer er ikke supportert.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feil: Følgende mottagere feilet: ';
-$PHPMAILER_LANG['signing']              = 'Signeringsfeil: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() feilet.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP-serverfeil: ';
-$PHPMAILER_LANG['variable_set']         = 'Kan ikke sette eller resette variabelen: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-nl.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-nl.php
deleted file mode 100755 (executable)
index 0fc38be..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Dutch PHPMailer language file: refer to class.phpmailer.php for definitive list.
- * @package PHPMailer
- * @author Tuxion <team@tuxion.nl>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP-fout: authenticatie mislukt.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP-fout: kon niet verbinden met SMTP-host.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-fout: data niet geaccepteerd.';
-$PHPMAILER_LANG['empty_message']        = 'Berichttekst is leeg';
-$PHPMAILER_LANG['encoding']             = 'Onbekende codering: ';
-$PHPMAILER_LANG['execute']              = 'Kon niet uitvoeren: ';
-$PHPMAILER_LANG['file_access']          = 'Kreeg geen toegang tot bestand: ';
-$PHPMAILER_LANG['file_open']            = 'Bestandsfout: kon bestand niet openen: ';
-$PHPMAILER_LANG['from_failed']          = 'Het volgende afzendersadres is mislukt: ';
-$PHPMAILER_LANG['instantiate']          = 'Kon mailfunctie niet initialiseren.';
-$PHPMAILER_LANG['invalid_address']      = 'Ongeldig adres: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.';
-$PHPMAILER_LANG['provide_address']      = 'Er moet minstens één ontvanger worden opgegeven.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP-fout: de volgende ontvangers zijn mislukt: ';
-$PHPMAILER_LANG['signing']              = 'Signeerfout: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Verbinding mislukt.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP-serverfout: ';
-$PHPMAILER_LANG['variable_set']         = 'Kan de volgende variabele niet instellen of resetten: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pl.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pl.php
deleted file mode 100644 (file)
index 3da0dee..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Polish PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Błąd SMTP: Nie można przeprowadzić uwierzytelnienia.';
-$PHPMAILER_LANG['connect_host']         = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Błąd SMTP: Dane nie zostały przyjęte.';
-$PHPMAILER_LANG['empty_message']        = 'Wiadomość jest pusta.';
-$PHPMAILER_LANG['encoding']             = 'Nieznany sposób kodowania znaków: ';
-$PHPMAILER_LANG['execute']              = 'Nie można uruchomić: ';
-$PHPMAILER_LANG['file_access']          = 'Brak dostępu do pliku: ';
-$PHPMAILER_LANG['file_open']            = 'Nie można otworzyć pliku: ';
-$PHPMAILER_LANG['from_failed']          = 'Następujący adres Nadawcy jest nieprawidłowy: ';
-$PHPMAILER_LANG['instantiate']          = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
-$PHPMAILER_LANG['invalid_address']      = 'Nie można wysłać wiadomości, '.
-    'następujący adres Odbiorcy jest nieprawidłowy: ';
-$PHPMAILER_LANG['provide_address']      = 'Należy podać prawidłowy adres email Odbiorcy.';
-$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
-$PHPMAILER_LANG['recipients_failed']    = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ';
-$PHPMAILER_LANG['signing']              = 'Błąd podpisywania wiadomości: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() zakończone niepowodzeniem.';
-$PHPMAILER_LANG['smtp_error']           = 'Błąd SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Nie można ustawić lub zmodyfikować zmiennej: ';
-$PHPMAILER_LANG['extension_missing']    = 'Brakujące rozszerzenie: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pt.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pt.php
deleted file mode 100644 (file)
index f365d5d..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Portuguese (European) PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Jonadabe <jonadabe@hotmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Erro do SMTP: Não foi possível realizar a autenticação.';
-$PHPMAILER_LANG['connect_host']         = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Erro do SMTP: Os dados foram rejeitados.';
-$PHPMAILER_LANG['empty_message']        = 'A mensagem no e-mail está vazia.';
-$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';
-$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';
-$PHPMAILER_LANG['file_access']          = 'Não foi possível aceder o ficheiro: ';
-$PHPMAILER_LANG['file_open']            = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: ';
-$PHPMAILER_LANG['from_failed']          = 'Ocorreram falhas nos endereços dos seguintes remententes: ';
-$PHPMAILER_LANG['instantiate']          = 'Não foi possível iniciar uma instância da função mail.';
-$PHPMAILER_LANG['invalid_address']      = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
-$PHPMAILER_LANG['provide_address']      = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.';
-$PHPMAILER_LANG['recipients_failed']    = 'Erro do SMTP: O endereço do seguinte destinatário falhou: ';
-$PHPMAILER_LANG['signing']              = 'Erro ao assinar: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';
-$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';
-$PHPMAILER_LANG['extension_missing']    = 'Extensão em falta: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pt_br.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pt_br.php
deleted file mode 100644 (file)
index fecbbe3..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Brazilian Portuguese PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Paulo Henrique Garcia <paulo@controllerweb.com.br>
- * @author Lucas Guimarães <lucas@lucasguimaraes.com>
- * @author Phelipe Alves <phelipealvesdesouza@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Erro de SMTP: Não foi possível autenticar.';
-$PHPMAILER_LANG['connect_host']         = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Erro de SMTP: Dados rejeitados.';
-$PHPMAILER_LANG['empty_message']        = 'Mensagem vazia';
-$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';
-$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';
-$PHPMAILER_LANG['file_access']          = 'Não foi possível acessar o arquivo: ';
-$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: Não foi possível abrir o arquivo: ';
-$PHPMAILER_LANG['from_failed']          = 'Os seguintes remententes falharam: ';
-$PHPMAILER_LANG['instantiate']          = 'Não foi possível instanciar a função mail.';
-$PHPMAILER_LANG['invalid_address']      = 'Endereço de e-mail inválido: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
-$PHPMAILER_LANG['provide_address']      = 'Você deve informar pelo menos um destinatário.';
-$PHPMAILER_LANG['recipients_failed']    = 'Erro de SMTP: Os seguintes destinatários falharam: ';
-$PHPMAILER_LANG['signing']              = 'Erro de Assinatura: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';
-$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';
-$PHPMAILER_LANG['extension_missing']    = 'Extensão ausente: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ro.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ro.php
deleted file mode 100644 (file)
index fa100ea..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Romanian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Alex Florea <alecz.fia@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Eroare SMTP: Autentificarea a eșuat.';
-$PHPMAILER_LANG['connect_host']         = 'Eroare SMTP: Conectarea la serverul SMTP a eșuat.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Eroare SMTP: Datele nu au fost acceptate.';
-$PHPMAILER_LANG['empty_message']        = 'Mesajul este gol.';
-$PHPMAILER_LANG['encoding']             = 'Encodare necunoscută: ';
-$PHPMAILER_LANG['execute']              = 'Nu se poate executa următoarea comandă:  ';
-$PHPMAILER_LANG['file_access']          = 'Nu se poate accesa următorul fișier: ';
-$PHPMAILER_LANG['file_open']            = 'Eroare fișier: Nu se poate deschide următorul fișier: ';
-$PHPMAILER_LANG['from_failed']          = 'Următoarele adrese From au dat eroare: ';
-$PHPMAILER_LANG['instantiate']          = 'Funcția mail nu a putut fi inițializată.';
-$PHPMAILER_LANG['invalid_address']      = 'Adresa de email nu este validă: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.';
-$PHPMAILER_LANG['provide_address']      = 'Trebuie să adăugați cel puțin o adresă de email.';
-$PHPMAILER_LANG['recipients_failed']    = 'Eroare SMTP: Următoarele adrese de email au eșuat: ';
-$PHPMAILER_LANG['signing']              = 'A aparut o problemă la semnarea emailului. ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Conectarea la serverul SMTP a eșuat.';
-$PHPMAILER_LANG['smtp_error']           = 'Eroare server SMTP: ';
-$PHPMAILER_LANG['variable_set']         = 'Nu se poate seta/reseta variabila. ';
-$PHPMAILER_LANG['extension_missing']    = 'Lipsește extensia: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ru.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-ru.php
deleted file mode 100644 (file)
index 4066f6b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Russian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Alexey Chumakov <alex@chumakov.ru>
- * @author Foster Snowhill <i18n@forstwoof.ru>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Ошибка SMTP: ошибка авторизации.';
-$PHPMAILER_LANG['connect_host']         = 'Ошибка SMTP: не удается подключиться к серверу SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Ошибка SMTP: данные не приняты.';
-$PHPMAILER_LANG['encoding']             = 'Неизвестный вид кодировки: ';
-$PHPMAILER_LANG['execute']              = 'Невозможно выполнить команду: ';
-$PHPMAILER_LANG['file_access']          = 'Нет доступа к файлу: ';
-$PHPMAILER_LANG['file_open']            = 'Файловая ошибка: не удается открыть файл: ';
-$PHPMAILER_LANG['from_failed']          = 'Неверный адрес отправителя: ';
-$PHPMAILER_LANG['instantiate']          = 'Невозможно запустить функцию mail.';
-$PHPMAILER_LANG['provide_address']      = 'Пожалуйста, введите хотя бы один адрес e-mail получателя.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.';
-$PHPMAILER_LANG['recipients_failed']    = 'Ошибка SMTP: отправка по следующим адресам получателей не удалась: ';
-$PHPMAILER_LANG['empty_message']        = 'Пустое сообщение';
-$PHPMAILER_LANG['invalid_address']      = 'Не отослано, неправильный формат email адреса: ';
-$PHPMAILER_LANG['signing']              = 'Ошибка подписи: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Ошибка соединения с SMTP-сервером';
-$PHPMAILER_LANG['smtp_error']           = 'Ошибка SMTP-сервера: ';
-$PHPMAILER_LANG['variable_set']         = 'Невозможно установить или переустановить переменную: ';
-$PHPMAILER_LANG['extension_missing']    = 'Расширение отсутствует: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sk.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sk.php
deleted file mode 100644 (file)
index a38f4e5..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Slovak PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Michal Tinka <michaltinka@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Chyba autentifikácie.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Nebolo možné nadviazať spojenie so SMTP serverom.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dáta neboli prijaté';
-$PHPMAILER_LANG['empty_message']        = 'Prázdne telo správy.';
-$PHPMAILER_LANG['encoding']             = 'Neznáme kódovanie: ';
-$PHPMAILER_LANG['execute']              = 'Nedá sa vykonať: ';
-$PHPMAILER_LANG['file_access']          = 'Súbor nebol nájdený: ';
-$PHPMAILER_LANG['file_open']            = 'File Error: Súbor sa otvoriť pre čítanie: ';
-$PHPMAILER_LANG['from_failed']          = 'Následujúca adresa From je nesprávna: ';
-$PHPMAILER_LANG['instantiate']          = 'Nedá sa vytvoriť inštancia emailovej funkcie.';
-$PHPMAILER_LANG['invalid_address']      = 'Neodoslané, emailová adresa je nesprávna: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.';
-$PHPMAILER_LANG['provide_address']      = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: Adresy príjemcov niesu správne ';
-$PHPMAILER_LANG['signing']              = 'Chyba prihlasovania: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() zlyhalo.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP chyba serveru: ';
-$PHPMAILER_LANG['variable_set']         = 'Nemožno nastaviť alebo resetovať premennú: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sl.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sl.php
deleted file mode 100644 (file)
index 54c9572..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Slovene PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Klemen Tušar <techouse@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP napaka: Avtentikacija ni uspela.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP napaka: Ne morem vzpostaviti povezave s SMTP gostiteljem.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP napaka: Strežnik zavrača podatke.';
-$PHPMAILER_LANG['empty_message']        = 'E-poštno sporočilo nima vsebine.';
-$PHPMAILER_LANG['encoding']             = 'Nepoznan tip kodiranja: ';
-$PHPMAILER_LANG['execute']              = 'Operacija ni uspela: ';
-$PHPMAILER_LANG['file_access']          = 'Nimam dostopa do datoteke: ';
-$PHPMAILER_LANG['file_open']            = 'Ne morem odpreti datoteke: ';
-$PHPMAILER_LANG['from_failed']          = 'Neveljaven e-naslov pošiljatelja: ';
-$PHPMAILER_LANG['instantiate']          = 'Ne morem inicializirati mail funkcije.';
-$PHPMAILER_LANG['invalid_address']      = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.';
-$PHPMAILER_LANG['provide_address']      = 'Prosim vnesite vsaj enega naslovnika.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP napaka: Sledeči naslovniki so neveljavni: ';
-$PHPMAILER_LANG['signing']              = 'Napaka pri podpisovanju: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Ne morem vzpostaviti povezave s SMTP strežnikom.';
-$PHPMAILER_LANG['smtp_error']           = 'Napaka SMTP strežnika: ';
-$PHPMAILER_LANG['variable_set']         = 'Ne morem nastaviti oz. ponastaviti spremenljivke: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sr.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sr.php
deleted file mode 100644 (file)
index ed95ca6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Serbian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Александар Јевремовић <ajevremovic@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: аутентификација није успела.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: није могуће повезивање са SMTP сервером.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: подаци нису прихваћени.';
-$PHPMAILER_LANG['empty_message']        = 'Садржај поруке је празан.';
-$PHPMAILER_LANG['encoding']             = 'Непознато кодовање: ';
-$PHPMAILER_LANG['execute']              = 'Није могуће извршити наредбу: ';
-$PHPMAILER_LANG['file_access']          = 'Није могуће приступити датотеци: ';
-$PHPMAILER_LANG['file_open']            = 'Није могуће отворити датотеку: ';
-$PHPMAILER_LANG['from_failed']          = 'SMTP грешка: слање са следећих адреса није успело: ';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: слање на следеће адресе није успело: ';
-$PHPMAILER_LANG['instantiate']          = 'Није могуће покренути mail функцију.';
-$PHPMAILER_LANG['invalid_address']      = 'Порука није послата због неисправне адресе: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.';
-$PHPMAILER_LANG['provide_address']      = 'Потребно је задати најмање једну адресу.';
-$PHPMAILER_LANG['signing']              = 'Грешка приликом пријављивања: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Повезивање са SMTP сервером није успело.';
-$PHPMAILER_LANG['smtp_error']           = 'Грешка SMTP сервера: ';
-$PHPMAILER_LANG['variable_set']         = 'Није могуће задати променљиву, нити је вратити уназад: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sv.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sv.php
deleted file mode 100644 (file)
index 4408e63..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Swedish PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Johan Linnér <johan@linner.biz>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP fel: Kunde inte autentisera.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP fel: Kunde inte ansluta till SMTP-server.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fel: Data accepterades inte.';
-//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
-$PHPMAILER_LANG['encoding']             = 'Okänt encode-format: ';
-$PHPMAILER_LANG['execute']              = 'Kunde inte köra: ';
-$PHPMAILER_LANG['file_access']          = 'Ingen åtkomst till fil: ';
-$PHPMAILER_LANG['file_open']            = 'Fil fel: Kunde inte öppna fil: ';
-$PHPMAILER_LANG['from_failed']          = 'Följande avsändaradress är felaktig: ';
-$PHPMAILER_LANG['instantiate']          = 'Kunde inte initiera e-postfunktion.';
-$PHPMAILER_LANG['invalid_address']      = 'Felaktig adress: ';
-$PHPMAILER_LANG['provide_address']      = 'Du måste ange minst en mottagares e-postadress.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP fel: Följande mottagare är felaktig: ';
-$PHPMAILER_LANG['signing']              = 'Signerings fel: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() misslyckades.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP server fel: ';
-$PHPMAILER_LANG['variable_set']         = 'Kunde inte definiera eller återställa variabel: ';
-$PHPMAILER_LANG['extension_missing']    = 'Tillägg ej tillgängligt: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-tr.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-tr.php
deleted file mode 100755 (executable)
index 323fb4b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Turkish PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Elçin Özel
- * @author Can Yılmaz
- * @author Mehmet Benlioğlu
- * @author @yasinaydin
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP Hatası: Oturum açılamadı.';
-$PHPMAILER_LANG['connect_host']         = 'SMTP Hatası: SMTP sunucusuna bağlanılamadı.';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Hatası: Veri kabul edilmedi.';
-$PHPMAILER_LANG['empty_message']        = 'Mesajın içeriği boş';
-$PHPMAILER_LANG['encoding']             = 'Bilinmeyen karakter kodlama: ';
-$PHPMAILER_LANG['execute']              = 'Çalıştırılamadı: ';
-$PHPMAILER_LANG['file_access']          = 'Dosyaya erişilemedi: ';
-$PHPMAILER_LANG['file_open']            = 'Dosya Hatası: Dosya açılamadı: ';
-$PHPMAILER_LANG['from_failed']          = 'Belirtilen adreslere gönderme başarısız: ';
-$PHPMAILER_LANG['instantiate']          = 'Örnek e-posta fonksiyonu oluşturulamadı.';
-$PHPMAILER_LANG['invalid_address']      = 'Geçersiz e-posta adresi: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' e-posta kütüphanesi desteklenmiyor.';
-$PHPMAILER_LANG['provide_address']      = 'En az bir alıcı e-posta adresi belirtmelisiniz.';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP Hatası: Belirtilen alıcılara ulaşılamadı: ';
-$PHPMAILER_LANG['signing']              = 'İmzalama hatası: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP connect() fonksiyonu başarısız.';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP sunucu hatası: ';
-$PHPMAILER_LANG['variable_set']         = 'Değişken ayarlanamadı ya da sıfırlanamadı: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-uk.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-uk.php
deleted file mode 100644 (file)
index 9a7b346..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Ukrainian PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author Yuriy Rudyy <yrudyy@prs.net.ua>
- * @fixed by Boris Yurchenko <boris@yurchenko.pp.ua>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Помилка SMTP: помилка авторизації.';
-$PHPMAILER_LANG['connect_host']         = 'Помилка SMTP: не вдається під\'єднатися до серверу SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Помилка SMTP: дані не прийняті.';
-$PHPMAILER_LANG['encoding']             = 'Невідомий тип кодування: ';
-$PHPMAILER_LANG['execute']              = 'Неможливо виконати команду: ';
-$PHPMAILER_LANG['file_access']          = 'Немає доступу до файлу: ';
-$PHPMAILER_LANG['file_open']            = 'Помилка файлової системи: не вдається відкрити файл: ';
-$PHPMAILER_LANG['from_failed']          = 'Невірна адреса відправника: ';
-$PHPMAILER_LANG['instantiate']          = 'Неможливо запустити функцію mail.';
-$PHPMAILER_LANG['provide_address']      = 'Будь-ласка, введіть хоча б одну адресу e-mail отримувача.';
-$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.';
-$PHPMAILER_LANG['recipients_failed']    = 'Помилка SMTP: відправлення наступним отримувачам не вдалося: ';
-$PHPMAILER_LANG['empty_message']        = 'Пусте тіло повідомлення';
-$PHPMAILER_LANG['invalid_address']      = 'Не відправлено, невірний формат адреси e-mail: ';
-$PHPMAILER_LANG['signing']              = 'Помилка підпису: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Помилка з\'єднання із SMTP-сервером';
-$PHPMAILER_LANG['smtp_error']           = 'Помилка SMTP-сервера: ';
-$PHPMAILER_LANG['variable_set']         = 'Неможливо встановити або перевстановити змінну: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-vi.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-vi.php
deleted file mode 100644 (file)
index c60dade..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Vietnamese (Tiếng Việt) PHPMailer language file: refer to English translation for definitive list.
- * @package PHPMailer
- * @author VINADES.,JSC <contact@vinades.vn>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'Lỗi SMTP: Không thể xác thực.';
-$PHPMAILER_LANG['connect_host']         = 'Lỗi SMTP: Không thể kết nối máy chủ SMTP.';
-$PHPMAILER_LANG['data_not_accepted']    = 'Lỗi SMTP: Dữ liệu không được chấp nhận.';
-$PHPMAILER_LANG['empty_message']        = 'Không có nội dung';
-$PHPMAILER_LANG['encoding']             = 'Mã hóa không xác định: ';
-$PHPMAILER_LANG['execute']              = 'Không thực hiện được: ';
-$PHPMAILER_LANG['file_access']          = 'Không thể truy cập tệp tin ';
-$PHPMAILER_LANG['file_open']            = 'Lỗi Tập tin: Không thể mở tệp tin: ';
-$PHPMAILER_LANG['from_failed']          = 'Lỗi địa chỉ gửi đi: ';
-$PHPMAILER_LANG['instantiate']          = 'Không dùng được các hàm gửi thư.';
-$PHPMAILER_LANG['invalid_address']      = 'Đại chỉ emai không đúng: ';
-$PHPMAILER_LANG['mailer_not_supported'] = ' trình gửi thư không được hỗ trợ.';
-$PHPMAILER_LANG['provide_address']      = 'Bạn phải cung cấp ít nhất một địa chỉ người nhận.';
-$PHPMAILER_LANG['recipients_failed']    = 'Lỗi SMTP: lỗi địa chỉ người nhận: ';
-$PHPMAILER_LANG['signing']              = 'Lỗi đăng nhập: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'Lỗi kết nối với SMTP';
-$PHPMAILER_LANG['smtp_error']           = 'Lỗi máy chủ smtp ';
-$PHPMAILER_LANG['variable_set']         = 'Không thể thiết lập hoặc thiết lập lại biến: ';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-zh.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-zh.php
deleted file mode 100755 (executable)
index 3e9e358..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Traditional Chinese PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author liqwei <liqwei@liqwei.com>
- * @author Peter Dave Hello <@PeterDaveHello/>
- * @author Jason Chiang <xcojad@gmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP 錯誤:登入失敗。';
-$PHPMAILER_LANG['connect_host']         = 'SMTP 錯誤:無法連線到 SMTP 主機。';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 錯誤:無法接受的資料。';
-$PHPMAILER_LANG['empty_message']        = '郵件內容為空';
-$PHPMAILER_LANG['encoding']             = '未知編碼: ';
-$PHPMAILER_LANG['execute']              = '無法執行:';
-$PHPMAILER_LANG['file_access']          = '無法存取檔案:';
-$PHPMAILER_LANG['file_open']            = '檔案錯誤:無法開啟檔案:';
-$PHPMAILER_LANG['from_failed']          = '發送地址錯誤:';
-$PHPMAILER_LANG['instantiate']          = '未知函數呼叫。';
-$PHPMAILER_LANG['invalid_address']      = '因為電子郵件地址無效,無法傳送: ';
-$PHPMAILER_LANG['mailer_not_supported'] = '不支援的發信客戶端。';
-$PHPMAILER_LANG['provide_address']      = '必須提供至少一個收件人地址。';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP 錯誤:以下收件人地址錯誤:';
-$PHPMAILER_LANG['signing']              = '電子簽章錯誤: ';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP 連線失敗';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP 伺服器錯誤: ';
-$PHPMAILER_LANG['variable_set']         = '無法設定或重設變數: ';
-$PHPMAILER_LANG['extension_missing']    = '遺失模組 Extension: ';
diff --git a/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-zh_cn.php b/www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-zh_cn.php
deleted file mode 100755 (executable)
index d85a0b1..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Simplified Chinese PHPMailer language file: refer to English translation for definitive list
- * @package PHPMailer
- * @author liqwei <liqwei@liqwei.com>
- * @author young <masxy@foxmail.com>
- */
-
-$PHPMAILER_LANG['authenticate']         = 'SMTP 错误:登录失败。';
-$PHPMAILER_LANG['connect_host']         = 'SMTP 错误:无法连接到 SMTP 主机。';
-$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 错误:数据不被接受。';
-$PHPMAILER_LANG['empty_message']        = '邮件正文为空。';
-$PHPMAILER_LANG['encoding']             = '未知编码: ';
-$PHPMAILER_LANG['execute']              = '无法执行:';
-$PHPMAILER_LANG['file_access']          = '无法访问文件:';
-$PHPMAILER_LANG['file_open']            = '文件错误:无法打开文件:';
-$PHPMAILER_LANG['from_failed']          = '发送地址错误:';
-$PHPMAILER_LANG['instantiate']          = '未知函数调用。';
-$PHPMAILER_LANG['invalid_address']      = '发送失败,电子邮箱地址是无效的:';
-$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。';
-$PHPMAILER_LANG['provide_address']      = '必须提供至少一个收件人地址。';
-$PHPMAILER_LANG['recipients_failed']    = 'SMTP 错误:收件人地址错误:';
-$PHPMAILER_LANG['signing']              = '登录失败:';
-$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP服务器连接失败。';
-$PHPMAILER_LANG['smtp_error']           = 'SMTP服务器出错: ';
-$PHPMAILER_LANG['variable_set']         = '无法设置或重置变量:';
-//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
diff --git a/www/plugins/facteur/prive/squelettes/contenu/configurer_facteur.html b/www/plugins/facteur/prive/squelettes/contenu/configurer_facteur.html
deleted file mode 100644 (file)
index 3bbab56..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[(#AUTORISER{configurer,facteur}|sinon_interdire_acces)]
-<h1 class="grostitre"><:facteur:configuration_facteur:></h1>
-<div class="ajax">
-       #FORMULAIRE_CONFIGURER_FACTEUR
-</div>
\ No newline at end of file
diff --git a/www/plugins/facteur/prive/themes/spip/images/facteur-16.png b/www/plugins/facteur/prive/themes/spip/images/facteur-16.png
deleted file mode 100644 (file)
index 29a7f05..0000000
Binary files a/www/plugins/facteur/prive/themes/spip/images/facteur-16.png and /dev/null differ
diff --git a/www/plugins/facteur/prive/themes/spip/images/facteur-24.png b/www/plugins/facteur/prive/themes/spip/images/facteur-24.png
deleted file mode 100644 (file)
index c2e2154..0000000
Binary files a/www/plugins/facteur/prive/themes/spip/images/facteur-24.png and /dev/null differ
diff --git a/www/plugins/facteur/prive/themes/spip/images/facteur-32.png b/www/plugins/facteur/prive/themes/spip/images/facteur-32.png
deleted file mode 100644 (file)
index b27394e..0000000
Binary files a/www/plugins/facteur/prive/themes/spip/images/facteur-32.png and /dev/null differ
diff --git a/www/plugins/facteur/svn.revision b/www/plugins/facteur/svn.revision
deleted file mode 100644 (file)
index ce5c126..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/facteur/trunk
-Revision: 108069
-Dernier commit: 2017-12-17 05:37:53 +0100 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/facteur/trunk</origine>
-<revision>108069</revision>
-<commit>2017-12-17 05:37:53 +0100 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/formidable b/www/plugins/formidable
new file mode 160000 (submodule)
index 0000000..4365baa
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 4365baad133f0d5de9d101fabadd42818f35b845
diff --git a/www/plugins/formidable/action/dupliquer_formulaire.php b/www/plugins/formidable/action/dupliquer_formulaire.php
deleted file mode 100644 (file)
index cfe9a86..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/config');
-
-/**
- * Dupliquer un formulaire
- * @param unknown_type $arg
- * @return unknown_type
- */
-function action_dupliquer_formulaire_dist($arg = null) {
-       if (is_null($arg)) {
-               $securiser_action = charger_fonction('securiser_action', 'inc');
-               $arg = $securiser_action();
-       }
-       $id_formulaire = intval($arg);
-
-       // Si le formulaire existe bien
-       if ($id_formulaire > 0
-               and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)) {
-               include_spip('action/editer_formulaire');
-               // On enlève les champs inutiles
-               unset($formulaire['id_formulaire']);
-               // On modifie un peu le titre
-               $formulaire['titre'] = $formulaire['titre'].' '._T('formidable:formulaires_dupliquer_copie');
-               // On s'assure que l'identifiant n'existe pas déjà
-               $formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
-               // On insère un nouveau formulaire
-               $id_formulaire = insert_formulaire();
-               // Si ça a marché on modifie les champs de base
-               if ($id_formulaire > 0
-                       and !($erreur = formulaire_set($id_formulaire, $formulaire))) {
-                       // Et ensuite les saisies et les traitements
-                       sql_updateq(
-                               'spip_formulaires',
-                               array(
-                                       'saisies' => $formulaire['saisies'],
-                                       'traitements' => $formulaire['traitements']
-                               ),
-                               'id_formulaire = '.$id_formulaire
-                       );
-                       // Tout a fonctionné. En fonction de la config, on attribue l'auteur courant
-                       $auteurs = lire_config('formidable/analyse/auteur');
-                       if ($auteurs == 'on') {
-                               if ($id_auteur = session_get('id_auteur')) {
-                                       // association (par défaut) du formulaire et de l'auteur courant
-                                       objet_associer(array('formulaire'=>$id_formulaire), array('auteur'=>$id_auteur));
-                               }
-                       }
-                       // Et on redirige vers la vue
-                       $redirect = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire, '&');
-               } else {
-                       // Sinon on reste sur la page qui liste tout
-                       $redirect = generer_url_ecrire('formulaires');
-               }
-       }
-
-       // Si on a précisé une direction on va plutôt là
-       if (_request('redirect')) {
-               $redirect = parametre_url(
-                       urldecode(_request('redirect')),
-                       'id_formulaire',
-                       $id_formulaire,
-                       '&'
-               ) . $erreur;
-       }
-
-       // On redirige
-       include_spip('inc/headers');
-       redirige_par_entete($redirect);
-}
diff --git a/www/plugins/formidable/action/editer_formulaire.php b/www/plugins/formidable/action/editer_formulaire.php
deleted file mode 100644 (file)
index 4c601c5..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Action de création / Modification d'un formulaire
- * @param unknown_type $arg
- * @return unknown_type
- */
-function action_editer_formulaire_dist($arg = null) {
-       if (is_null($arg)) {
-               $securiser_action = charger_fonction('securiser_action', 'inc');
-               $arg = $securiser_action();
-       }
-
-       // si id_formulaire n'est pas un nombre, c'est une creation
-       if (!$id_formulaire = intval($arg)) {
-               $id_formulaire = formulaire_inserer();
-       }
-
-       // Enregistre l'envoi dans la BD
-       if ($id_formulaire > 0) {
-               $err = formulaire_modifier($id_formulaire);
-       }
-
-       if (_request('redirect')) {
-               $redirect = parametre_url(
-                       urldecode(_request('redirect')),
-                       'id_formulaire',
-                       $id_formulaire,
-                       '&'
-               ) . $err;
-
-               include_spip('inc/headers');
-               redirige_par_entete($redirect);
-       } else {
-               return array($id_formulaire,$err);
-       }
-}
-
-/**
- * Crée un nouveau formulaire et retourne son ID
- *
- * @return int id_formulaire
- */
-function formulaire_inserer() {
-       $champs = array(
-               'statut' => 'prop',
-               'date_creation' => date('Y-m-d H:i:s'),
-       );
-       // Envoyer aux plugins
-       $champs = pipeline(
-               'pre_insertion',
-               array(
-                       'args' => array(
-                               'table' => 'spip_formulaires',
-                       ),
-                       'data' => $champs
-               )
-       );
-       $id_formulaire = sql_insertq('spip_formulaires', $champs);
-
-       pipeline(
-               'post_insertion',
-               array(
-                       'args' => array(
-                               'table' => 'spip_formulaires',
-                               'id_objet' => $id_formulaire
-                       ),
-                       'data' => $champs
-               )
-       );
-
-       return $id_formulaire;
-}
-
-/**
- * Appelle la fonction de modification d'un formulaire
- *
- * @param int $id_formulaire
- * @param array|null $set
- * @return string
- */
-function formulaire_modifier($id_formulaire, $set = null) {
-       include_spip('inc/modifier');
-       include_spip('inc/filtres');
-       $err = '';
-
-       $c = collecter_requests(
-               // white list
-               objet_info('formulaire', 'champs_editables'),
-               // black list
-               array('statut'),
-               // donnees eventuellement fournies
-               $set
-       );
-
-
-       $invalideur = "id='id_formulaire/$id_formulaire'";
-       if ($err = objet_modifier_champs(
-               'formulaire',
-               $id_formulaire,
-               array(
-                       'data' => $set,
-                       'nonvide' => array('titre' => _T('info_sans_titre')),
-                       'invalideur' => $invalideur,
-               ),
-               $c
-       )) {
-               return $err;
-       }
-
-       // Modification de statut, changement de rubrique ?
-       $c = collecter_requests(array('statut'), array(), $set);
-       include_spip('action/editer_objet');
-       $err = objet_instituer('formulaire', $id_formulaire, $c);
-
-       return $err;
-}
-
-function revision_formulaire($id_formulaire, $c = false) {
-       return formulaire_modifier($id_formulaire, $c);
-}
-function insert_formulaire() {
-       return formulaire_inserer();
-}
-function formulaire_set($id_formulaire, $set = null) {
-       return formulaire_modifier($id_formulaire, $set);
-}
diff --git a/www/plugins/formidable/action/exporter_formulaire.php b/www/plugins/formidable/action/exporter_formulaire.php
deleted file mode 100644 (file)
index d32fa50..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function action_exporter_formulaire_dist($arg = null) {
-       include_spip('inc/formidable');
-       if (is_null($arg)) {
-               $securiser_action = charger_fonction('securiser_action', 'inc');
-               $arg = $securiser_action();
-       }
-
-       list($id_formulaire, $type_export) = preg_split('/[\W]/', $arg);
-
-       if ($id_formulaire > 0
-               and $type_export
-               and $types_echange = echanges_formulaire_lister_disponibles()
-               and $exporter = $types_echange['exporter'][$type_export]
-       ) {
-               $exporter($id_formulaire);
-       }
-}
diff --git a/www/plugins/formidable/action/formidable_recuperer_fichier.php b/www/plugins/formidable/action/formidable_recuperer_fichier.php
deleted file mode 100644 (file)
index 5f2c867..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/autoriser');
-include_spip('inc/formidable');
-include_spip('inc/formidable_fichiers');
-
-/**
- * Récupère, si on est autorisé à voir la réponse du formulaire,
- * un fichier
- * et l'envoi en http
- **/
-function action_formidable_recuperer_fichier() {
-       $securiser_action = charger_fonction('securiser_action', 'inc');
-       $arg = $securiser_action();
-       $arg = unserialize($arg);
-
-       // test si autorisation de voir la réponse par cookie
-       $cookie_ok = false;
-       if (isset($arg['cookie'])) {
-               $nom_cookie = formidable_generer_nom_cookie($arg['formulaire']);
-               if (isset($_COOKIE[$nom_cookie])) {
-                       if ($arg['cookie'] == sha1($_COOKIE[$nom_cookie].secret_du_site())) {
-                               $cookie_bdd = sql_getfetsel('cookie', 'spip_formulaires_reponses', 'id_formulaires_reponse='.sql_quote($arg['reponse']));
-                               if ($cookie_bdd = $_COOKIE[$nom_cookie]) {
-                                       $cookie_ok = true;
-                               }
-                       }
-               }
-       }
-       if (autoriser('voir', 'formulairesreponse', $arg['formulaire']) or $cookie_ok) {
-               $chemin_fichier = _DIR_FICHIERS_FORMIDABLE
-                       .'formulaire_'.$arg['formulaire']
-                       .'/reponse_'.$arg['reponse']
-                       .'/'.$arg['saisie']
-                       .'/'.$arg['fichier'];
-               if (@file_exists($chemin_fichier)) {
-                       $f = $arg['fichier'];
-                       formidable_retourner_fichier($chemin_fichier, $f);
-               } else {
-                       include_spip('inc/minipres');
-                       echo minipres(_T('formidable:erreur_fichier_introuvable'));
-               }
-       } else {
-               include_spip('inc/minipres');
-               echo minipres();
-       }
-       exit;
-}
diff --git a/www/plugins/formidable/action/formidable_recuperer_fichier_par_email.php b/www/plugins/formidable/action/formidable_recuperer_fichier_par_email.php
deleted file mode 100644 (file)
index 7bd7692..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-include_spip('inc/autoriser');
-include_spip('inc/formidable_fichiers');
-/**
- * Récupère un fichier depuis un lien email, si on ne clique pas trop tard
- * et l'envoi en http
- **/
-function action_formidable_recuperer_fichier_par_email() {
-       //La vérification est inspirée de ce qui se fait dans notifications, pour les modifications de formu par email
-       $arg = _request('arg');
-       $hash = _request('hash');
-
-       include_spip('inc/securiser_action');
-       $action = 'formidable_recuperer_fichier_par_email';
-       $pass = secret_du_site();
-       if ($hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere')
-               or $hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere_ancien')) {
-               $arg = unserialize($arg);
-               // Construire le chemin du fichier, en fonction de ce qu'on reçoit
-               $chemin_fichier = formidable_generer_chemin_fichier($arg);
-               // Vérifier que le fichier existe, qu'il n'est pas trop vieux, et l'envoyer le cas échéant
-               if (@file_exists($chemin_fichier)) {
-                       $f = $arg['fichier'];
-                       $date = filemtime($chemin_fichier);
-                       if (_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL > 0 and $date +  _FORMIDABLE_EXPIRATION_FICHIERS_EMAIL < time()) {// vérifier que le fichier n'est pas trop vieux
-                               include_spip('inc/minipres');
-                               echo minipres(_T('formidable:erreur_fichier_expire'));
-                       } else {
-                               formidable_retourner_fichier($chemin_fichier, $f);
-                       }
-               } else {
-                       include_spip('inc/minipres');
-                       echo minipres(_T('formidable:erreur_fichier_introuvable'));
-               }
-       } else {
-               include_spip('inc/minipres');
-               echo minipres();
-       }
-       exit;
-}
diff --git a/www/plugins/formidable/action/supprimer_formulaire.php b/www/plugins/formidable/action/supprimer_formulaire.php
deleted file mode 100644 (file)
index 00dbc40..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Action de suppression d'un formulaire
- * @param int $arg
- * @return unknown_type
- */
-function action_supprimer_formulaire_dist($arg = null) {
-       if (is_null($arg)) {
-               $securiser_action = charger_fonction('securiser_action', 'inc');
-               $arg = $securiser_action();
-       }
-
-       // si id_formulaire n'est pas un nombre, on ne fait rien
-       if ($id_formulaire = intval($arg)) {
-               $set = array('statut' => 'poubelle');
-               include_spip('action/editer_formulaire');
-               formulaire_modifier($id_formulaire, $set);
-       }
-}
diff --git a/www/plugins/formidable/action/supprimer_formulaires_reponse.php b/www/plugins/formidable/action/supprimer_formulaires_reponse.php
deleted file mode 100644 (file)
index 985e01f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Action de suppression d'une réponse
- * @param int $arg
- * @return unknown_type
- */
-function action_supprimer_formulaires_reponse_dist($arg = null) {
-       if (is_null($arg)) {
-               $securiser_action = charger_fonction('securiser_action', 'inc');
-               $arg = $securiser_action();
-       }
-
-       // si id_formulaires_reponse n'est pas un nombre, on ne fait rien
-       if ($id_formulaires_reponse = intval($arg)) {
-               include_spip('action/editer_objet');
-               $set = array('statut' => 'refuse');
-               objet_modifier('formulaires_reponse', $id_formulaires_reponse, $set);
-       }
-}
diff --git a/www/plugins/formidable/action/vider_formulaire.php b/www/plugins/formidable/action/vider_formulaire.php
deleted file mode 100644 (file)
index 8ab7bb8..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/*
- * Action de suppression des réponses à un formulaire
- * @param int $arg
- * @return unknown_type
- */
-function action_vider_formulaire_dist($arg = null) {
-       if (is_null($arg)) {
-               $securiser_action = charger_fonction('securiser_action', 'inc');
-               $arg = $securiser_action();
-       }
-
-       include_spip('inc/autoriser');
-       // si id_formulaires_reponse n'est pas un nombre, on ne fait rien
-       if ($id_formulaire = intval($arg)
-               and autoriser('instituer', 'formulairesreponse', $id_formulaire)) {
-               // On supprime les réponse (statut => refuse)
-               $ok = sql_updateq(
-                       'spip_formulaires_reponses',
-                       array('statut' => 'refuse'),
-                       'id_formulaire=' . intval($id_formulaire)
-               );
-
-               if ($ok) {
-                       /* on n'a plus de réponses à montrer, retour vers la page du formulaire */
-                       if (!$redirect = _request('redirect')) {
-                               $GLOBALS['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire);
-                       }
-               }
-       }
-}
diff --git a/www/plugins/formidable/base/formidable_tables.php b/www/plugins/formidable/base/formidable_tables.php
deleted file mode 100644 (file)
index b72d2ce..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-<?php
-
-/**
- * Déclarations relatives à la base de données
- *
- * @package SPIP\Formidable\Pipelines
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Déclarer les interfaces des tables de formidable pour le compilateur
- *
- * @pipeline declarer_tables_interfaces
- *
- * @param array $interfaces
- *     Déclarations d'interface pour le compilateur
- * @return array
- *     Déclarations d'interface pour le compilateur
-**/
-function formidable_declarer_tables_interfaces($interfaces) {
-       // 'spip_' dans l'index de $tables_principales
-       $interfaces['table_des_tables']['formulaires'] = 'formulaires';
-       $interfaces['table_des_tables']['formulaires_reponses'] = 'formulaires_reponses';
-       $interfaces['table_des_tables']['formulaires_reponses_champs'] = 'formulaires_reponses_champs';
-
-       $interfaces['tables_jointures']['spip_formulaires'][] = 'formulaires_liens';
-       $interfaces['tables_jointures']['spip_articles'][] = 'formulaires_liens';
-       $interfaces['tables_jointures']['spip_rubriques'][] = 'formulaires_liens';
-
-       $interfaces['table_des_traitements']['MESSAGE_RETOUR']['formulaires']= _TRAITEMENT_RACCOURCIS;
-       $interfaces['table_des_traitements']['URL_REDIRECT']['formulaires']= 'vider_url(%s)';
-
-
-       return $interfaces;
-}
-
-/**
- * Déclarer les objets éditoriaux des formulaires
- *
- * @pipeline declarer_tables_objets_sql
- * @param array $tables
- *     Description des tables
- * @return array
- *     Description complétée des tables
- */
-function formidable_declarer_tables_objets_sql($tables) {
-       include_spip('inc/config');
-       $tables['spip_formulaires'] = array(
-               'type'=>'formulaire',
-               'titre' => "titre, '' AS lang",
-               'date' => 'date_creation',
-               'principale' => 'oui',
-               'texte_modifier' => 'formidable:editer_modifier_formulaire',
-               'info_aucun_objet'=> 'formidable:info_aucun_formulaire',
-               'info_1_objet' => 'formidable:info_1_formulaire',
-               'info_nb_objets' => 'formidable:info_nb_formulaires',
-               'texte_creer_associer' => 'formidable:liens_creer_associer',
-               'texte_ajouter' => 'formidable:liens_ajouter',
-
-               'champs_editables' => array('titre', 'identifiant', 'descriptif', 'css', 'message_retour', 'saisies', 'traitements', 'public','apres','unicite','message_erreur_unicite','url_redirect','resume_reponse'),
-               'champs_versionnes' => array('titre', 'identifiant', 'descriptif', 'css', 'message_retour', 'saisies', 'traitements', 'public','apres','unicite','message_erreur_unicite','url_redirect','resume_reponse'),
-               'field' => array(
-                       'id_formulaire' => 'bigint(21) NOT NULL',
-                       'identifiant' => 'varchar(200)',
-                       'titre' => "text NOT NULL default ''",
-                       'descriptif' => 'text',
-                       'css' => 'varchar(255) not null default ""',
-                       'message_retour' => "text NOT NULL default ''",
-                       'saisies' => "longtext NOT NULL default ''",
-                       'traitements' => "text NOT NULL default ''",
-                       'public' => "enum('non', 'oui') DEFAULT 'non' NOT NULL",
-                       'apres' => "varchar(12) NOT NULL default ''",
-                       'unicite' => "text NOT NULL default ''",
-                       'message_erreur_unicite' => "text NOT NULL default ''",
-                       'url_redirect' => 'varchar(255)',
-                       'statut' => "varchar(10) NOT NULL default ''",
-                       'resume_reponse' => "text NOT NULL default ''",
-                       'date_creation' => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
-                       'maj' => 'timestamp',
-               ),
-               'key' => array(
-                       'PRIMARY KEY' => 'id_formulaire'
-               ),
-               'join'=> array(
-                       'id_formulaire' => 'id_formulaire'
-               ),
-               'statut'=> array(
-                       array(
-                               'champ' => 'statut',
-                               'publie' => 'publie',
-                               'previsu' => 'publie,prop',
-                               'exception' => array('statut', 'tout'),
-                       )
-               ),
-               'texte_changer_statut' => 'formidable:changer_statut',
-               'rechercher_champs' => array(
-                 'titre' => 5, 'descriptif' => 3, 'identifiant' => 3,
-               ),
-               'statut_titres' => array(
-                       'prop'=>'info_article_propose',
-                       'publie'=>'info_article_publie',
-                       'refuse'=>'formidable:info_formulaire_refuse',
-                       'poubelle'=>'info_article_supprime'
-               ),
-               'statut_textes_instituer' => array(
-                       'prop' => 'texte_statut_propose_evaluation',
-                       'publie' => 'texte_statut_publie',
-                       'refuse'=>'formidable:texte_statut_refuse',
-                       'poubelle' => 'texte_statut_poubelle',
-               ),
-               'page' => (lire_config('formidable/analyse/activer_pages')=='on') ? 'formulaire' : false,
-
-       );
-
-       $tables['spip_formulaires_reponses'] = array(
-               'type_objet'=>'formulaires_reponse',
-               'table_objet_surnoms' => array('formulairesreponse'),
-               'type'=>'formulaires_reponse',
-               'type_surnoms' => array('formulairesreponse'),
-               'titre' => "'' AS titre, '' AS lang",
-               'date' => 'date',
-               'principale' => 'oui',
-               'info_aucun_objet'=> 'formidable:info_aucune_reponse',
-               'info_1_objet' => 'formidable:info_1_reponse',
-               'info_nb_objets' => 'formidable:info_nb_reponses',
-
-               'field' => array(
-                       'id_formulaires_reponse' => 'bigint(21) NOT NULL',
-                       'id_formulaire' => 'bigint(21) NOT NULL default 0',
-                       'date' => "datetime NOT NULL default '0000-00-00 00:00:00'",
-                       'ip' => "varchar(255) NOT NULL default ''",
-                       'id_auteur' => 'bigint(21) NOT NULL default 0',
-                       'cookie' => "varchar(255) NOT NULL default ''",
-                       'statut' => "varchar(10) NOT NULL default ''",
-                       'maj' => 'timestamp'
-               ),
-               'key' => array(
-                       'PRIMARY KEY' => 'id_formulaires_reponse',
-                       'KEY id_formulaire' => 'id_formulaire',
-                       'KEY id_auteur' => 'id_auteur',
-                       'KEY cookie' => 'cookie'
-               ),
-               'join' => array(
-                       'id_formulaires_reponse' => 'id_formulaires_reponse',
-                       'id_formulaire' => 'id_formulaire',
-                       'id_auteur' => 'id_auteur'
-               ),
-               'statut'=> array(
-                       array(
-                               'champ' => 'statut',
-                               'publie' => 'publie',
-                               'previsu' => 'publie,prop',
-                               'exception' => array('statut', 'tout'),
-                       )
-               ),
-               'texte_changer_statut' => 'formulaires_reponse:changer_statut',
-               'rechercher_champs' => array('ip'=>1),
-               'rechercher_jointures' => array(
-                       'formulaires_reponses_champ' => array('valeur' => 4),
-               ),
-               'statut_titres' => array(
-                       'prop'=>'formidable:info_reponse_proposee',
-                       'publie'=>'formidable:info_reponse_publiee',
-                       'poubelle' => 'formidable:info_reponse_poubelle',
-                       'refuse'=>'formidable:info_reponse_refusee'
-               ),
-               'statut_textes_instituer' => array(
-                       'prop' => 'formidable:texte_statut_propose_evaluation',
-                       'publie' => 'formidable:texte_statut_publie',
-                       'refuse' => 'formidable:texte_statut_refusee',
-                       'poubelle' => 'formidable:texte_statut_poubelle'
-               ),
-       );
-       return $tables;
-}
-
-/**
- * Déclarer les tables principales de formidable
- *
- * @pipeline declarer_tables_principales
- * @param array $tables_principales
- *     Description des tables
- * @return array
- *     Description complétée des tables
-**/
-function formidable_declarer_tables_principales($tables_principales) {
-
-       // Table formulaires_reponses_champs
-       $formulaires_reponses_champs = array(
-               'id_formulaires_reponses_champ' => 'bigint(21) NOT NULL',
-               'id_formulaires_reponse' => 'bigint(21) NOT NULL default 0',
-               'nom' => "varchar(255) NOT NULL default ''",
-               'valeur' => "text NOT NULL DEFAULT ''",
-               'maj' => 'timestamp'
-       );
-       $formulaires_reponses_champs_cles = array(
-               'PRIMARY KEY' => 'id_formulaires_reponses_champ',
-               'KEY id_formulaires_reponse' => 'id_formulaires_reponse',
-               'KEY nom' => 'nom',
-               'UNIQUE reponse' => 'id_formulaires_reponse,nom',
-       );
-       $tables_principales['spip_formulaires_reponses_champs'] = array(
-               'field' => &$formulaires_reponses_champs,
-               'key' => &$formulaires_reponses_champs_cles
-       );
-
-       return $tables_principales;
-}
-
-/**
- * Déclarer les tables auxiliaires de formidable
- *
- * @pipeline declarer_tables_auxiliaires
- * @param array $tables_auxiliaires
- *     Description des tables
- * @return array
- *     Description complétée des tables
-**/
-function formidable_declarer_tables_auxiliaires($tables_auxiliaires) {
-       $formulaires_liens = array(
-               'id_formulaire' => "bigint(21) DEFAULT '0' NOT NULL",
-               'id_objet'      => "bigint(21) DEFAULT '0' NOT NULL",
-               'objet' => "VARCHAR (25) DEFAULT '' NOT NULL"
-       );
-
-       $formulaires_liens_cles = array(
-               'PRIMARY KEY' => 'id_formulaire,id_objet,objet',
-               'KEY id_formulaire' => 'id_formulaire'
-       );
-
-       $tables_auxiliaires['spip_formulaires_liens'] = array(
-               'field' => &$formulaires_liens,
-               'key' => &$formulaires_liens_cles
-       );
-
-       return $tables_auxiliaires;
-}
diff --git a/www/plugins/formidable/corbeille/formulaires_pre_suppression.php b/www/plugins/formidable/corbeille/formulaires_pre_suppression.php
deleted file mode 100644 (file)
index 090c2bc..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable');
-include_spip('base/abstract_sql');
-
-/**
- * Supprime les fichiers + les réponses d'un formulaire qu'on vient de supprimer avec la corbeille
- * @param array $ids
- *
-**/
-function corbeille_formulaires_pre_suppression_dist($ids) {
-       foreach ($ids as $id_formulaire) {
-               $res = sql_select('id_formulaires_reponse', 'spip_formulaires_reponses', 'id_formulaire='.intval($id_formulaire));
-               while ($champ = sql_fetch($res)) {
-                       $id_formulaires_reponse = $champ['id_formulaires_reponse'];
-                       sql_delete('spip_formulaires_reponses_champs', "id_formulaires_reponse=$id_formulaires_reponse");
-                       sql_delete('spip_formulaires_reponses', "id_formulaires_reponse=$id_formulaires_reponse");
-               }
-               formidable_effacer_fichiers_formulaire($id_formulaire);
-               spip_log("Effacement des réponses du formulaire $id_formulaire via la corbeille", 'formidable');
-       }
-}
diff --git a/www/plugins/formidable/corbeille/formulaires_reponses_pre_suppression.php b/www/plugins/formidable/corbeille/formulaires_reponses_pre_suppression.php
deleted file mode 100644 (file)
index 57202f8..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-include_spip('inc/formidable');
-include_spip('base/abstract_sql');
-
-/**
- * Supprime les fichiers + les champs d'une réponse qu'on vient de supprimer avec la corbeille
- * @param array $ids
- *
-**/
-function corbeille_formulaires_reponses_pre_suppression_dist($ids) {
-       foreach ($ids as $id_formulaires_reponse) {
-               $id_formulaire = sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', 'id_formulaires_reponse='.intval($id_formulaires_reponse));
-               formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse);
-               sql_delete('spip_formulaires_reponses_champs', "id_formulaires_reponse=$id_formulaires_reponse");
-               spip_log("Effacement des champs de la réponse $id_formulaires_reponse via la corbeille", 'formidable');
-       }
-}
diff --git a/www/plugins/formidable/css/formidable_analyse.css.html b/www/plugins/formidable/css/formidable_analyse.css.html
deleted file mode 100644 (file)
index 3a82a97..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-.formidable_analyse .stat {width:70%;}
-
-.progress-bar {
-       background-color: #f1f1f1;
-       height: 20px;
-       padding: 1px;
-       margin: 2px 0;
-       -moz-border-radius: 5px;
-       -webkit-border-radius: 5px;
-       border-radius: 5px;
-       -moz-box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
-       -webkit-box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
-       box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
-       position:relative; /* pour le strong du texte */
-}
-
-.progress-bar strong {
-       color:#000;
-       padding:0 .5em;
-       -webkit-moz-text-shadow: 0 1px 1px #fff;
-       -moz-text-shadow: 0 1px 1px #fff;
-       text-shadow: 0 1px 1px #fff;
-       position:absolute;
-       top:2px;
-       left:0;
-}
-.progress-bar strong small {font-size:90%; font-weight:normal;}
-
-.progress-bar span {
-       background-color: #bbb;
-         background-image: -webkit-gradient(linear, left top, left bottom, from(#bbb), to(#777));
-         background-image: -webkit-linear-gradient(top, #bbb, #777);
-         background-image: -moz-linear-gradient(top, #bbb, #777);
-         background-image: -ms-linear-gradient(top, #bbb, #777);
-         background-image: -o-linear-gradient(top, #bbb, #777);
-         background-image: linear-gradient(top, #bbb, #777); 
-       display: inline-block;
-       height: 100%;
-       -moz-border-radius: 3px;
-       -webkit-border-radius: 3px;
-       border-radius: 3px;
-       -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
-       -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
-       box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
-        -webkit-transition: width 2s ease-in-out;
-        -moz-transition: width 2s ease-in-out;
-        -ms-transition: width 2s ease-in-out;
-        -o-transition: width 2s ease-in-out;
-        transition: width 2s ease-in-out;    
-}
-
-.progress-bar.gray span {
-       background-color: #bbb;
-         background-image: -webkit-gradient(linear, left top, left bottom, from(#bbb), to(#777));
-         background-image: -webkit-linear-gradient(top, #bbb, #777);
-         background-image: -moz-linear-gradient(top, #bbb, #777);
-         background-image: -ms-linear-gradient(top, #bbb, #777);
-         background-image: -o-linear-gradient(top, #bbb, #777);
-         background-image: linear-gradient(top, #bbb, #777); 
-}
-
-.progress-bar.blue span {
-       background-color: #34c2e3;
-         background-image: -webkit-gradient(linear, left top, left bottom, from(#34c2e3), to(#13ACD1));
-         background-image: -webkit-linear-gradient(top, #34c2e3, #13ACD1);
-         background-image: -moz-linear-gradient(top, #34c2e3, #13ACD1);
-         background-image: -ms-linear-gradient(top, #34c2e3, #13ACD1);
-         background-image: -o-linear-gradient(top, #34c2e3, #13ACD1);
-         background-image: linear-gradient(top, #34c2e3, #13ACD1);  
-}
-
-.progress-bar.orange span {
-         background-color: #fecf23;
-         background-image: -webkit-gradient(linear, left top, left bottom, from(#fecf23), to(#fd9215));
-         background-image: -webkit-linear-gradient(top, #fecf23, #fd9215);
-         background-image: -moz-linear-gradient(top, #fecf23, #fd9215);
-         background-image: -ms-linear-gradient(top, #fecf23, #fd9215);
-         background-image: -o-linear-gradient(top, #fecf23, #fd9215);
-         background-image: linear-gradient(top, #fecf23, #fd9215);  
-}      
-
-.progress-bar.green span {
-         background-color: #a5df41;
-         background-image: -webkit-gradient(linear, left top, left bottom, from(#a5df41), to(#4ca916));
-         background-image: -webkit-linear-gradient(top, #a5df41, #4ca916);
-         background-image: -moz-linear-gradient(top, #a5df41, #4ca916);
-         background-image: -ms-linear-gradient(top, #a5df41, #4ca916);
-         background-image: -o-linear-gradient(top, #a5df41, #4ca916);
-         background-image: linear-gradient(top, #a5df41, #4ca916);  
-}
diff --git a/www/plugins/formidable/echanger/formulaire/forms.php b/www/plugins/formidable/echanger/formulaire/forms.php
deleted file mode 100644 (file)
index 8c0080c..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// Importation d'un formulaire forms&table
-
-function echanger_formulaire_forms_importer_dist($fichier) {
-       include_spip('inc/xml');
-       $arbre = spip_xml_load($fichier, false);
-
-       if ($arbre and is_array($arbre) and isset($arbre['forms'])) {
-               foreach ($arbre['forms'] as $forms) {
-                       foreach ($forms['form'] as $form) {
-                               $formulaire = array();
-                               $form_source = array(
-                                       'id_form' => intval(trim(spip_xml_aplatit($form['id_form']))),
-                                       'titre' => trim(spip_xml_aplatit($form['titre'])),
-                                       'descriptif' => trim(spip_xml_aplatit($form['descriptif'])),
-                                       'texte' => trim(spip_xml_aplatit($form['texte'])),
-                                       'email' => unserialize(trim(spip_xml_aplatit($form['email']))),
-                                       'moderation' => trim(spip_xml_aplatit($form['moderation'])),
-                                       'modifiable' => trim(spip_xml_aplatit($form['modifiable'])),
-                                       'multiple' => trim(spip_xml_aplatit($form['multiple'])),
-                                       'champconfirm' => trim(spip_xml_aplatit($form['champconfirm'])),
-                               );
-
-                               // configurer le formulaire (titre etc)
-                               forms_configure_formulaire($form_source, $formulaire);
-
-                               // ajouter les champs de saisies
-                               foreach ($form['fields'] as $fields) {
-                                       foreach ($fields['field'] as $field) {
-                                               $champ = array(
-                                                       'champ'=>trim(spip_xml_aplatit($field['champ'])),
-                                                       'titre'=>trim(spip_xml_aplatit($field['titre'])),
-                                                       'type'=>trim(spip_xml_aplatit($field['type'])),
-                                                       'obligatoire'=>trim(spip_xml_aplatit($field['obligatoire'])),
-                                                       'taille'=>trim(spip_xml_aplatit($field['taille'])),
-                                                       'extra_info'=>trim(spip_xml_aplatit($field['extra_info'])),
-                                                       'aide'=>trim(spip_xml_aplatit($field['aide'])),
-                                                       'saisie'=>trim(spip_xml_aplatit($field['saisie'])),
-                                               );
-
-                                               // Les choix pour les types select et multiple
-                                               if (isset($field['les_choix']) and is_array($field['les_choix'])) {
-                                                       $champ['choix'] = array();
-                                                       foreach ($field['les_choix'] as $les_choix) {
-                                                               foreach ($les_choix['un_choix'] as $un_choix) {
-                                                                       $champ['choix'][] = array(
-                                                                               'choix'=>trim(spip_xml_aplatit($un_choix['choix'])),
-                                                                               'titre'=>trim(spip_xml_aplatit($un_choix['titre'])),
-                                                                       );
-                                                               }
-                                                       }
-                                               }
-
-                                               if ($saisie = forms_champ_vers_saisie($champ)) {
-                                                       $formulaire['saisies'][] = $saisie;
-                                               }
-                                       }
-                               }
-
-                               // les traitements
-                               forms_configure_traitement_formulaire($form_source, $formulaire);
-                               $id_formulaire = forms_importe_en_base($formulaire);
-                       }
-               }
-       }
-
-       if ($id_formulaire) {
-               return $id_formulaire;
-       } else {
-               return _T('formidable:erreur_importer_forms');
-       }
-}
-
-/**
- * Importer le tableau $formulaire en base
- * @param array $formulaire
- * @return bool|int
- */
-function forms_importe_en_base($formulaire) {
-       include_spip('action/editer_formulaire');
-       // On insère un nouveau formulaire
-       // cas utilise par l'installation/import f&t
-       if (isset($formulaire['id_formulaire'])
-               and !sql_countsel('spip_formulaires', 'id_formulaire='.intval($formulaire['id_formulaire']))) {
-               $champs = array(
-                       'id_formulaire' => $formulaire['id_formulaire'],
-                       'statut' => 'prop',
-                       'date_creation' => date('Y-m-d H:i:s'),
-               );
-               // Envoyer aux plugins
-               $champs = pipeline(
-                       'pre_insertion',
-                       array(
-                               'args' => array(
-                                       'table' => 'spip_formulaires',
-                               ),
-                               'data' => $champs
-                       )
-               );
-               $id_formulaire = sql_insertq('spip_formulaires', $champs);
-
-               pipeline(
-                       'post_insertion',
-                       array(
-                               'args' => array(
-                                       'table' => 'spip_formulaires',
-                                       'id_objet' => $id_formulaire
-                               ),
-                               'data' => $champs
-                       )
-               );
-       } else {
-               $id_formulaire = formulaire_inserer();
-       }
-
-       $formulaire['saisies'] = forms_regroupe_saisies_fieldset($formulaire['saisies']);
-
-       if (is_array($formulaire['saisies'])) {
-               $formulaire['saisies'] = serialize($formulaire['saisies']);
-       }
-       if (is_array($formulaire['traitements'])) {
-               $formulaire['traitements'] = serialize($formulaire['traitements']);
-       }
-
-       // si l'identifiant existe deja (multiples imports du meme form)
-       // le dater
-       if (sql_countsel('spip_formulaires', 'identifiant='.sql_quote($formulaire['identifiant']))) {
-               $formulaire['identifiant'] .= '_'.date('Ymd_His');
-       }
-
-       // Si ok on modifie les champs de base
-       if ($id_formulaire > 0
-               and !($erreur = formulaire_modifier($id_formulaire, $formulaire))) {
-               return $id_formulaire;
-       }
-
-       return false;
-}
-
-/**
- * Configuration de l'objet formulaire formidable a partir du form f&t
- * @param array $form
- * @param array $formulaire
- */
-function forms_configure_formulaire($form, &$formulaire) {
-
-       // Le titre
-       $formulaire['titre'] = ($form['titre'] ? $form['titre'] : _T('info_sans_titre'));
-
-       // Generer un identifiant
-       // si id_form fourni, on s'en sert
-       if (isset($form['id_form'])) {
-               $formulaire['identifiant'] = 'form_import_'.$form['id_form'];
-       } else {
-               $formulaire['identifiant'] = 'form_import_'.preg_replace(',\W,', '_', strtolower($formulaire['titre']));
-       }
-
-       // Le descriptif
-       $formulaire['descriptif'] = (isset($form['descriptif']) ? $form['descriptif'] : '');
-
-       // Le message de retour si ok
-       $formulaire['message_retour'] = (isset($form['texte']) ? $form['texte'] : '');
-
-       if (!isset($formulaire['traitements'])) {
-               $formulaire['traitements'] = array();
-       }
-
-       if (!isset($formulaire['saisies'])) {
-               $formulaire['saisies'] = array();
-       }
-}
-
-/**
- * Configurer les traitements
- *
- * @param array $form
- * @param array $formulaire
- */
-function forms_configure_traitement_formulaire($form, &$formulaire) {
-       // Le traitement email
-       if ($form['champconfirm']) {
-               if (!isset($formulaire['traitements']['email'])) {
-                       $formulaire['traitements']['email'] = array();
-               }
-               $formulaire['traitements']['email']['champ_courriel_destinataire_form'] = $form['champconfirm'];
-       }
-
-       // $form['email'] est possiblement serialize
-       if (is_string($form['email']) and $a=unserialize($form['email'])) {
-               $form['email'] = $a;
-       }
-       if (is_array($form['email'])) {
-               if ($email_defaut = $form['email']['defaut']) {
-                       if (!isset($formulaire['traitements']['email'])) {
-                               $formulaire['traitements']['email'] = array();
-                       }
-                       $formulaire['traitements']['email']['destinataires_plus'] = $email_defaut;
-               }
-
-               // TODO email route : feature qui n'existe pas dans formidable
-               if ($route = $form['email']['route']) {
-               }
-       }
-
-       // Le traitement enregistrement : toujours
-       $formulaire['traitements']['enregistrement'] = array(
-               'moderation' => ($form['moderation'] == 'priori') ? 'priori' : 'posteriori',
-               'modifiable' => ($form['modifiable'] == 'oui') ? 'on' : '',
-               'multiple' => ($form['multiple'] == 'non') ? '' : 'on'
-       );
-}
-
-/**
- * On a genere un fieldset pour chaque separateur de f&t
- * il faut le peupler avec les saisies qui le suivent
- *
- * @param array $saisies
- * @return array
- */
-function forms_regroupe_saisies_fieldset($saisies) {
-       $s = array();
-       $ins = &$s;
-
-       foreach ($saisies as $k => $saisie) {
-               if ($saisie['saisie']=='fieldset') {
-                       if (!isset($saisies[$k]['saisies'])) {
-                               $saisies[$k]['saisies'] = array();
-                       }
-                       $ins = &$saisies[$k]['saisies'];
-                       $s[] = &$saisies[$k];
-               } else {
-                       $ins[] = &$saisies[$k];
-               }
-       }
-
-       return $s;
-}
-
-/**
- * Transforme un champ f&t en Saisie
- * @param array $champ
- *   string champ
- *   string titre
- *   string type
- *   string obligatoire
- *   string taille
- *   string aide
- *   string extra_info
- *   string saisie oui/non
- *   array choix
- *     string choix
- *     string titre
- * @return array|bool
- */
-function forms_champ_vers_saisie($champ) {
-       // Le truc par défaut
-       $saisie = array(
-               'saisie' => 'input',
-               'options' => array('size'=>40)
-       );
-
-       // On essaye de traduire tous les types de champs
-       $type = $champ['type'];
-       switch ($type) {
-               case 'texte':
-                       $saisie['saisie'] = 'textarea';
-                       unset($saisie['options']['size']);
-                       $saisie['options']['rows'] = 5;
-                       $saisie['options']['cols'] = 40;
-                       break;
-               case 'password':
-                       $saisie['options']['type'] = 'password';
-                       break;
-               case 'date':
-                       $saisie['saisie'] = 'date';
-                       $saisie['verifier'] = array(
-                               'type' => 'date'
-                       );
-                       break;
-               case 'num':
-               case 'monnaie':
-                       if (!isset($champ['taille']) or !intval($taille = $champ['taille'])) {
-                               $saisie['verifier'] = array(
-                                       'type' => 'entier'
-                               );
-                       } else {
-                               $saisie['verifier'] = array(
-                                       'type' => 'decimal'
-                               );
-                               $saisie['verifier']['options'] = array('nb_decimales' => $taille);
-                       }
-                       break;
-               case 'email':
-                       $saisie['verifier'] = array(
-                               'type' => 'email'
-                       );
-                       break;
-               case 'telephone':
-                       $saisie['verifier'] = array(
-                               'type' => 'telephone'
-                       );
-                       break;
-               case 'select':
-                       unset($saisie['options']['size']);
-                       $liste = $champ['extra_info'];
-                       if ($liste == 'radio') {
-                               $saisie['saisie'] = 'radio';
-                       } else {
-                               $saisie['saisie'] = 'selection';
-                       }
-                       break;
-               case 'multiple':
-                       $saisie['saisie'] = 'checkbox';
-                       unset($saisie['options']['size']);
-                       break;
-               case 'mot':
-                       $saisie['saisie'] = 'mot';
-                       $saisie['options']['id_groupe'] = $champ['extra_info'];
-                       unset($saisie['options']['size']);
-                       break;
-               case 'textestatique':
-                       $saisie['saisie'] = 'explication';
-                       unset($saisie['options']['size']);
-                       $saisie['options']['texte'] = $champ['titre'];
-                       unset($champ['titre']);
-                       unset($champ['aide']);
-                       break;
-               case 'separateur':
-                       $saisie['saisie'] = 'fieldset';
-                       $saisie['saisies'] = array();
-                       unset($saisie['options']['size']);
-                       break;
-               case 'fichier':
-                       // TODO saisie file NIY
-                       $saisie = null;
-                       break;
-       }
-
-       // On continue seulement si on a toujours une saisie
-       if (!$saisie) {
-               return false;
-       }
-
-       // Les choix pour les types select et multiple
-       if (isset($champ['choix']) and is_array($champ['choix'])) {
-               $saisie['options']['datas'] = array();
-               foreach ($champ['choix'] as $un_choix) {
-                       $choix = $un_choix['choix'];
-                       $titre = $un_choix['titre'];
-                       $saisie['options']['datas'][$choix] = $titre;
-               }
-       }
-
-       // Le nom
-       $saisie['options']['nom'] = $champ['champ'];
-
-       // Le label
-       if (isset($champ['titre']) and $champ['titre']) {
-               $saisie['options']['label'] = $champ['titre'];
-       }
-
-       // Obligatoire
-       if (isset($champ['obligatoire']) and $champ['obligatoire'] == 'oui') {
-               $saisie['options']['obligatoire'] = 'on';
-       }
-
-       // Explication éventuelle
-       if (isset($champ['aide']) and $explication = $champ['aide']) {
-               $saisie['options']['explication'] = $explication;
-       }
-
-       if (isset($champ['saisie']) and $champ['saisie']=='non') {
-               $saisie['options']['disable'] = 'on';
-               // masquer en JS, fallback
-               $saisie['options']['afficher_si'] = 'false';
-       }
-
-       return $saisie;
-}
diff --git a/www/plugins/formidable/echanger/formulaire/wcs.php b/www/plugins/formidable/echanger/formulaire/wcs.php
deleted file mode 100644 (file)
index 7df626d..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function echanger_formulaire_wcs_importer_dist($fichier) {
-       include_spip('inc/xml');
-       include_spip('inc/filtres');
-       include_spip('inc/saisies');
-       $arbre = spip_xml_load($fichier, false);
-
-       if ($arbre and is_array($arbre) and isset($arbre['formdef'])) {
-               foreach ($arbre['formdef'] as $form) {
-                       $formulaire = array();
-
-                       // Le titre
-                       $titre = filtrer_entites(trim(spip_xml_aplatit($form['name'])));
-                       $formulaire['titre'] = $titre ? $titre : _T('info_sans_titre');
-
-                       // On vérifie que l'identifiant n'existe pas déjà
-                               $formulaire['identifiant'] = str_replace('-', '_', trim(spip_xml_aplatit($form['url_name'])));
-                               $deja = sql_getfetsel(
-                                       'id_formulaire',
-                                       'spip_formulaires',
-                                       'identifiant = '.sql_quote($formulaire['identifiant'])
-                               );
-                               if ($deja) {
-                                       $formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
-                               }
-
-                       // Les champs
-                       $formulaire['saisies'] = array();
-                       // Par défaut le conteneur c'est le formulaire
-                       $conteneur =& $formulaire;
-                       foreach ($form['fields'] as $fields) {
-                               foreach ($fields['field'] as $field) {
-                                       $changer_conteneur = false;
-
-                                       // Le truc par défaut
-                                       $saisie = array(
-                                               'saisie' => 'input',
-                                               'options' => array('size'=>40)
-                                       );
-
-                                       // Le label
-                                       $saisie['options']['label'] = filtrer_entites(trim(spip_xml_aplatit($field['label'])));
-
-                                       // On essaye de traduire tous les types de champs
-                                       $type = trim(spip_xml_aplatit($field['type']));
-                                       switch ($type) {
-                                               case 'string':
-                                                       if ($size = intval(trim(spip_xml_aplatit($field['size'])))) {
-                                                               $saisie['options']['maxlength'] = $size;
-                                                               $saisie['verifier'] = array(
-                                                                       'type' => 'taille',
-                                                                       'options' => array('max'=>$size)
-                                                               );
-                                                       }
-                                                       break;
-                                               case 'text':
-                                                       $saisie['saisie'] = 'textarea';
-                                                       unset($saisie['options']['size']);
-                                                       $saisie['options']['rows'] = 5;
-                                                       $saisie['options']['cols'] = 40;
-                                                       if ($rows = intval(trim(spip_xml_aplatit($field['rows'])))) {
-                                                               $saisie['options']['rows'] = $rows;
-                                                       }
-                                                       if ($cols = intval(trim(spip_xml_aplatit($field['cols'])))) {
-                                                               $saisie['options']['cols'] = $cols;
-                                                       }
-                                                       break;
-                                               case 'date':
-                                                       $saisie['verifier'] = array(
-                                                               'type' => 'date'
-                                                       );
-                                                       break;
-                                               case 'email':
-                                                       $saisie['verifier'] = array(
-                                                               'type' => 'email'
-                                                       );
-                                                       break;
-                                               case 'item':
-                                                       unset($saisie['options']['size']);
-                                                       $saisie['saisie'] = 'selection';
-                                                       $saisie['options']['cacher_option_intro'] = 'on';
-                                                       break;
-                                               case 'bool':
-                                                       unset($saisie['options']['size']);
-                                                       $saisie['saisie'] = 'case';
-                                                       $saisie['options']['label_case'] = $saisie['options']['label'];
-                                                       unset($saisie['options']['label']);
-                                                       break;
-                                               case 'multiple':
-                                                       $saisie['saisie'] = 'checkbox';
-                                                       unset($saisie['options']['size']);
-                                                       break;
-                                               case 'comment':
-                                                       $saisie['saisie'] = 'explication';
-                                                       $saisie['options']['texte'] = $saisie['options']['label'];
-                                                       unset($saisie['options']['label']);
-                                                       break;
-                                               case 'page':
-                                                       $saisie['saisie'] = 'fieldset';
-                                                       unset($saisie['options']['size']);
-                                                       $saisie['saisies'] = array();
-                                                       $changer_conteneur = true;
-                                                       // On remet le conteneur au niveau du formulaire
-                                                       $conteneur =& $formulaire;
-                                                       break;
-                                               case 'subtitle':
-                                               case 'file':
-                                                       $saisie = null;
-                                       }
-
-                                       // On continue seulement si on a toujours une saisie
-                                       if ($saisie) {
-                                               // Les choix pour les types select
-                                               if (isset($field['items']) and is_array($field['items'])) {
-                                                       $saisie['options']['datas'] = array();
-                                                       foreach ($field['items'] as $items) {
-                                                               foreach ($items['item'] as $cle => $item) {
-                                                                       $titre = filtrer_entites(trim($item));
-                                                                       $saisie['options']['datas']['choix_'.$cle] = $titre;
-                                                               }
-                                                       }
-                                               }
-
-                                               // Le nom
-                                               $saisie['options']['nom'] = saisies_generer_nom($formulaire['saisies'], $saisie['saisie']);
-
-                                               // Obligatoire
-                                               if (trim(spip_xml_aplatit($field['required'])) == 'True') {
-                                                       $saisie['options']['obligatoire'] = 'on';
-                                               }
-
-                                               // Explication éventuelle
-                                               if ($explication = trim(spip_xml_aplatit($field['hint']))) {
-                                                       $saisie['options']['explication'] = $explication;
-                                               }
-
-                                               // On ajoute enfin la saisie
-                                               $conteneur['saisies'][] = $saisie;
-
-                                               // Faut-il changer de conteneur ?
-                                               if ($changer_conteneur) {
-                                                       $conteneur =& $conteneur['saisies'][count($conteneur['saisies'])-1];
-                                               }
-                                       }
-                               }
-                       }
-
-                       include_spip('action/editer_formulaire');
-                       // On insère un nouveau formulaire
-                       $id_formulaire = formulaire_inserer();
-                       // Si ça a marché on transforme les tableaux et on modifie les champs
-                       if ($id_formulaire > 0) {
-                               if (is_array($formulaire['saisies'])) {
-                                       $formulaire['saisies'] = serialize($formulaire['saisies']);
-                               }
-                               if (is_array($formulaire['traitements'])) {
-                                       $formulaire['traitements'] = serialize($formulaire['traitements']);
-                               }
-
-                               $erreur = formulaire_modifier($id_formulaire, $formulaire);
-                       }
-               }
-       }
-
-       if ($id_formulaire and !$erreur) {
-               return $id_formulaire;
-       } else {
-               return _T('formidable:erreur_importer_wcs').' : '.$erreur;
-       }
-}
diff --git a/www/plugins/formidable/echanger/formulaire/yaml.php b/www/plugins/formidable/echanger/formulaire/yaml.php
deleted file mode 100644 (file)
index 4756515..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function echanger_formulaire_yaml_exporter_dist($id_formulaire) {
-       include_spip('base/abstract_sql');
-       include_spip('inc/yaml');
-       $id_formulaire = intval($id_formulaire);
-       $export = '';
-
-       if ($id_formulaire > 0) {
-               // On récupère le formulaire
-               $formulaire = sql_fetsel(
-                       '*',
-                       'spip_formulaires',
-                       'id_formulaire = '.$id_formulaire
-               );
-
-               // On décompresse les trucs sérialisés
-               $formulaire['saisies'] = unserialize($formulaire['saisies']);
-               $formulaire['traitements'] = unserialize($formulaire['traitements']);
-
-               // On envode en yaml
-               $export = yaml_encode($formulaire);
-       }
-
-       Header('Content-Type: text/x-yaml;');
-       Header('Content-Disposition: attachment; filename=formulaire-'.$formulaire['identifiant'].'.yaml');
-       Header('Content-Length: '.strlen($export));
-       echo $export;
-       exit();
-}
-
-function echanger_formulaire_yaml_importer_dist($fichier) {
-       $yaml = '';
-       lire_fichier($fichier, $yaml);
-       // Si on a bien recupere une chaine on tente de la decoder
-       if ($yaml) {
-               include_spip('inc/yaml');
-               $formulaire = yaml_decode($yaml);
-               // Si le decodage marche on importe alors le contenu
-               if (is_array($formulaire)) {
-                       include_spip('action/editer_formulaire');
-                       // On enlève les champs inutiles
-                       unset($formulaire['id_formulaire']);
-                       // On vérifie que l'identifiant n'existe pas déjà
-                       $deja = sql_getfetsel(
-                               'id_formulaire',
-                               'spip_formulaires',
-                               'identifiant = '.sql_quote($formulaire['identifiant'])
-                       );
-                       if ($deja) {
-                               $formulaire['identifiant'] .= '_'.date('Ymd_His');
-                       }
-
-                       // On insère un nouveau formulaire
-                       $id_formulaire = formulaire_inserer();
-                       // Si ça a marché on transforme les tableaux et on modifie les champs
-                       if ($id_formulaire > 0) {
-                               if (is_array($formulaire['saisies'])) {
-                                       $formulaire['saisies'] = serialize($formulaire['saisies']);
-                               }
-                               if (is_array($formulaire['traitements'])) {
-                                       $formulaire['traitements'] = serialize($formulaire['traitements']);
-                               }
-
-                               $erreur = formulaire_modifier($id_formulaire, $formulaire);
-                       }
-               }
-       }
-
-       if ($id_formulaire and !$erreur) {
-               return $id_formulaire;
-       } else {
-               return _T('formidable:erreur_importer_yaml').' : '.$erreur;
-       }
-}
diff --git a/www/plugins/formidable/exec/puce_statut_formulaires.php b/www/plugins/formidable/exec/puce_statut_formulaires.php
deleted file mode 100644 (file)
index dd52003..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Gestion des puces d'action rapide de formulaires
- *
- * @package SPIP\Formidable\Puce_statut
- **/
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/presentation');
-
-/**
- * Gestion de l'affichage ajax des puces d'action rapide de formulaires
- *
- * Récupère l'identifiant id et le type d'objet dans les données postées
- * et appelle la fonction de traitement de cet exec.
- *
- * @see exec_puce_statut_formulaires_args()
- * @return string Code HTML
-**/
-function exec_puce_statut_formulaires_dist() {
-       exec_puce_statut_formulaires_args(_request('id'), _request('type'));
-}
-
-/**
- * Traitement de l'affichage ajax des puces d'action rapide
- *
- * Appelle la fonction de traitement des puces statuts
- * après avoir retrouvé le statut en cours de l'objet
- * et son parent s'il en a un
- *
- * @param int $id
- *     Identifiant de l'objet
- * @param string $type
- *     Type d'objet
- * @return string Code HTML
-**/
-function exec_puce_statut_formulaires_args($id, $type) {
-       if (in_array($type, array('formulaires', 'formulaires_reponse'))) {
-               $table = table_objet_sql($type);
-               $prim = id_table_objet($type);
-               $id = intval($id);
-               $r = sql_fetsel('id_formulaire,statut', $table, "$prim=$id");
-               $statut = $r['statut'];
-               $id_formulaire = $r['id_formulaire'];
-       } else {
-               $id_formulaire = intval($id);
-               $statut = 'prop'; // arbitraire
-       }
-       $puce_statut = charger_fonction('puce_statut', 'inc');
-       ajax_retour($puce_statut($id, $statut, $id_formulaire, $type, true));
-}
diff --git a/www/plugins/formidable/formidable_administrations.php b/www/plugins/formidable/formidable_administrations.php
deleted file mode 100644 (file)
index b13099c..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-
-/**
- * Fichier gérant l'installation et désinstallation du plugin
- *
- * @package SPIP\Formidable\Installation
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Installation/maj des tables de formidable...
- *
- * @param string $nom_meta_base_version
- *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
- * @param string $version_cible
- *     Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
- * @return void
- */
-function formidable_upgrade($nom_meta_base_version, $version_cible) {
-       // Création des tables
-       include_spip('base/create');
-       include_spip('base/abstract_sql');
-
-       $maj = array();
-       $maj['create'] = array(
-               array('maj_tables',array(
-                       'spip_formulaires',
-                       'spip_formulaires_reponses',
-                       'spip_formulaires_reponses_champs',
-                       'spip_formulaires_liens')),
-               array('formidable_importer_forms'),
-               array('formidable_importer_forms_donnees'),
-               array('formidable_associer_forms'),
-       );
-
-       // Ajout du choix de ce qu'on affiche à la fin des traitements
-       $maj['0.4.0'] = array(array('maj_tables',array('spip_formulaires')));
-       // Ajout d'une URL de redirection
-       $maj['0.5.0'] = array(array('maj_tables',array('spip_formulaires')));
-       // Modif du type du message de retour pour pouvoir mettre plus de chose
-       $maj['0.5.1'] = array(array('sql_alter','TABLE spip_formulaires CHANGE message_retour message_retour text NOT NULL default ""'));
-       // Passer le champ saisies en longtext pour permettre d'y stocker des formulaires longs
-       $maj['0.5.2'] = array(array('sql_alter','TABLE spip_formulaires CHANGE saisies saisies longtext NOT NULL default ""'));
-       // Ajouter un champ date de création
-       $maj['0.5.3'] = array(array('sql_alter','TABLE spip_formulaires ADD date_crea datetime NOT NULL DEFAULT "0000-00-00 00:00:00"'));
-       // Renommer la date de création (pas d'abbréviations dans les noms)
-       $maj['0.5.5'] = array(array('sql_alter','TABLE spip_formulaires CHANGE date_crea date_creation datetime NOT NULL DEFAULT "0000-00-00 00:00:00"'));
-       // statut publie sur les formulaires sans statut
-       $maj['0.5.6'] = array(
-               array('sql_updateq', 'spip_formulaires', array('statut'=>'publie'), 'statut='.sql_quote('')),
-       );
-       $maj['0.6.0'] = array(
-               array('sql_alter','TABLE spip_formulaires_reponses_champs RENAME TO spip_formulaires_reponses_champs_bad'),
-               array('maj_tables',array('spip_formulaires_reponses_champs')),
-               array('formidable_transferer_reponses_champs'),
-               array('sql_drop_table','spip_formulaires_reponses_champs_bad'),
-       );
-       $maj['0.6.1'] = array(
-               array('formidable_unifier_reponses_champs'),
-       );
-       $maj['0.6.3'] = array(
-               array('sql_alter','TABLE spip_formulaires_reponses_champs ADD UNIQUE reponse (id_formulaires_reponse,nom)'),
-       );
-       $maj['0.6.4'] = array(
-               // champ resume_reponse
-               array('maj_tables',array('spip_formulaires')),
-       );
-       // Pouvoir rendre un champ unique
-       $maj['0.6.5'] = array(
-               // champ resume_reponse
-               array('maj_tables',array('spip_formulaires')),
-       );
-       $maj['0.6.6'] = array(
-               array('sql_updateq', 'spip_formulaires_reponses', array('statut' => 'refuse'), 'statut='.sql_quote('poubelle')),
-       );
-       // Ajouter un champ "css" sur les formulaires
-       $maj['0.7.0'] = array(
-               array('maj_tables', array('spip_formulaires')),
-       );
-
-       include_spip('base/upgrade');
-       maj_plugin($nom_meta_base_version, $version_cible, $maj);
-}
-
-
-function formidable_unifier_reponses_champs() {
-
-       $rows = sql_allfetsel(
-               'DISTINCT id_formulaires_reponses_champ,id_formulaires_reponse,nom,count(id_formulaires_reponse) AS N',
-               'spip_formulaires_reponses_champs',
-               'nom LIKE '.sql_quote('multiple%').' OR nom LIKE '.sql_quote('mot%'),
-               'concat( id_formulaires_reponse, nom )',
-               'id_formulaires_reponse',
-               '0,100',
-               'N>1'
-       );
-       do {
-               foreach ($rows as $row) {
-                       #var_dump($row);
-                       // pour chaque reponse on recupere tous les champs
-                       $reponse = sql_allfetsel(
-                               '*',
-                               'spip_formulaires_reponses_champs',
-                               'id_formulaires_reponse='.intval($row['id_formulaires_reponse'])
-                       );
-                       spip_log('id_formulaires_reponse '.$row['id_formulaires_reponse'], 'formidable_unifier_reponses_champs'._LOG_INFO_IMPORTANTE);
-                       // on les reinsere un par un dans la nouvelle table propre
-                       $data = array();
-                       foreach ($reponse as $champ) {
-                               $data[$champ['nom']][] = $champ;
-                       }
-
-                       foreach ($data as $nom => $champs) {
-                               if (count($champs)>1) {
-                                       #var_dump($champs);
-                                       $keep = $champs[0]['id_formulaires_reponses_champ'];
-                                       $delete = array();
-                                       $valeurs = array();
-                                       foreach ($champs as $champ) {
-                                               $valeurs[] = $champ['valeur'];
-                                               if ($champ['id_formulaires_reponses_champ'] !== $keep) {
-                                                       $delete[] = $champ['id_formulaires_reponses_champ'];
-                                               }
-                                       }
-                                       $valeurs = serialize($valeurs);
-                                       #var_dump($valeurs);
-                                       #var_dump($keep);
-                                       #var_dump($delete);
-                                       sql_updateq('spip_formulaires_reponses_champs', array('valeur'=>$valeurs), 'id_formulaires_reponses_champ='.intval($keep));
-                                       sql_delete('spip_formulaires_reponses_champs', sql_in('id_formulaires_reponses_champ', $delete));
-                                       //die();
-                               }
-                       }
-                       #var_dump($data);
-                       //die('nothing?');
-
-                       if (time()>_TIME_OUT) {
-                               return;
-                       }
-               }
-
-               if (time()>_TIME_OUT) {
-                       return;
-               }
-       } while ($rows = sql_allfetsel('DISTINCT id_formulaires_reponses_champ,id_formulaires_reponse,nom,count( id_formulaires_reponse ) AS N', 'spip_formulaires_reponses_champs', 'nom LIKE '.sql_quote('multiple%').' OR nom LIKE '.sql_quote('mot%'), 'concat( id_formulaires_reponse, nom )', 'id_formulaires_reponse', '0,100', 'N>1'));
-       //die('fini?');
-}
-
-
-function formidable_transferer_reponses_champs() {
-
-       $rows = sql_allfetsel('DISTINCT id_formulaires_reponse', 'spip_formulaires_reponses_champs_bad', '', 'id_formulaires_reponse', '', '0,100');
-       do {
-               foreach ($rows as $row) {
-                       // pour chaque reponse on recupere tous les champs
-                       $reponse = sql_allfetsel('*', 'spip_formulaires_reponses_champs_bad', 'id_formulaires_reponse='.intval($row['id_formulaires_reponse']));
-                       // on les reinsere un par un dans la nouvelle table propre
-                       foreach ($reponse as $champ) {
-                               sql_insertq('spip_formulaires_reponses_champs', $champ);
-                       }
-                       // et on les vire de la mauvaise
-                       sql_delete('spip_formulaires_reponses_champs_bad', 'id_formulaires_reponse='.intval($row['id_formulaires_reponse']));
-                       if (time()>_TIME_OUT) {
-                               return;
-                       }
-               }
-
-               if (time()>_TIME_OUT) {
-                       return;
-               }
-       } while ($rows = sql_allfetsel('DISTINCT id_formulaires_reponse', 'spip_formulaires_reponses_champs_bad', '', 'id_formulaires_reponse', '', '0,100'));
-}
-
-
-/**
- * Désinstallation/suppression des tables de formidable
- *
- * @param string $nom_meta_base_version
- *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
- * @return void
- */
-function formidable_vider_tables($nom_meta_base_version) {
-
-       include_spip('inc/meta');
-       include_spip('base/abstract_sql');
-
-       // On efface les tables du plugin
-       sql_drop_table('spip_formulaires');
-       sql_drop_table('spip_formulaires_reponses');
-       sql_drop_table('spip_formulaires_reponses_champs');
-       sql_drop_table('spip_formulaires_liens');
-
-       // on efface les champs d'import de f&t si il y a lieu
-       $trouver_table = charger_fonction('trouver_table', 'base');
-       if ($trouver_table('spip_forms')) {
-               sql_alter('TABLE spip_forms DROP id_formulaire');
-       }
-       if ($trouver_table('spip_forms_donnees')) {
-               sql_alter('TABLE spip_forms_donnees DROP id_formulaires_reponse');
-       }
-       // On efface la version entregistrée
-       effacer_meta($nom_meta_base_version);
-}
-
-/**
- * Associer les <formXX> issus de f&t aux articles concernes
- */
-function formidable_associer_forms() {
-       include_spip('inc/rechercher');
-       include_spip('inc/editer_liens');
-       $forms = sql_allfetsel('*', 'spip_formulaires', 'identifiant REGEXP '.sql_quote('^form[0-9]+$'));
-       foreach ($forms as $form) {
-               if (!sql_countsel('spip_formulaires_liens', 'id_formulaire='.intval($form['id_formulaire']))) {
-                       $articles = array();
-                       $id = $form['identifiant'];
-                       #var_dump($id);
-                       $res = recherche_en_base("/<{$id}[>|]/", 'article');
-                       #var_dump($res);
-                       if (count($res) and isset($res['article'])) {
-                               foreach ($res['article'] as $id_article => $details) {
-                                       $articles[] = $id_article;
-                               }
-                       }
-                       #var_dump($form['id_formulaire']);
-                       #var_dump($articles);
-                       objet_associer(array('formulaire' => array($form['id_formulaire'])), array('article' => $articles));
-               }
-               if (time()>_TIME_OUT) {
-                       return;
-               }
-       }
-}
-
-/**
- * Importer les formulaires de f&t
- */
-function formidable_importer_forms() {
-       $trouver_table = charger_fonction('trouver_table', 'base');
-       if ($trouver_table('spip_forms')) {
-               sql_alter('TABLE spip_forms ADD id_formulaire bigint(21) NOT NULL DEFAULT 0');
-
-               include_spip('echanger/formulaire/forms');
-
-               $forms = sql_allfetsel('*', 'spip_forms', 'id_formulaire=0 AND type_form='.sql_quote('').' OR type_form='.sql_quote('sondage'), '', 'id_form');
-               foreach ($forms as $form) {
-                       $formulaire = array();
-                       // configurer le formulaire (titre etc)
-                       forms_configure_formulaire($form, $formulaire);
-
-                       // identifiant formXX puisqu'on est en installation, pas de risque de conflits
-                       // et facilite la migration de modele
-                       $formulaire['identifiant'] = 'form' . $form['id_form'];
-                       // on peut faire ca aussi puisqu'on est a l'installation
-                       $formulaire['id_formulaire'] = $form['id_form'];
-
-                       $fields = sql_allfetsel('*', 'spip_forms_champs', 'id_form='.intval($form['id_form']), '', 'rang');
-                       foreach ($fields as $field) {
-                               $choix = sql_allfetsel('*', 'spip_forms_champs_choix', 'id_form='.intval($form['id_form']).' AND champ='.sql_quote($field['champ']), '', 'rang');
-                               if (count($choix)) {
-                                       $field['choix'] = $choix;
-                               }
-
-                               if ($saisie = forms_champ_vers_saisie($field)) {
-                                       $formulaire['saisies'][] = $saisie;
-                               }
-                       }
-
-                       // les traitements
-                       forms_configure_traitement_formulaire($form, $formulaire);
-
-                       // si ce formulaire a des reponses on le met en publie
-                       if (sql_countsel('spip_forms_donnees', 'id_form='.intval($form['id_form']))) {
-                               $formulaire['statut'] = 'publie';
-                       }
-
-                       $id_formulaire = forms_importe_en_base($formulaire);
-                       spip_log('Import spip_forms #'.$form['id_form']." en spip_formulaires #$id_formulaire", 'maj'._LOG_INFO_IMPORTANTE);
-
-                       sql_update('spip_forms', array('id_formulaire' => $id_formulaire), 'id_form='.intval($form['id_form']));
-
-                       if (time()>_TIME_OUT) {
-                               return;
-                       }
-               }
-       }
-       include_spip('inc/drapeau_edition');
-       debloquer_tous($GLOBALS['visiteur_session']['id_auteur']);
-}
-
-function formidable_importer_forms_donnees() {
-       $trouver_table = charger_fonction('trouver_table', 'base');
-       if ($trouver_table('spip_forms')) {
-               sql_alter('TABLE spip_forms_donnees ADD id_formulaires_reponse bigint(21) NOT NULL DEFAULT 0');
-
-               // 2 champs de plus pour ne pas perdre des donnees
-               sql_alter("TABLE spip_formulaires_reponses ADD url varchar(255) NOT NULL default ''");
-               sql_alter("TABLE spip_formulaires_reponses ADD confirmation varchar(10) NOT NULL default ''");
-
-               // table de correspondance id_form=>id_formulaire
-               $rows = sql_allfetsel('id_form,id_formulaire', 'spip_forms', 'id_formulaire>0');
-               $trans = array();
-               foreach ($rows as $row) {
-                       $trans[$row['id_form']] = $row['id_formulaire'];
-               }
-
-               $rows = sql_allfetsel('*', 'spip_forms_donnees', sql_in('id_form', array_keys($trans)).' AND id_formulaires_reponse=0', '', 'id_donnee', '0,100');
-               do {
-                       foreach ($rows as $row) {
-                               #var_dump($row);
-                               $reponse = array(
-                                       'id_formulaires_reponse' => $row['id_donnee'], // conserver le meme id par facilite (on est sur une creation de base)
-                                       'id_formulaire' => $trans[$row['id_form']],
-                                       'date' => $row['date'],
-                                       'ip' => $row['ip'],
-                                       'id_auteur' => $row['id_auteur'],
-                                       'cookie' => $row['cookie'],
-                                       'statut' => $row['statut'],
-                                       'url' => $row['url'],
-                                       'confirmation' => $row['confirmation'],
-                               );
-
-                               #var_dump($reponse);
-                               $id_formulaires_reponse = sql_insertq('spip_formulaires_reponses', $reponse);
-                               #var_dump($id_formulaires_reponse);
-                               if ($id_formulaires_reponse) {
-                                       $donnees = sql_allfetsel(
-                                               "$id_formulaires_reponse as id_formulaires_reponse,champ as nom,valeur",
-                                               'spip_forms_donnees_champs',
-                                               'id_donnee='.intval($row['id_donnee'])
-                                       );
-                                       $data = array();
-                                       foreach ($donnees as $donnee) {
-                                               $data[$donnee['nom']][] = $donnee;
-                                       }
-                                       $ins = array();
-                                       foreach ($data as $nom => $valeurs) {
-                                               if (count($valeurs) == 1) {
-                                                       $ins[] = reset($valeurs);
-                                               } else {
-                                                       $v = array();
-                                                       foreach ($valeurs as $valeur) {
-                                                               $v[] = $valeur['valeur'];
-                                                       }
-                                                       $valeurs[0]['valeur'] = serialize($v);
-                                                       $ins[] = $valeurs[0];
-                                               }
-                                       }
-                                       sql_insertq_multi('spip_formulaires_reponses_champs', $ins);
-                                       // et on marque la donnee pour ne pas la rejouer
-                                       sql_update('spip_forms_donnees', array('id_formulaires_reponse' => $id_formulaires_reponse), 'id_donnee='.intval($row['id_donnee']));
-                               }
-                               if (time()>_TIME_OUT) {
-                                       return;
-                               }
-                       }
-                       if (time()>_TIME_OUT) {
-                               return;
-                       }
-               } while ($rows = sql_allfetsel('*', 'spip_forms_donnees', sql_in('id_form', array_keys($trans)).' AND id_formulaires_reponse=0', '', 'id_donnee', '0,100'));
-       }
-}
diff --git a/www/plugins/formidable/formidable_autorisations.php b/www/plugins/formidable/formidable_autorisations.php
deleted file mode 100644 (file)
index 035765d..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-<?php
-
-/**
- * Déclaration des autorisations
- *
- * @package SPIP\Formidable\Autorisations
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('action/editer_liens');
-include_spip('inc/config');
-
-/**
- * Autorisation par auteur et par formulaire
- *
- * Seuls les auteurs associés à un formulaire peuvent y accéder
- *
- * @param  int   $id        id du formulaire à tester
- * @param  int   $id_auteur id de l'auteur à tester, si ==0 => auteur courant
- * @return bool  true s'il a le droit, false sinon
- *
-*/
-function formidable_autoriser_par_auteur($id, $id_auteur = 0) {
-       if ($id == 0) {
-               return true;
-       }
-
-       $retour = false;
-
-       if ($id_auteur == 0) {
-               $id_auteur = session_get('id_auteur');
-       }
-       if ($id_auteur == null) {
-               $retour = false;
-       } else {
-               $autorisations = objet_trouver_liens(array('formulaire' => $id), array('auteur' => $id_auteur));
-               $retour = count($autorisations) > 0;
-       }
-
-       return $retour;
-}
-
-/**
- * Réponses à un formulaire éditable par un auteur
- *
- * Est-on en présence d'un auteur qui tente de modifier les réponses d'un formulaire
- * et que Formidable est configuré pour prendre en compte les auteurs
- * et que les auteurs sont en droit de modifier les réponses de leurs formulaires ?
- *
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @return bool  true s'il a le droit, false sinon
- *
-*/
-function formidable_auteur_admin_reponse($qui) {
-       // L'auteur peut-il administrer les réponses ?
-       $admin_reponses_auteur = lire_config('formidable/analyse/admin_reponses_auteur');
-       $auteurs = lire_config('formidable/analyse/auteur');
-       $is_admin = (isset($qui['statut']) and $qui['statut'] == '0minirezo');
-       $retour = ($is_admin or (($auteurs == 'on') and ($admin_reponses_auteur == 'on')));
-
-       return $retour;
-}
-
-/**
- * Fonction d'appel pour le pipeline
- * @pipeline autoriser
- */
-function formidable_autoriser() {
-}
-
-/**
- * Autorisation d'éditer un formulaire formidable
- *
- * Seuls les admins peuvent éditer les formulaires
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt) {
-       $auteurs = lire_config('formidable/analyse/auteur');
-       /* administrateur ? */
-       if (isset($qui['statut']) and $qui['statut'] == '0minirezo' and (count($qui['restreint']) == 0)) {
-               return true;
-       }
-
-       /* Test des autorisations par auteur */
-       if ($auteurs == 'on') {
-               return formidable_autoriser_par_auteur($id);
-       }
-
-       /* Test des autorisations pour un admin restreint */
-       if (count($qui['restreint'])) {
-               $autoriser_admin_restreint = isset($GLOBALS['autoriser_admin_restreint'])
-                               ? $GLOBALS['autoriser_admin_restreint']
-                                       : lire_config('formidable/analyse/autoriser_admin_restreint') == 'on'
-                                               ? true
-                                               : false;
-
-               return $autoriser_admin_restreint;
-       }
-}
-
-/**
- * Autorisation de voir la liste des formulaires formidable
- *
- *  Admins et rédacteurs peuvent voir les formulaires existants
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt) {
-       if (isset($qui['statut']) and ($qui['statut'] == '1comite' or $qui['statut'] == '0minirezo')) {
-               return true;
-       } else {
-               return false;
-       }
-}
-
-
-/**
- * Autorisation de répondre à un formidable formidable
- *
- * On peut répondre à un formulaire si :
- * - c'est un formulaire classique
- * - on enregistre et que multiple = oui
- * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
- * - on enregistre et que multiple = non et que modifiable = oui
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) {
-       $id = intval($id);
-
-       // On regarde si il y a déjà le formulaire dans les options
-       if (isset($opt['formulaire'])) {
-               $formulaire = $opt['formulaire'];
-       } else {
-               // Sinon on va le chercher
-               $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
-       }
-
-       $traitements = unserialize($formulaire['traitements']);
-
-       // S'il n'y a pas d'enregistrement, c'est forcément bon
-       if (!isset($traitements['enregistrement']) or !($options = $traitements['enregistrement'])) {
-               return true;
-       } else {
-               // Sinon faut voir les options
-               // Si multiple = oui c'est bon
-               if ($options['multiple']) {
-                       return true;
-               } else {
-                       // Si c'est modifiable, c'est bon
-                       if ($options['modifiable']) {
-                               return true;
-                       } else {
-                               include_spip('inc/formidable');
-                               // Si la personne n'a jamais répondu, c'est bon
-                               if (!formidable_verifier_reponse_formulaire($id)) {
-                                       return true;
-                               } else {
-                                       return false;
-                               }
-                       }
-               }
-       }
-}
-
-/**
- * Autorisation d'associer un nouvel auteur à un formulaire
- *
- * mêmes autorisations que pour éditer le formulaire
- *
-**/
-function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
-       return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
-}
-
-/**
- * Autorisation de modifier un formulaire
- *
- * mêmes autorisations que pour éditer le formulaire
- *
-**/
-function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
-       return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
-}
-
-
-/**
- * Autorisation d'instituer une réponse
- *
- * On peut modérer une réponse si on est admin
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulairesreponse_instituer_dist($faire, $type, $id, $qui, $opt) {
-       return formidable_auteur_admin_reponse($qui);
-}
-
-/**
- * Autorisation de voir les réponses d'un formulaire formidable
- *
- * Au moins rédacteur pour voir les résultats
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt) {
-       return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
-}
-
-/**
- * Autorisation de modifier une réponse d'un formulaire formidable
- *
- * suivant la config, un administrateur ou l'auteur du formulaire peuvent
- * voir les résultats
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt) {
-       $id = intval($id);
-
-       if ($id_formulaire = intval(
-               sql_getfetsel(
-                       'id_formulaire',
-                       'spip_formulaires_reponses',
-                       "id_formulaires_reponse=$id"
-               )
-       )) {
-               return
-                       autoriser_formulaire_editer_dist($faire, $type, $id_formulaire, $qui, $opt)
-                       and formidable_auteur_admin_reponse($qui);
-       }
-
-       return false;
-}
-
-/**
- * Autorisation de supprimer une réponse d'un formulaire formidable
- *
- * Il faut pouvoir modifier les réponses d'un formulaire pour pouvoir les en supprimer
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt) {
-       $retour = autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt);
-
-       return $retour;
-}
-
-/**
- * Autorisation de poster une réponse en Collection+JSON
- *
- * Tout le monde peut, l'autorisation réelle se fera après pendant le traitement, suivant l'id_formulaire envoyé
- *
- * @param  string $faire Action demandée
- * @param  string $type  Type d'objet sur lequel appliquer l'action
- * @param  int    $id    Identifiant de l'objet
- * @param  array  $qui   Description de l'auteur demandant l'autorisation
- * @param  array  $opt   Options de cette autorisation
- * @return bool          true s'il a le droit, false sinon
-**/
-function autoriser_formulairesreponse_post_collection_dist($faire, $type, $id, $qui, $opt) {
-       return true;
-}
diff --git a/www/plugins/formidable/formidable_fonctions.php b/www/plugins/formidable/formidable_fonctions.php
deleted file mode 100644 (file)
index c7a3537..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-
-/**
- * Chargement des fonctions pour les squelettes
- *
- * @package SPIP\Formidable\Fonctions
- **/
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable');
-include_spip('public/formidable_criteres');
-
-/**
- * #VOIR_REPONSE{checkbox_2} dans une boucle (FORMULAIRES_REPONSES)
- *
- * @param Pile $p
- * @return Pile
- */
-function balise_VOIR_REPONSE_dist($p) {
-       $nom = interprete_argument_balise(1, $p);
-       if (!$type_retour = interprete_argument_balise(2, $p)) {
-               $type_retour = 'null';
-       }
-       if (!$sans_reponse = interprete_argument_balise(3, $p)) {
-               $sans_reponse = 'null';
-       }
-       $id_formulaires_reponse = champ_sql('id_formulaires_reponse', $p);
-       $id_formulaire = champ_sql('id_formulaire', $p);
-       $p->code = "calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $type_retour, $sans_reponse)";
-       return $p;
-}
-
-/**
- * @param int $id_formulaires_reponse
- * @param int $id_formulaire
- * @param string $nom
- * @param string $type_retour
- *   'brut' : valeur brute
- *   'valeur_uniquement' : la valeur seulement
- *   defaut : tout le HTML de la saisie
- * @param null|string $sans_reponse
- *   texte affiche si aucune valeur en base pour ce champ
- * @return array|string
- */
-function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $type_retour = null, $sans_reponse = null) {
-       static $formulaires_saisies = array();
-       static $reponses_valeurs = array();
-       $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
-
-       // Si pas déjà présent, on cherche les saisies de ce formulaire
-       if (!isset($formulaires_saisies[$id_formulaire])) {
-               $formulaires_saisies[$id_formulaire] = unserialize(
-                       sql_getfetsel('saisies', 'spip_formulaires', 'id_formulaire = '.intval($id_formulaire))
-               );
-       }
-       // Si pas déjà présent, on cherche les valeurs de cette réponse
-       if (!isset($reponses_valeurs[$id_formulaires_reponse])) {
-               if ($champs = sql_allfetsel(
-                       'nom,valeur',
-                       'spip_formulaires_reponses_champs',
-                       'id_formulaires_reponse = '.intval($id_formulaires_reponse)
-               )) {
-                       foreach ($champs as $champ) {
-                               $reponses_valeurs[$id_formulaires_reponse][$champ['nom']] = $tenter_unserialize($champ['valeur']);
-                       }
-               }
-       }
-
-       // Si on demande la valeur brute, on ne génère rien, on renvoie telle quelle
-       if ($type_retour == 'brut') {
-               return $reponses_valeurs[$id_formulaires_reponse][$nom];
-       }
-
-       // Si on trouve bien la saisie demandée
-       if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) {
-               // On génère la vue de cette saisie avec la valeur trouvée précédemment
-               return recuperer_fond(
-                       'saisies-vues/_base',
-                       array_merge(
-                               array(
-                                       'type_saisie' => $saisie['saisie'],
-                                       'valeur' => $reponses_valeurs[$id_formulaires_reponse][$nom],
-                                       'valeur_uniquement' => ($type_retour == 'valeur_uniquement' ? 'oui' : 'non'),
-                                       'sans_reponse' => $sans_reponse,
-                               ),
-                               $saisie['options']
-                       )
-               );
-       }
-}
-
-/**
- * Afficher le resume d'une reponse selon un modele qui contient des noms de champ "@input_1@ ..."
- *
- * @param int $id_formulaires_reponse
- * @param int $id_formulaire
- * @param string $resume_reponse
- * @return string
- */
-function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, $modele_resume = null) {
-       static $modeles_resume = array();
-       static $modeles_vars = array();
-
-       if (is_null($id_formulaire)) {
-               $id_formulaire = sql_getfetsel(
-                       'id_formulaire',
-                       'spip_formulaires_reponses',
-                       'id_formulaires_reponse='.intval($id_formulaires_reponse)
-               );
-       }
-       if (is_null($modele_resume) and !isset($modeles_resume[$id_formulaire])) {
-               $modeles_resume[$id_formulaire] = sql_getfetsel(
-                       'resume_reponse',
-                       'spip_formulaires',
-                       'id_formulaire='.intval($id_formulaire)
-               );
-       }
-       if (is_null($modele_resume)) {
-               $modele_resume = $modeles_resume[$id_formulaire];
-       }
-
-       if (!$modele_resume) {
-               return '';
-       }
-
-       if (!isset($modeles_vars[$modele_resume])) {
-               preg_match_all(',@(.*)@,Uims', $modele_resume, $matches);
-               $modeles_vars[$modele_resume] = $matches[1];
-       }
-
-       $valeurs = array();
-       foreach ($modeles_vars[$modele_resume] as $var) {
-               $valeur = calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $var, 'valeur_uniquement', '');
-               // on ne veut pas du \n de PtoBR, mais on ne veut pas non plus faire un trim
-               $valeur = str_ireplace('</p>', '', $valeur);
-               $valeur = PtoBR($valeur);
-               if (strpos($valeur, '</li>')) {
-                       $valeur = explode('</li>', $valeur);
-                       array_pop($valeur);
-                       $valeur = implode(', ', $valeur);
-               }
-               $valeur = supprimer_tags($valeur);
-               $valeurs["@$var@"] = $valeur;
-       }
-       return pipeline(
-               'formidable_affiche_resume_reponse',
-               array(
-                       'args' => array(
-                               'id_formulaire' => $id_formulaire,
-                               'id_formulaires_reponse' => $id_formulaires_reponse,
-                               'modele_resume' => $modele_resume,
-                               'valeurs' => $valeurs,
-                       ),
-                       'data' => str_replace(array_keys($valeurs), array_values($valeurs), $modele_resume),
-               )
-       );
-}
-
-/**
- * Si une saisie est de type 'fichiers'
- * insère dans la description du résultat de cette saisie
- * l'url de l'action pour récuperer la saisie
- * Ajoute également une vignette correspondent à l'extention
- * @param array $saisie_a_modifier
- * @param string $nom_saisie
- * @param array $saisies_du_formulaire
- * @param int|string $id_formulaire
- * @param int|string $id_formulaires_reponse
- * return array $saisie_a_modifier
- **/
-function formidable_ajouter_action_recuperer_fichier($saisie_a_modifier, $nom_saisie, $saisies_du_formulaire, $id_formulaire, $id_formulaires_reponse) {
-       // précaution
-       include_spip('inc/saisies_lister');
-       include_spip('inc/formidable_fichiers');
-       $id_formulaire = strval($id_formulaire);
-       $id_formulaires_reponse = strval($id_formulaires_reponse);
-       $vignette_par_defaut = charger_fonction('vignette', 'inc/');
-       if (array_key_exists($nom_saisie, saisies_lister_avec_type($saisies_du_formulaire, 'fichiers'))) { //saisies SPIP
-               if (isset($saisie_a_modifier) and is_array($saisie_a_modifier)) {
-                       foreach ($saisie_a_modifier as $i => $valeur) {
-                               $url = formidable_generer_url_action_recuperer_fichier(
-                                       $id_formulaire,
-                                       $id_formulaires_reponse,
-                                       $nom_saisie,
-                                       $valeur['nom']
-                               );
-                               $saisie_a_modifier[$i]['url'] = $url;
-                               if (in_array($valeur['extension'],array('png','jpg','gif'))) {
-                                       $saisie_a_modifier[$i]['vignette'] = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$id_formulaires_reponse/$nom_saisie/".$valeur['nom'];
-                               }       else {
-                                       $saisie_a_modifier[$i]['vignette'] = $vignette_par_defaut($valeur['extension'], false);
-                               }
-                       }
-               }
-       }
-       return $saisie_a_modifier;
-}
diff --git a/www/plugins/formidable/formidable_options.php b/www/plugins/formidable/formidable_options.php
deleted file mode 100644 (file)
index 2d87899..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/**
- * Options globales chargées à chaque hit
- *
- * @package SPIP\Formidable\Options
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/* déclaration des différentes variables utilisées pour effectuer l'anonymisation */
-$GLOBALS['formulaires']['variables_anonymisation'] = array(
-       'remote_user' => '$_SERVER["REMOTE_USER"]',
-       'php_auth_user' => '$_SERVER["PHP_AUTH_USER"]',
-);
-
-/*
-* on se contente d'initialiser si ces variable si elles ne
-* le sont pas dans mes_options.php de l'instance
-*/
-if (isset($GLOBALS['formulaires']['passwd']) == false) {
-       $GLOBALS['formulaires']['passwd'] = array(
-               'interne' => 'palabresecreta',
-       );
-}
-
-if (!function_exists('array_fill_keys')) {
-       /**
-        * Remplit un tableau avec des valeurs, en spécifiant les clés
-        *
-        * Fonction dans PHP 5.2+
-        * @see http://php.net/manual/fr/function.array-fill-keys.php
-        *
-        * @param array $keys
-        *       Tableau de valeurs qui sera utilisé comme clés.
-        * @param mixed $value
-        *       Valeur à utiliser pour remplir le tableau.
-        * @return array
-        *       Le tableau rempli.
-       **/
-       function array_fill_keys($keys, $value) {
-               array_combine($keys, array_fill(0, count($keys), $value));
-       }
-}
-
-/* Lieux de stockages des fichiers, qu'on définit ici pour pouvoir l'utiliser en squelette
-*/
-if (!defined('_DIR_FICHIERS')) { // En attendant que ce soit natif spip
-       define('_DIR_FICHIERS', _DIR_ETC.'fichiers/');
-}
-
-if (!defined('_DIR_FICHIERS_FORMIDABLE')) {
-       define('_DIR_FICHIERS_FORMIDABLE', _DIR_FICHIERS.'formidable/');
-}
diff --git a/www/plugins/formidable/formidable_pipelines.php b/www/plugins/formidable/formidable_pipelines.php
deleted file mode 100644 (file)
index f88bca4..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-
-/**
- * Utilisation de pipelines
- *
- * @package SPIP\Formidable\Pipelines
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-include_spip('inc/formidable_fichiers');
-define(
-       '_RACCOURCI_MODELE_FORMIDABLE',
-       '(<(formulaire\|formidable|formidable|form)' # <modele
-       .'([0-9]*)\s*' # id
-       .'([|](?:<[^<>]*>|[^>])*)?' # |arguments (y compris des tags <...>)
-       .'>)' # fin du modele >
-       .'\s*(<\/a>)?' # eventuel </a>
-);
-
-/**
- * Ajouter la protection NoSpam de base a formidable (jeton)
- *
- * @param $formulaires
- * @return array
- */
-function formidable_nospam_lister_formulaires($formulaires) {
-       $formulaires[] = 'formidable';
-       return $formulaires;
-}
-
-/**
- * Trouver les liens <form
- * @param $texte
- * @return array
- */
-function formidable_trouve_liens($texte) {
-       $formulaires = array();
-       if (preg_match_all(','._RACCOURCI_MODELE_FORMIDABLE.',ims', $texte, $regs, PREG_SET_ORDER)) {
-               foreach ($regs as $r) {
-                       $id_formulaire = 0;
-                       if ($r[2] == 'formidable') {
-                               $id_formulaire = $r[3];
-                       } elseif ($r[2] == 'form') {
-                               $id_formulaire = sql_getfetsel(
-                                       'id_formulaire',
-                                       'spip_formulaires',
-                                       'identifiant='.sql_quote('form'.$r[3])
-                               );
-                       } elseif ($r[2] == 'formulaire|formidable') {
-                               $args = ltrim($r[4], '|');
-                               $args = explode('=', $args);
-                               $args = $args[1];
-                               $args = explode('|', $args);
-                               $args = trim(reset($args));
-                               if (is_numeric($args)) {
-                                       $id_formulaire = intval($args);
-                               } else {
-                                       $id_formulaire = sql_getfetsel(
-                                               'id_formulaire',
-                                               'spip_formulaires',
-                                               'identifiant='.sql_quote($args)
-                                       );
-                               }
-                       }
-                       if ($id_formulaire = intval($id_formulaire)) {
-                               $formulaires[$id_formulaire] = $id_formulaire;
-                       }
-               }
-       }
-       return $formulaires;
-}
-
-/**
- * Associer/dissocier les formulaires a un objet qui les utilise (ou ne les utilise plus)
- * @param $flux
- * @return mixed
- */
-function formidable_post_edition($flux) {
-       if (isset($flux['args']['table'])
-               and $table = $flux['args']['table']
-               and $id_objet = intval($flux['args']['id_objet'])
-               and $primary = id_table_objet($table)
-               and $row = sql_fetsel('*', $table, "$primary=".intval($id_objet))
-       ) {
-               $objet = objet_type($table);
-               $contenu = implode(' ', $row);
-               $formulaires = formidable_trouve_liens($contenu);
-               include_spip('action/editer_liens');
-               $deja = objet_trouver_liens(array('formulaire' => '*'), array($objet => $id_objet));
-               $del = array();
-               if (count($deja)) {
-                       foreach ($deja as $l) {
-                               if (isset($formulaires[$l['id_formulaire']])) {
-                                       unset($formulaires[$l['id_formulaire']]);
-                               } else {
-                                       $del[] = $l['id_formulaire'];
-                               }
-                       }
-               }
-               if (count($formulaires)) {
-                       objet_associer(array('formulaire' => $formulaires), array($objet => $id_objet));
-               }
-               if (count($del)) {
-                       objet_dissocier(array('formulaire' => $del), array($objet=>$id_objet));
-               }
-       }
-       return $flux;
-}
-
-/**
- * Afficher les formulaires utilises par un objet
- * @param $flux
- * @return mixed
- */
-function formidable_affiche_droite($flux) {
-       if ($e = trouver_objet_exec($flux['args']['exec'])
-               and isset($e['type'])
-               and $objet = $e['type']
-               and isset($flux['args'][$e['id_table_objet']])
-               and $id = $flux['args'][$e['id_table_objet']]
-               and sql_countsel('spip_formulaires_liens', 'objet='.sql_quote($objet).' AND id_objet='.intval($id))) {
-               $flux['data'] .= recuperer_fond(
-                       'prive/squelettes/inclure/formulaires_lies',
-                       array('objet' => $objet, 'id_objet' => $id)
-               );
-       }
-       return $flux;
-}
-
-/**
- * Afficher l'édition des liens sur les objets configurés
- **/
-function formidable_affiche_milieu($flux) {
-       include_spip('inc/config');
-       $texte = '';
-       $e = trouver_objet_exec($flux['args']['exec']);
-
-       if (!$e['edition'] and in_array($e['table_objet_sql'], lire_config('formidable/analyse/objets', array()))) {
-               $texte .= recuperer_fond('prive/objets/editer/liens', array(
-                       'table_source' => 'formulaires',
-                       'objet' => $e['type'],
-                       'id_objet' => $flux['args'][$e['id_table_objet']]
-               ));
-       }
-
-       if ($texte) {
-               if ($p=strpos($flux['data'], '<!--affiche_milieu-->')) {
-                       $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
-               } else {
-                       $flux['data'] .= $texte;
-               }
-       }
-
-       return $flux;
-}
-
-/**
- * Optimiser la base de donnée en enlevant les liens de formulaires supprimés
- *
- * @pipeline optimiser_base_disparus
- * @param array $flux
- *     Données du pipeline
- * @return array
- *     Données du pipeline
- */
-function formidable_optimiser_base_disparus($flux) {
-       // Les formulaires qui sont à la poubelle
-       $res = sql_select(
-               'id_formulaire AS id',
-               'spip_formulaires',
-               'statut='.sql_quote('poubelle')
-       );
-       $res2 = sql_select(
-               'id_formulaire AS id',
-               'spip_formulaires',
-               'statut='.sql_quote('poubelle')
-       );//Copie pour supprimer les fichiers
-
-       // On génère la suppression
-       $flux['data'] += optimiser_sansref('spip_formulaires', 'id_formulaire', $res);
-
-       while ($reponse = sql_fetch($res2)) {
-               $flux['data'] += formidable_effacer_fichiers_formulaire($reponse['id']);
-       }
-
-       // les reponses qui sont associees a un formulaire inexistant
-       $res = sql_select(
-               'R.id_formulaire AS id',
-               'spip_formulaires_reponses AS R LEFT JOIN spip_formulaires AS F ON R.id_formulaire=F.id_formulaire',
-               'R.id_formulaire > 0 AND F.id_formulaire IS NULL'
-       );
-
-       $flux['data'] += optimiser_sansref('spip_formulaires_reponses', 'id_formulaire', $res);
-
-       // Les réponses qui sont à la poubelle
-       $res = sql_select(
-               'id_formulaires_reponse AS id, id_formulaire AS form',
-               'spip_formulaires_reponses',
-               'statut='.sql_quote('poubelle')
-       );
-       $res2 = sql_select(
-               'id_formulaires_reponse AS id, id_formulaire AS form',
-               'spip_formulaires_reponses',
-               sql_in('statut', array('refuse', 'poubelle'))
-       );      //Copie pour la suppression des fichiers des réponses, c'est idiot de pas pouvoir faire une seule requete
-       // On génère la suppression
-       $flux['data'] += optimiser_sansref('spip_formulaires_reponses', 'id_formulaires_reponse', $res);
-       while ($reponse = sql_fetch($res2)) {
-               $flux['data'] += formidable_effacer_fichiers_reponse($reponse['form'], $reponse['id']);
-       }
-
-
-       // les champs des reponses associes a une reponse inexistante
-       $res = sql_select(
-               'C.id_formulaires_reponse AS id',
-               'spip_formulaires_reponses_champs AS C
-                       LEFT JOIN spip_formulaires_reponses AS R ON C.id_formulaires_reponse=R.id_formulaires_reponse',
-               'C.id_formulaires_reponse > 0 AND R.id_formulaires_reponse IS NULL'
-       );
-
-       $flux['data'] += optimiser_sansref('spip_formulaires_reponses_champs', 'id_formulaires_reponse', $res);
-
-       return $flux;
-}
-
-/**
- * S'assurer que le traitement email ait lieu après le traitement enregistrement
- *
- * @pipeline formidable_traitements
- * @param array $flux
- * @return array $flux
- **/
-function formidable_formidable_traitements($flux) {
-       if (isset($flux['data']['email']) and isset($flux['data']['enregistrement'])) {
-               $keys = array_keys($flux['data']);
-               $position_email = array_search('email', $keys);
-               $position_enregistrement = array_search('enregistrement', $keys);
-
-               if ($position_enregistrement > $position_email) { // si enregistrement après email
-                       $nouveau_tab = array();
-                       foreach ($keys as $key) { //on reconstruit le tableau, en inversant simplement email et enregistrement
-                               if ($key == 'email') {
-                                       $nouveau_tab['enregistrement'] = $flux['data']['enregistrement'];
-                               } elseif ($key == 'enregistrement') {
-                                       $nouveau_tab['email'] = $flux['data']['email'];
-                               } else {
-                                       $nouveau_tab[$key] = $flux['data'][$key];
-                               }
-                       }
-                       $flux['data'] = $nouveau_tab;
-               }
-       }
-
-       return $flux;
-}
-
-/** Hasher les ip régulièrement
- *  @param array $flux
- *  @return array $flux
-**/
-function formidable_taches_generales_cron($flux) {
-       $flux['formidable_hasher_ip'] = 24*3600;
-       $flux['formidable_effacer_fichiers_email'] = 24*3600;
-       $flux['formidable_effacer_enregistrements'] = 24*3600;
-       return $flux;
-}
-
-/** Déclarer les formulaires et les réponses
- * au plugin corbeille
- * @param array $flux;
- * @return array $flux;
-**/
-function formidable_corbeille_table_infos($flux) {
-       $flux['formulaires']= array(
-               'statut'=>'poubelle',
-               'table'=>'formulaires',
-               'tableliee'=>array('spip_formulaires_liens')
-       );
-       $flux['formulaires_reponses']= array(
-               'statut'=>'poubelle',
-               'table'=>'formulaires_reponses'
-       );
-       return $flux;
-}
diff --git a/www/plugins/formidable/formulaires/configurer_formidable_analyse.html b/www/plugins/formidable/formulaires/configurer_formidable_analyse.html
deleted file mode 100644 (file)
index 302019b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
-
-       <h3 class="titrem"><:formidable:cfg_titre_parametrages_analyse:></h3>
-
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-
-       <form method="post" action="#ENV{action}">
-       <div>
-               #ACTION_FORMULAIRE{#ENV{action}}
-               
-               [(#SAISIE{choisir_objets,objets,
-                       label=<:formidable:cfg_objets_label:>,
-                       explication=<:formidable:cfg_objets_explication:>
-                       })]
-               [(#SAISIE{case,auteur,
-                       li_class='pleine_largeur',
-                       label_case=<:formidable:traiter_enregistrement_option_auteur:>,
-                       explication=<:formidable:traiter_enregistrement_option_auteur_explication:>
-                       })]
-               [(#SAISIE{case,admin_reponses_auteur,
-                       li_class='pleine_largeur',
-                       label_case=<:formidable:admin_reponses_auteur:>,
-                       explication=<:formidable:admin_reponses_auteur_explication:>
-                       })]
-               [(#SAISIE{case,activer_pages,
-                       li_class='pleine_largeur',
-                       label_case=<:formidable:activer_pages_label:>,
-                       explication=<:formidable:activer_pages_explication:>
-                       })]
-               [(#SAISIE{case,autoriser_admin_restreint,
-                       li_class='pleine_largeur',
-                       label_case=<:formidable:autoriser_admin_restreint:>,
-                       explication=<:formidable:autoriser_admin_restreint_explication:>
-                       })]
-               [(#SAISIE{input,classe,
-                       label=<:formidable:cfg_analyse_classe_label:>,
-                       explication=<:formidable:cfg_analyse_classe_explication:>
-                       })]
-
-               <input type="hidden" name="_meta_casier" value="formidable/analyse" />
-               <p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
-       </div>
-       </form>
-       <script type="text/javascript">
-               $(function(){
-                       if (!$('#champ_auteur').prop('checked')) {
-                               $('.editer_admin_reponses_auteur').hide();
-                       }
-                       $('#champ_auteur').change(function() {
-                               if ($(this).is(':checked')) $('.editer_admin_reponses_auteur').show(100);
-                               else $('.editer_admin_reponses_auteur').hide(100);
-                       });
-               });
-       </script>
-</div>
diff --git a/www/plugins/formidable/formulaires/editer_formulaire.html b/www/plugins/formidable/formulaires/editer_formulaire.html
deleted file mode 100644 (file)
index 0fd4c56..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id_formulaire,nouveau})]">
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-       [(#ENV{editable}|oui)
-       <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
-               [(#REM) declarer les hidden qui declencheront le service du formulaire 
-               parametre : url d'action ]
-               #ACTION_FORMULAIRE{#ENV{action}}
-               
-               <ul class="editer-groupe">
-                       #SET{name,titre}#SET{obli,'obligatoire'}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer editer_[(#GET{name})][ (#GET{obli})] multilang[ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_titre:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
-                       </li>
-                       #SET{name,identifiant}#SET{obli,'obligatoire'}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer editer_[(#GET{name})][ (#GET{obli})] multilang[ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_identifiant:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
-                               <p class="explication"><:formidable:editer_identifiant_explication:></p>
-                       </li>
-                       #SET{name,message_retour}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})] multilang[ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_message_ok:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<p class="explication"><:formidable:editer_message_ok_explication:></p>
-                               <textarea name="#GET{name}" class="textarea" rows="5">
-#ENV*{#GET{name},#GET{defaut}}</textarea>
-                       </li>
-                       #SET{name,descriptif}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})] multilang[ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_descriptif:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<p class="explication"><:formidable:editer_descriptif_explication:></p>
-                               <textarea name="#GET{name}" class="textarea" rows="5">
-#ENV*{#GET{name},#GET{defaut}}</textarea>
-                       </li>
-                       #SET{name,css}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_css:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
-                       </li>
-                       #SET{name,apres}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_apres_label:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<p class="explication"><:formidable:editer_apres_explication:></p>
-                               <select name="#GET{name}" class="select" id="#GET{name}">
-                                       #SET{val,formulaire}
-                                       <option value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)selected="selected"]><:formidable:editer_apres_choix_formulaire:></option>
-                                       #SET{val,valeurs}
-                                       <option value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)selected="selected"]><:formidable:editer_apres_choix_valeurs:></option>
-                                       #SET{val,stats}
-                                       <option value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)selected="selected"]><:formidable:editer_apres_choix_stats:></option>
-                                       #SET{val,rien}
-                                       <option value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)selected="selected"]><:formidable:editer_apres_choix_rien:></option>
-                                       #SET{val,redirige}
-                                       <option value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)selected="selected"]><:formidable:editer_apres_choix_redirige:></option>
-                               </select>
-                       </li>
-                       #SET{name,url_redirect}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_redirige_url:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
-                               <p class="explication"><:formidable:editer_redirige_url_explication:></p>
-                       </li>
-                       #SET{name,resume_reponse}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-                       <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
-                               <label for="#GET{name}"><:formidable:editer_resume_reponse:></label>[
-                               <span class='erreur_message'>(#GET{erreurs})</span>
-                               ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
-                               <p class="explication"><:formidable:editer_resume_reponse_explication:></p>
-                       </li>
-                       #INCLURE{fond=formulaires/inc-formidable-unicite, env}
-               </ul>
-               
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-               <!--extra-->
-               
-               <p class='boutons'>
-                       <span class='image_loading'></span>
-                       <input type='submit' class='submit' name="enregistrer" value='<:bouton_enregistrer:>' />
-               </p>
-       </div></form>
-       ]
-</div>
diff --git a/www/plugins/formidable/formulaires/editer_formulaire.php b/www/plugins/formidable/formulaires/editer_formulaire.php
deleted file mode 100644 (file)
index 47dafa3..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/saisies');
-include_spip('action/editer_liens');
-include_spip('inc/config');
-
-function formulaires_editer_formulaire_charger($id_formulaire, $nouveau) {
-       $id_formulaire = intval($nouveau?0:$id_formulaire);
-       include_spip('inc/editer');
-
-       // Est-ce qu'on a le droit ?
-       if (!autoriser('editer', 'formulaire', $id_formulaire)) {
-               $contexte = array();
-               $contexte['editable'] = false;
-               $contexte['message_erreur'] = _T('formidable:erreur_autorisation');
-       } else {
-               $contexte = formulaires_editer_objet_charger('formulaire', $id_formulaire, 0, 0, '', '');
-       }
-       unset($contexte['id_formulaire']);
-
-       return $contexte;
-}
-
-function formulaires_editer_formulaire_verifier($id_formulaire, $nouveau) {
-       $id_formulaire = intval($nouveau?0:$id_formulaire);
-       $erreurs = array();
-
-       include_spip('inc/editer');
-       $erreurs = formulaires_editer_objet_verifier('formulaire', $id_formulaire, array('titre', 'identifiant'));
-
-       if (!isset($erreurs['identifiant'])) {
-               $identifiant = _request('identifiant');
-               // format de l'identifiant
-               if (!preg_match('/^[\w]+$/', $identifiant)) {
-                       $erreurs['identifiant'] = _T('formidable:erreur_identifiant_format');
-               } elseif (sql_getfetsel('id_formulaire', 'spip_formulaires', 'identifiant = '.sql_quote($identifiant).' AND id_formulaire != '.intval($id_formulaire))) {
-                       // unicite de l'identifiant
-                       $erreurs['identifiant'] = _T('formidable:erreur_identifiant');
-               }
-       }
-
-       return $erreurs;
-}
-
-function formulaires_editer_formulaire_traiter($id_formulaire, $nouveau) {
-       include_spip('inc/editer');
-       $id_formulaire = $id_formulaire ? $id_formulaire : $nouveau;
-       $retours = formulaires_editer_objet_traiter('formulaire', $id_formulaire);
-
-       // S'il n'y a pas d'erreur et que le formulaire est bien là
-       if (empty($retours['message_erreur']) and $retours['id_formulaire'] > 0) {
-               // Si c'était un nouveau on reste sur l'édition
-               if (!intval($id_formulaire) and $nouveau == 'oui') {
-                       // Tout a fonctionné. En fonction de la config, on attribue l'auteur courant
-                       $auteurs = lire_config('formidable/analyse/auteur');
-                       if ($auteurs == 'on') {
-                               if ($id_auteur = session_get('id_auteur')) {
-                                       // association (par défaut) du formulaire et de l'auteur courant
-                                       objet_associer(array('formulaire'=>$retours['id_formulaire']), array('auteur'=>$id_auteur));
-                               }
-                       }
-                       $retours['redirect'] = parametre_url(generer_url_ecrire('formulaire_edit'), 'id_formulaire', $retours['id_formulaire'], '&');
-               } else {
-                       // Sinon on redirige vers la page de visualisation
-                       $retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $retours['id_formulaire'], '&');
-               }
-       }
-
-       return $retours;
-}
diff --git a/www/plugins/formidable/formulaires/editer_formulaire_champs.html b/www/plugins/formidable/formulaires/editer_formulaire_champs.html
deleted file mode 100644 (file)
index 7e1145d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
-       <p class="explication message_saisies_modifiees"><strong><:saisies:construire_attention_enregistrer:></strong></p>
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-       
-       [(#ENV*{message_erreur}|non)
-       <div class="ajax">
-               #FORMULAIRE_CONSTRUIRE_FORMULAIRE{#ENV{saisie_id}, #ENV{_saisies}}
-       </div>
-       ]
-
-       [(#ENV{editable}|oui)
-       <form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
-               [(#REM) declarer les hidden qui declencheront le service du formulaire 
-               parametre : url d'action ]
-               #ACTION_FORMULAIRE{#ENV{action}}
-
-               <p class="boutons">
-                       <span class='image_loading'></span>
-
-                       [(#ENV*{message_erreur}|oui)
-                       <input type='submit' class='submit' name="annulation" value='<:bouton_annuler|attribut_html:>' />
-                       <input type='submit' class='submit' name="enregistrer_confirmation" value='<:bouton_enregistrer|attribut_html:>' />
-                       ]
-                       [(#ENV*{message_erreur}|non)
-                       <input type='submit' class='submit revert' name="revert" value='<:formidable:bouton_revert_formulaire|attribut_html:>'
-                              onclick="return confirm('<:saisies:construire_reinitialiser_confirmer:>')" />
-                       <input type='submit' class='submit' name="enregistrer" value='<:bouton_enregistrer|attribut_html:>' />
-                       ]
-
-               </p>
-       </div></form>
-       ]
-</div>
-<style>
-       .formulaire_edit .formulaire_editer_formulaire_champs .message_reinitialiser,
-       .formulaire_edit .formulaire_editer_formulaire_champs #reinitialiser {display: none;}
-
-       .formulaire_spip .message_saisies_modifiees,input.revert {display: none;}
-       .modifie .message_saisies_modifiees,.modifie input.revert {display: block;}
-</style>
-<script type="text/javascript">
-       function update_modif_saisies(){
-               var is_modified = jQuery('.formulaire_[(#ENV{form})] .formulaire_construire_formulaire').is('.modifie');
-               if (is_modified)
-                       jQuery('.formulaire_#ENV{form}').addClass('modifie');
-               else
-                       jQuery('.formulaire_#ENV{form}').removeClass('modifie');
-       }
-       jQuery(function(){
-               update_modif_saisies();
-               onAjaxLoad(update_modif_saisies);
-               jQuery('.formulaire_[(#ENV{form})] .formulaire_construire_formulaire').bind('modifsaisies',update_modif_saisies);
-       });
-</script>
diff --git a/www/plugins/formidable/formulaires/editer_formulaire_champs.php b/www/plugins/formidable/formulaires/editer_formulaire_champs.php
deleted file mode 100644 (file)
index 39e8c6a..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function formulaires_editer_formulaire_champs_charger($id_formulaire) {
-       $contexte = array();
-       $id_formulaire = intval($id_formulaire);
-
-       // On teste si le formulaire existe
-       if ($id_formulaire
-               and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
-               and autoriser('editer', 'formulaire', $id_formulaire)
-       ) {
-               $saisies = unserialize($formulaire['saisies']);
-               if (!is_array($saisies)) {
-                       $saisies = array();
-               }
-               $contexte['_saisies'] = $saisies;
-               $contexte['id'] = $id_formulaire;
-               $contexte['saisie_id'] = "formidable_$id_formulaire";
-       }
-
-       return $contexte;
-}
-
-function formulaires_editer_formulaire_champs_verifier($id_formulaire) {
-       include_spip('inc/saisies');
-       $erreurs = array();
-
-       // Si c'est pas une confirmation ni une annulation
-       if (!_request('enregistrer_confirmation')
-               and !($annulation = _request('annulation'))) {
-               // On récupère le formulaire dans la session
-               $saisies_nouvelles = session_get("constructeur_formulaire_formidable_$id_formulaire");
-
-               // On récupère les anciennes saisies
-               $saisies_anciennes = unserialize(sql_getfetsel(
-                       'saisies',
-                       'spip_formulaires',
-                       'id_formulaire = '.$id_formulaire
-               ));
-
-               // On compare
-               $comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
-
-               // S'il y a des suppressions, on demande confirmation avec attention
-               if ($comparaison['supprimees']) {
-                       $erreurs['message_erreur'] = _T('saisies:construire_attention_supprime');
-               }
-       } elseif (isset($annulation) and $annulation) {
-               // Si on annule on génère une erreur bidon juste pour réafficher le formulaire
-               $erreurs['pouetpouet'] = true;
-       }
-
-       return $erreurs;
-}
-
-function formulaires_editer_formulaire_champs_traiter($id_formulaire) {
-       include_spip('inc/saisies');
-       $retours = array();
-       $id_formulaire = intval($id_formulaire);
-
-       if (_request('revert')) {
-               session_set("constructeur_formulaire_formidable_$id_formulaire");
-               $retours = array('editable'=>true);
-       }
-
-       if (_request('enregistrer') or _request('enregistrer_confirmation')) {
-               // On récupère le formulaire dans la session
-               $saisies_nouvelles = session_get("constructeur_formulaire_formidable_$id_formulaire");
-
-               // On récupère les anciennes saisies
-               $saisies_anciennes = unserialize(sql_getfetsel(
-                       'saisies',
-                       'spip_formulaires',
-                       'id_formulaire = '.$id_formulaire
-               ));
-
-               // On envoie les nouvelles dans la table dans la table
-               $ok = sql_updateq(
-                       'spip_formulaires',
-                       array(
-                               'saisies' => serialize($saisies_nouvelles)
-                       ),
-                       'id_formulaire = '.$id_formulaire
-               );
-
-               // Si c'est bon on appelle d'éventuelles fonctions d'update des traitements
-               // puis on renvoie vers la config des traitements
-               if ($ok) {
-                       // On va chercher les traitements
-                       $traitements = unserialize(sql_getfetsel(
-                               'traitements',
-                               'spip_formulaires',
-                               'id_formulaire = '.$id_formulaire
-                       ));
-
-                       // Pour chaque traitements on regarde s'i y a une fonction d'update
-                       if (is_array($traitements)) {
-                               foreach ($traitements as $type_traitement => $traitement) {
-                                       if ($update = charger_fonction('update', "traiter/$type_traitement", true)) {
-                                               $update($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles);
-                                       }
-                               }
-                       }
-                       // On redirige vers la config suivante
-                       $retours['redirect'] = parametre_url(
-                               parametre_url(
-                                       parametre_url(
-                                               generer_url_ecrire('formulaire_edit'),
-                                               'id_formulaire',
-                                               $id_formulaire
-                                       ),
-                                       'configurer',
-                                       'traitements'
-                               ),
-                               'avertissement',
-                               'oui'
-                       );
-               }
-       }
-
-       return $retours;
-}
diff --git a/www/plugins/formidable/formulaires/editer_formulaire_traitements.html b/www/plugins/formidable/formulaires/editer_formulaire_traitements.html
deleted file mode 100644 (file)
index 8ab2a74..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-       
-       [(#ENV{editable}|oui)
-       <form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
-               [(#REM) declarer les hidden qui declencheront le service du formulaire 
-               parametre : url d'action ]
-               #ACTION_FORMULAIRE{#ENV{action}}
-               
-               <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
-                       #GENERER_SAISIES{#ENV{_configurer_traitements}}
-               </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
-               
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-               <!--extra-->
-               
-               <p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
-       </div></form>
-       <script type="text/javascript">
-               jQuery(function(){
-                       // On commence par cacher toutes les options
-                       jQuery('.options_traiter,.suite').hide()
-                               .each(function(){
-                                       var me = this;
-                                       var check = jQuery(me).prev().find('input.checkbox');
-                                       check.bind('change',function(){
-                                               if (check.is(':checked')){
-                                                       jQuery(me).show('fast');
-                                                       check.closest('.editer').addClass('hover');
-                                               }
-                                               else {
-                                                       jQuery(me).hide('fast');
-                                                       check.closest('.editer').removeClass('hover');
-                                               }
-                                       })
-                                       // force update
-                                       .trigger('change');
-                               })
-                               .find('h3').hide();
-               });
-       </script>
-       <style>
-               .options_traiter {margin-left: 50px;border-bottom: 1px solid #ddd;}
-               .suite {margin-left: 50px;}
-               input.checkbox+label {font-weight: normal;}
-               input.checkbox+label strong {font-weight: normal;}
-               input.checkbox:checked+label {font-weight: bold;}
-               input.checkbox:checked+label strong {font-weight: bold;}
-               input.radio+label {font-weight: normal;}
-               input.radio+label strong {font-weight: normal;}
-               input.radio:checked+label {font-weight: bold;}
-               input.radio:checked+label strong {font-weight: bold;}
-       </style>
-       ]
-</div>
diff --git a/www/plugins/formidable/formulaires/editer_formulaire_traitements.php b/www/plugins/formidable/formulaires/editer_formulaire_traitements.php
deleted file mode 100644 (file)
index 14d4b0a..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable');
-include_spip('inc/formidable_fichiers');
-
-function formulaires_editer_formulaire_traitements_charger($id_formulaire) {
-       $contexte = array();
-       $id_formulaire = intval($id_formulaire);
-
-       // On teste si le formulaire existe
-       if ($id_formulaire
-               and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
-               and autoriser('editer', 'formulaire', $id_formulaire)
-       ) {
-               $traitements = unserialize($formulaire['traitements']);
-               $saisies = unserialize($formulaire['saisies']);
-               if (!is_array($traitements)) {
-                       $traitements = array();
-               }
-               if (!is_array($saisies)) {
-                       $saisies = array();
-               }
-               $contexte['traitements'] = $traitements;
-               $contexte['traitements_choisis'] = array_keys($traitements);
-               $contexte['formulaire'] = _T_ou_typo($saisies, 'multi');
-               $contexte['id'] = $id_formulaire;
-
-               $traitements_disponibles = traitements_lister_disponibles();
-               $configurer_traitements = array();
-               foreach ($traitements_disponibles as $type_traitement => $traitement) {
-                       $configurer_traitements[] = array(
-                               'saisie' => 'checkbox',
-                               'options' => array(
-                                       'nom' => 'traitements_choisis',
-                                       'label' => $traitement['titre'],
-                                       'datas' => array(
-                                               $type_traitement => $traitement['description']
-                                       )
-                               )
-                       );
-                       $configurer_traitements[] = array(
-                               'saisie' => 'fieldset',
-                               'options' => array(
-                                       'nom' => 'options',
-                                       'label' => $traitement['titre'],
-                                       'li_class' => "$type_traitement options_traiter"
-                               ),
-                               'saisies' => saisies_transformer_noms($traitement['options'], '/^.*$/', "traitements[$type_traitement][\\0]")
-                       );
-               }
-               $contexte['_configurer_traitements'] = $configurer_traitements;
-
-               // Si on demande un avertissement et qu'il y a déjà des traitements de configurés
-               if (_request('avertissement') == 'oui') {
-                       $contexte['message_ok'] = $traitements ? _T('formidable:traitements_avertissement_modification') : _T('formidable:traitements_avertissement_creation');
-               }
-       } else {
-               $contexte['editable'] = false;
-       }
-
-       // On enlève l'éventuel avertissement pour le prochain envoi
-       $contexte['action'] = parametre_url(self(), 'avertissement', '');
-
-       return $contexte;
-}
-
-function formulaires_editer_formulaire_traitements_verifier($id_formulaire) {
-       include_spip('inc/saisies');
-       $erreurs = array();
-       $traitements_disponibles = traitements_lister_disponibles();
-
-       // On regarde quels traitements sont demandés
-       $traitements_choisis = _request('traitements_choisis');
-
-       if (is_array($traitements_choisis)) {
-               foreach ($traitements_choisis as $type_traitement) {
-                       $erreurs = array_merge($erreurs, saisies_verifier(saisies_transformer_noms($traitements_disponibles[$type_traitement]['options'], '/^.*$/', "traitements[$type_traitement][\\0]")));
-               }
-       }
-       return $erreurs;
-}
-
-function formulaires_editer_formulaire_traitements_traiter($id_formulaire) {
-       $retours = array();
-       $id_formulaire = intval($id_formulaire);
-
-       // On récupère tout le tableau des traitements
-       $traitements = _request('traitements');
-       // On ne garde que les morceaux qui correspondent aux traitements choisis
-       $traitements_choisis = _request('traitements_choisis');
-       if (!$traitements_choisis) {
-               $traitements_choisis = array();
-       }
-       $traitements_choisis = array_flip($traitements_choisis);
-       $traitements = array_intersect_key($traitements, $traitements_choisis);
-       
-       // Si besoin, on créeun dossier pour stocker les fichiers
-       
-       $erreur_creation_dossier = formidable_creer_dossier_formulaire($id_formulaire);
-       if ($erreur_creation_dossier) {
-               $retours['message_erreur'] = $erreur_creation_dossier;
-       }
-       // Et on l'enregistre tel quel
-       $ok = sql_updateq(
-               'spip_formulaires',
-               array(
-                       'traitements' => serialize($traitements)
-               ),
-               'id_formulaire = '.$id_formulaire
-       );
-
-       // On va sur la page de visualisation quand c'est fini
-       if ($ok) {
-               $retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire);
-       } else {
-               $retours['editable'] = true;
-               $retours['message_erreur'] = _T('formidable:erreur_base');
-       }
-
-       return $retours;
-}
diff --git a/www/plugins/formidable/formulaires/exporter_formulaire_analyse.html b/www/plugins/formidable/formulaires/exporter_formulaire_analyse.html
deleted file mode 100644 (file)
index 228fe49..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-[(#SET{type_export, #ARRAY{csv,<:formidable:reponses_exporter_format_csv:>,xls,<:formidable:reponses_exporter_format_xls:>}})]
-
-<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id})]">
-       <h3 class="titrem">
-       [(#CHEMIN{images/formulaire-analyse-24.png}|balise_img{horizontale})] 
-      <:formidable:analyse_exporter:></h3>
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-       
-       [(#ENV{editable}|oui)
-       <form method="post" action="#ENV{action}"><div>
-               #ACTION_FORMULAIRE{#ENV{action}}
-               <input type="hidden" name="id_formulaire" value="#ID_FORMULAIRE" />
-               <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
-                       [(#SAISIE{selection, type_export,
-                               label=<:formidable:exporter_formulaire_format_label:>,
-                               datas=#GET{type_export},
-        defaut=csv,
-        cacher_option_intro=oui})]
-               </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
-               
-    
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-               <!--extra-->
-               
-               <p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_telecharger:>" /></p>
-       </div></form>
-       ]
-</div>
diff --git a/www/plugins/formidable/formulaires/exporter_formulaire_analyse.php b/www/plugins/formidable/formulaires/exporter_formulaire_analyse.php
deleted file mode 100644 (file)
index b2146d9..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable');
-include_spip('inc/config');
-
-function formulaires_exporter_formulaire_analyse_charger($id_formulaire = 0) {
-       $contexte = array();
-       $contexte['id_formulaire'] = intval($id_formulaire);
-       return $contexte;
-}
-
-function formulaires_exporter_formulaire_analyse_verifier($id_formulaire = 0) {
-       $erreurs = array();
-
-       return $erreurs;
-}
-
-function formulaires_exporter_formulaire_analyse_traiter($id_formulaire = 0) {
-       $retours = array();
-
-       if (_request('type_export') == 'csv') {
-               action_exporter_analyse_reponses($id_formulaire);
-       } else if (_request('type_export') == 'xls') {
-                       action_exporter_analyse_reponses($id_formulaire, 'TAB');
-       }
-
-       return $retours;
-}
-
-
-/*
- * Exporter les analyses d'un formulaire (anciennement action/exporter_analyse_reponses_dist)
- * @param integer $id_formulaire
- * @return unknown_type
- */
-function action_exporter_analyse_reponses($id_formulaire, $delim = ',') {
-       // on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
-       $ok = false;
-       if ($id_formulaire > 0
-               and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
-               and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = '.$id_formulaire.' and statut = '.sql_quote('publie'))
-       ) {
-               include_spip('inc/saisies');
-               include_spip('classes/facteur');
-               include_spip('inc/filtres');
-               $reponses_completes = array();
-
-               $saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
-
-               // exclure les champs non analysés
-               $traitement = unserialize($formulaire['traitements']);
-               foreach (explode('|', $traitement['enregistrement']['analyse_exclure_champs']) as $exclure) {
-                       unset($saisies[$exclure]);
-               }
-               $res = sql_select(
-                       array('nom, valeur'),
-                       'spip_formulaires_reponses_champs AS FRC,
-                       spip_formulaires_reponses AS FR,
-                       spip_formulaires AS F',
-                       "FRC.id_formulaires_reponse=FR.id_formulaires_reponse AND FR.statut='publie'
-                       AND F.id_formulaire=FR.id_formulaire
-                       AND F.id_formulaire=$id_formulaire"
-               );
-
-               $valeurs = array();
-               while ($r = sql_fetch($res)) {
-                       $valeurs[$r['nom']][] = is_array(unserialize($r['valeur']))
-                               ? unserialize($r['valeur'])
-                               : $r['valeur'];
-               }
-
-               foreach ($saisies as $nom => $saisie) {
-                       $valeur = sql_getfetsel(
-                               'valeur',
-                               'spip_formulaires_reponses_champs',
-                               'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
-                       );
-                       if (is_array(unserialize($valeur))) {
-                               $valeur = unserialize($valeur);
-                       }
-
-                       $reponse_complete[] = formidable_analyser_saisie($saisie, $valeurs, 0, true);
-               }
-
-               $colonnes = array(_T('formidable:champs'), _T('formidable:sans_reponses'));
-               foreach ($reponse_complete as $reponses) {
-                       foreach ($reponses as $key => $reponse) {
-                               if ($key == 'header' || $key == 'sans_reponse') {
-                                       continue;
-                               }
-                               if (in_array($key, $colonnes) == false) {
-                                       array_push($colonnes, $key);
-                               }
-                       }
-               }
-
-               $csv = array();
-               foreach ($reponse_complete as $reponses) {
-                       foreach ($colonnes as $colonne) {
-                               $csv[$reponses['header']][$colonne] =
-                                       isset($reponses[$colonne])
-                                               ? $reponses[$colonne]
-                                               : '';
-                       }
-                       $csv[$reponses['header']][_T('formidable:champs')] = $reponses['header'];
-                       $csv[$reponses['header']][_T('formidable:sans_reponses')]
-                               = $reponses['formidable:sans_reponse'];
-               }
-
-               $cpt_ligne = 1;
-               $reponses_completes = array();
-               $reponses_completes[0] = $colonnes;
-               foreach ($csv as $ligne => $colonnes) {
-                       $cpt_colonne = 0;
-                       foreach ($colonnes as $colonne) {
-                               $reponses_completes[$cpt_ligne][$cpt_colonne++] = $colonne;
-                       }
-                       $cpt_ligne++;
-               }
-
-               if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
-                       $exporter_csv('analyses-formulaire-'.$formulaire['identifiant'], $reponses_completes, $delim);
-                       exit();
-               }
-       }
-}
diff --git a/www/plugins/formidable/formulaires/exporter_formulaire_reponses.html b/www/plugins/formidable/formulaires/exporter_formulaire_reponses.html
deleted file mode 100644 (file)
index ad52d4e..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-[(#SET{type_export, #ARRAY{csv,<:formidable:reponses_exporter_format_csv:>,xls,<:formidable:reponses_exporter_format_xls:>}})]
-[(#SET{statut, #ARRAY{publie,<:formidable:reponses_exporter_statut_publie:>,tout,<:formidable:reponses_exporter_statut_tout:>}})]
-
-<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id})]">
-       <h3 class="titrem">
-       [(#CHEMIN{images/formulaire-reponses-exporter-24.png}|balise_img{horizontale})]
-       <:formidable:reponses_exporter:></h3>
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-       
-       [(#ENV{editable}|oui)
-       <form method="post" action="#ENV{action}"><div>
-               #ACTION_FORMULAIRE{#ENV{action}}
-               <input type="hidden" name="id_formulaire" value="#ID_FORMULAIRE" />
-               <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
-                       [(#SAISIE{selection, type_export,
-                               label=<:formidable:exporter_formulaire_format_label:>,
-                               datas=#GET{type_export},
-                               defaut=csv,
-                               cacher_option_intro=oui})]
-                       [(#SAISIE{selection, statut_reponses,
-                               label=<:formidable:exporter_formulaire_statut_label:>,
-                               datas=#GET{statut},
-                               defaut=publie,
-                               cacher_option_intro=oui})]
-                       [(#SAISIE{date, date_debut,
-                                       label=<:formidable:exporter_formulaire_date_debut_label:>
-                               })]
-                       [(#SAISIE{date, date_fin,
-                                       label=<:formidable:exporter_formulaire_date_fin_label:>
-                               })]
-               </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
-
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-               <!--extra-->
-               
-               <p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_telecharger:>" /></p>
-       </div></form>
-       ]
-</div>
diff --git a/www/plugins/formidable/formulaires/exporter_formulaire_reponses.php b/www/plugins/formidable/formulaires/exporter_formulaire_reponses.php
deleted file mode 100644 (file)
index e81f778..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable');
-include_spip('inc/formidable_fichiers');
-include_spip('inc/config');
-
-function formulaires_exporter_formulaire_reponses_charger($id_formulaire = 0) {
-       $contexte                  = array();
-       $contexte['id_formulaire'] = intval($id_formulaire);
-
-       return $contexte;
-}
-
-function formulaires_exporter_formulaire_reponses_verifier($id_formulaire = 0) {
-       $erreurs = array();
-
-       if (_request('date_debut') && _request('date_fin')) {
-               // Vérifions que la date debut soit < date de fin
-               if (strtotime(str_replace('/', '-', _request('date_debut'))) > strtotime(str_replace('/', '-', _request('date_fin')))) {
-                       $erreurs['message_erreur'] = _T('formidable:exporter_formulaire_date_erreur');
-               }
-       }
-
-       return $erreurs;
-}
-
-function formulaires_exporter_formulaire_reponses_traiter($id_formulaire = 0) {
-       $retours         = array();
-       $statut_reponses = _request('statut_reponses');
-       // Normaliser la date
-       $verifier = charger_fonction('verifier', 'inc/');
-       $verifier(_request('date_debut'), 'date', array('normaliser' => 'datetime'), $date_debut);
-       $verifier(_request('date_fin'), 'date', array('normaliser' => 'datetime'), $date_fin);
-
-       if (_request('type_export') == 'csv') {
-               $ok = exporter_formulaires_reponses($id_formulaire, ',', $statut_reponses, $date_debut, $date_fin);
-       } elseif (_request('type_export') == 'xls') {
-               $ok = exporter_formulaires_reponses($id_formulaire, 'TAB', $statut_reponses, $date_debut, $date_fin);
-       }
-
-       if (!$ok) {
-               $retours['editable']       = 1;
-               $retours['message_erreur'] = _T('formidable:info_aucune_reponse');
-       }
-
-       return $retours;
-}
-
-/*
- * Exporter toutes les réponses d'un formulaire (anciennement action/exporter_formulaire_reponses)
- * @param integer $id_formulaire
- * @return unknown_type
- */
-function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_reponses = 'publie', $date_debut = '', $date_fin = '') {
-       include_spip('inc/puce_statut');
-       // on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
-       if ($id_formulaire > 0
-               and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . $id_formulaire)
-               and $reponses = sql_allfetsel(
-                       '*',
-                       'spip_formulaires_reponses',
-                       'id_formulaire = ' . intval($id_formulaire) . ($statut_reponses == 'publie' ? ' and statut = "publie"' : '')
-                       . (strlen($date_debut) > 0 ? ' and date >= "'. $date_debut. '"' : '')
-                       . (strlen($date_fin) > 0 ? ' and date <= "'.$date_fin.'"' : '')
-               )) {
-
-               include_spip('inc/saisies');
-               include_spip('facteur_fonctions');
-               include_spip('inc/filtres');
-               $reponses_completes = array();
-
-               // La première ligne des titres
-               $titres = array(
-                       _T('formidable:id_formulaires_reponse'),
-                       _T('public:date'),
-                       _T('formidable:reponses_auteur'),
-                       _T('formidable:reponses_ip'),
-               );
-               if ($statut_reponses != 'publie') {
-                       $titres[] = _T('formidable:reponse_statut');
-               }
-
-               $saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
-               foreach ($saisies as $nom => $saisie) {
-                       if ($saisie['saisie'] != 'explication') {    // on exporte tous les champs sauf explications
-                               $options  = $saisie['options'];
-                               $titres[] = sinon(
-                                       isset($options['label_case']) ? $options['label_case'] : '',
-                                       sinon(
-                                               isset($options['label']) ? $options['label'] : '',
-                                               $nom
-                                       )
-                               );
-                       }
-               }
-
-               // On passe la ligne des titres de colonnes dans un pipeline
-               $titres = pipeline(
-                       'formidable_exporter_formulaire_reponses_titres',
-                       array(
-                               'args' => array('id_formulaire' => $id_formulaire, 'formulaire' => $formulaire),
-                               'data' => $titres,
-                       )
-               );
-
-               $reponses_completes[] = $titres;
-               $saisies_fichiers = array();
-
-               // sélectionner tous les auteurs d’un coup. Évite N requetes SQL…
-               $ids_auteurs = array_filter(array_map('intval', array_column($reponses, 'id_auteur')));
-               $auteurs = sql_allfetsel('id_auteur, nom', 'spip_auteurs', sql_in('id_auteur', $ids_auteurs));
-               $auteurs = array_column($auteurs, 'nom', 'id_auteur');
-
-               // Sélectionner toutes valeurs des réponses d’un coup. Éviten N requetes SQL...
-               $ids_reponses = array_column($reponses, 'id_formulaires_reponse');
-               $_reponses_valeurs = sql_allfetsel(
-                       'id_formulaires_reponse, nom, valeur',
-                       'spip_formulaires_reponses_champs',
-                       array(
-                               sql_in('id_formulaires_reponse', $ids_reponses),
-                               //sql_in('nom', array_keys($saisies)) // ralentit la requête, et inutile
-                       ),
-                       '',
-                       'id_formulaires_reponse ASC'
-               );
-
-               // grouper par identifiant de réponse
-               $reponses_valeurs = array();
-               foreach ($_reponses_valeurs as $r) {
-                       if (empty($reponses_valeurs[$r['id_formulaires_reponse']])) {
-                               $reponses_valeurs[$r['id_formulaires_reponse']] = array();
-                       }
-                       $reponses_valeurs[$r['id_formulaires_reponse']][$r['nom']] = $r['valeur'];
-               }
-               unset($_reponses_valeurs);
-
-               // Ensuite tous les champs
-               $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
-
-               // On parcourt chaque réponse
-               foreach ($reponses as $i => $reponse) {
-                       // Est-ce qu'il y a un auteur avec un nom
-                       $nom_auteur = '';
-                       if ($id_auteur = intval($reponse['id_auteur'])) {
-                               $nom_auteur = !empty($auteurs[$id_auteur]) ? $auteurs[$id_auteur] : '';
-                       }
-
-                       // Le début de la réponse avec les infos (date, auteur, etc)
-                       $reponse_complete = array(
-                               $reponse['id_formulaires_reponse'],
-                               $reponse['date'],
-                               $nom_auteur,
-                               $reponse['ip'],
-                       );
-                       if ($statut_reponses != 'publie') {
-                               $reponse_complete[] = statut_texte_instituer('formulaires_reponse', $reponse['statut']);
-                       }
-
-                       // Liste de toutes les valeurs
-                       $valeurs = $reponses_valeurs[$reponse['id_formulaires_reponse']];
-
-                       foreach ($saisies as $nom => $saisie) {
-                               if ($saisie['saisie'] != 'explication') {
-
-                                       // Saisie de type fichier ?
-                                       if ($saisie['saisie'] == 'fichiers') {
-                                               $_valeurs = $tenter_unserialize($valeurs[$nom]);
-                                               //tester s'il y a des saisies parmi les fichiers
-                                               if (is_array($_valeurs) and $_valeurs) {
-                                                       $chemin = _DIR_FICHIERS_FORMIDABLE . 'formulaire_' . $id_formulaire . '/reponse_' . $reponse['id_formulaires_reponse'];
-                                                       foreach ($_valeurs as $v) {
-                                                               $chemin_fichier = $chemin . '/' . $saisie['options']['nom'] . '/' . $v['nom'];
-                                                               if (file_exists($chemin_fichier)) {
-                                                                       $saisies_fichiers[] = $chemin_fichier;
-                                                               }
-                                                       }
-                                               }
-                                       }
-
-                                       $valeur = isset($valeurs[$nom]) ? $valeurs[$nom] : '';
-                                       $reponse_complete[] = formidable_generer_valeur_texte_saisie($valeur, $saisie);
-                               }
-                       }
-
-                       // On passe la ligne de réponse dans un pipeline
-                       $reponse_complete = pipeline(
-                               'formidable_exporter_formulaire_reponses_reponse',
-                               array(
-                                       'args' => array(
-                                               'id_formulaire' => $id_formulaire,
-                                               'formulaire'    => $formulaire,
-                                               'reponse'       => $reponse,
-                                       ),
-                                       'data' => $reponse_complete,
-                               )
-                       );
-
-                       // On ajoute la ligne à l'ensemble des réponses
-                       $reponses_completes[] = $reponse_complete;
-               }
-
-               if (!count($saisies_fichiers)) {// si pas de saisie fichiers, on envoie directement le csv
-                       if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
-                               $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim);
-                               exit();
-                       }
-               } else {
-                       if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
-                               $fichier_csv = $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim, null, false);
-                               $fichier_zip = sous_repertoire(_DIR_CACHE, 'export') . 'reponses-formulaire-' . $formulaire['identifiant'] . '.zip';
-                               include_spip('inc/formidable_fichiers');
-                               $fichier_zip = formidable_zipper_reponses_formulaire($formulaire['id_formulaire'], $fichier_zip, $fichier_csv, $saisies_fichiers);
-                               if (!$fichier_zip) {// si erreur lors du zippage
-                                       return false;
-                               } else {
-                                       formidable_retourner_fichier($fichier_zip, basename($fichier_zip));
-                               }
-                       }
-               }
-       } else {
-               return false;
-       }
-}
-
-/**
- * Cette fonction retourne le texte d’une réponse pour un type de saisie donnée.
- *
- * On limite les calculs lorsque 2 valeurs/types de saisies sont identiques
- * de fois de suite.
- *
- * @param string $valeur
- * @param array $saisie
- * @return string
- */
-function formidable_generer_valeur_texte_saisie($valeur, $saisie) {
-       static $resultats = array();
-       static $tenter_unserialize = null;
-       if (is_null($tenter_unserialize)) {
-               $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
-       }
-
-       $hash = md5($saisie['saisie'] . ':'  . serialize($saisie['options']) . ':' . $valeur);
-
-       if (!isset($resultats[$hash])) {
-               $valeur = $tenter_unserialize($valeur);
-               // Il faut éviter de passer par là… ça prend du temps…
-               $resultats[$hash] = facteur_mail_html2text(
-                       recuperer_fond(
-                               'saisies-vues/_base',
-                               array_merge(
-                                       array(
-                                               'valeur_uniquement' => 'oui',
-                                               'type_saisie'       => $saisie['saisie'],
-                                               'valeur'            => $valeur,
-                                       ),
-                                       $saisie['options']
-                               )
-                       )
-               );
-
-       }
-
-       return $resultats[$hash];
-}
diff --git a/www/plugins/formidable/formulaires/formidable.html b/www/plugins/formidable/formulaires/formidable.html
deleted file mode 100644 (file)
index dfb771b..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<BOUCLE_remplacer_le_formulaire(CONDITION){si #ENV{_remplacer_formulaire}}>
-       [(#REM) Afficher du HTML si prévu par un plugin ou pour les stats ]
-       [(#ENV**{_remplacer_formulaire})]
-</BOUCLE_remplacer_le_formulaire>
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}>
-       [(#SET{enregistrement,[(#TRAITEMENTS**|unserialize|table_valeur{'enregistrement'})]})]
-       [(#SET{anonymiser,[(#GET{enregistrement}|table_valeur{'anonymiser'})]})]
-       [(#GET{anonymiser}|=={on}|oui)<h3><:formidable:formulaire_anonyme_explication:></h3>]
-</BOUCLE_formulaire>
-<div class="formulaire_spip formulaire_[(#ENV{form})] formulaire_#ENV{form}_[(#ENV{_formidable}|table_valeur{id_formulaire})] formulaire_#ENV{form}_[(#ENV{_formidable}|table_valeur{identifiant})][ formulaire_#ENV{form}-(#ENV{id,nouveau})][ (#ENV{_css})]" id="[formulaire_#ENV{form}-(#ENV{id,nouveau})]">
-       [<h3 class="titrem"><span>(#ENV{_titre})</span></h3>]
-       [<div class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok}|propre)</div>]
-       [<div class="reponse_formulaire reponse_formulaire_erreur[ (#ENV{message_erreur_class})]">(#ENV*{message_erreur}|propre)</div>]
-
-       [(#ENV{editable}|oui)
-               [(#ENV{_saisies}|et{#ENV{_saisies}|count}|oui)
-       <form method='post' action='[(#ENV{action}|ancre_url{[formulaire_#ENV{form}-(#ENV{id,nouveau})]})]' enctype='multipart/form-data'><div>
-               [(#REM) declarer les hidden qui declencheront le service du formulaire
-                       parametre : url d'action ]
-               #ACTION_FORMULAIRE{#ENV{action}}
-               <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
-                       #GENERER_SAISIES{#ENV{_saisies}}
-                       <[(#VAL{li}|saisie_balise_structure_formulaire)] style="display:none;">
-                               <label for="mechantrobot-#ENV{id}"><:antispam_champ_vide:></label>
-                               <input type="text" id="mechantrobot-#ENV{id}" name="mechantrobot" value="#ENV{mechantrobot}" />
-                       </[(#VAL{li}|saisie_balise_structure_formulaire)]>
-               </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
-
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-               <!--extra-->
-
-               <INCLURE{fond=formulaires/inc-formidable-boutons,id_formulaire=#ENV{id}} />
-       </div></form>
-       ]
-               [(#ENV{_saisies}|et{#ENV{_saisies}|count}|non)
-                       <p class="notice"><:formidable:formulaires_aucun_champ:></p>
-               ]
-       ]
-       [(#ENV{editable}|non)
-               [(#ENV{formidable_afficher_apres}|=={valeurs}|oui)
-                       #VOIR_SAISIES{#ENV*{_saisies},#ENV**|unserialize}
-               ]
-               [(#ENV{formidable_afficher_apres}|=={rien}|oui)
-               ]
-               [(#ENV{formidable_afficher_apres}|=={stats}|oui)
-                       #MODELE{formulaire_analyse,id_formulaire=#ENV{id}}
-               ]
-       ]
-</div>
-<//B_remplacer_le_formulaire>
diff --git a/www/plugins/formidable/formulaires/formidable.php b/www/plugins/formidable/formulaires/formidable.php
deleted file mode 100644 (file)
index ae2b75b..0000000
+++ /dev/null
@@ -1,601 +0,0 @@
-<?php
-
-/**
-* Gestion de l'affichage et traitement d'un formulaire Formidable
-*
-* @package SPIP\Formidable\Formulaires
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable');
-include_spip('inc/formidable_fichiers');
-include_spip('inc/saisies');
-include_spip('base/abstract_sql');
-include_spip('inc/autoriser');
-include_spip('plugins/installer');
-
-function formidable_id_formulaire($id) {
-       // on utilise une static pour etre sur que si l'appel dans verifier() passe, celui dans traiter() passera aussi
-       // meme si entre temps on perds la base
-       static $id_formulaires = array();
-       if (isset($id_formulaires[$id])) {
-               return $id_formulaires[$id];
-       }
-
-       if (is_numeric($id)) {
-               $where = 'id_formulaire = ' . intval($id);
-       } elseif (is_string($id)) {
-               $where = 'identifiant = ' . sql_quote($id);
-       } else {
-               return 0;
-       }
-
-       $id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires', $where));
-
-       if ($id_formulaire
-               and !test_espace_prive()
-               and !objet_test_si_publie('formulaire', $id_formulaire)) {
-               return $id_formulaires[$id] = 0;
-       }
-
-       return $id_formulaires[$id] = $id_formulaire;
-}
-
-/**
-* Chargement du formulaire CVT de Formidable.
-*
-* Genere le formulaire dont l'identifiant (numerique ou texte est indique)
-*
-* @param int|string $id
-*     Identifiant numerique ou textuel du formulaire formidable
-* @param array $valeurs
-*     Valeurs par défauts passées au contexte du formulaire
-*     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
-* @param int|bool $id_formulaires_reponse
-*     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
-*
-* @return array
-*     Contexte envoyé au squelette HTML du formulaire.
-**/
-function formulaires_formidable_charger($id, $valeurs = array(), $id_formulaires_reponse = false) {
-       $contexte = array();
-
-       // On peut donner soit un id soit un identifiant
-       if (!$id_formulaire = formidable_id_formulaire($id)) {
-               return;
-       }
-
-       // On cherche si le formulaire existe
-       if ($formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))) {
-               // On ajoute un point d'entrée avec les infos de ce formulaire
-               // pour d'eventuels plugins qui en ont l'utilité
-               $contexte['_formidable'] = $formulaire;
-               // Classes CSS
-               $contexte['_css'] = $formulaire['css'];
-
-               // Est-ce que la personne a le droit de répondre ?
-               if (autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire' => $formulaire))) {
-                       $saisies = unserialize($formulaire['saisies']);
-                       $traitements = unserialize($formulaire['traitements']);
-
-                       // Si on est en train de réafficher les valeurs postées,
-                       // ne pas afficher les saisies hidden
-                       if ($formulaire['apres'] == 'valeurs'
-                               and _request('formidable_afficher_apres') == 'valeurs'
-                       ) {
-                               foreach ($saisies as $k => $saisie) {
-                                       if (isset($saisie['saisie'])
-                                               and $saisie['saisie'] == 'hidden'
-                                       ) {
-                                               unset($saisies[$k]);
-                                       }
-                               }
-                       }
-
-                       // On déclare les champs avec les valeurs par défaut
-                       $contexte = array_merge(saisies_lister_valeurs_defaut($saisies), $contexte);
-                       $contexte['mechantrobot'] = '';
-                       // On ajoute le formulaire complet
-                       $contexte['_saisies'] = $saisies;
-
-                       $contexte['id'] = $formulaire['id_formulaire'];
-                       $contexte['_hidden'] = '<input type="hidden" name="id_formulaire" value="' . $contexte['id'] . '"/>';
-
-                       // S'il y a des valeurs par défaut dans l'appel, alors on pré-remplit
-                       if ($valeurs) {
-                               // Si c'est une chaine on essaye de la parser
-                               if (is_string($valeurs)) {
-                                       $liste = explode(',', $valeurs);
-                                       $liste = array_map('trim', $liste);
-                                       $valeurs = array();
-                                       foreach ($liste as $i => $cle_ou_valeur) {
-                                               if ($i%2 == 0) {
-                                                       $valeurs[$liste[$i]] = $liste[$i+1];
-                                               }
-                                       }
-                               }
-
-                               // Si on a un tableau,
-                               // alors on écrase avec les valeurs données depuis l'appel
-                               if ($valeurs and is_array($valeurs)) {
-                                       $contexte = array_merge($contexte, $valeurs);
-                               }
-                       }
-
-                       // Si on passe un identifiant de reponse, on edite cette reponse si elle existe
-                       if ($id_formulaires_reponse = intval($id_formulaires_reponse)) {
-                               $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
-                               if ($ok == false) {
-                                       $contexte['editable'] = false;
-                                       $contexte['message_erreur'] = _T(
-                                               'formidable:traiter_enregistrement_erreur_edition_reponse_inexistante'
-                                       );
-                               }
-                       } else {
-                               // calcul des paramètres d'anonymisation
-                               $options = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null;
-
-                               $anonymisation = (isset($options['anonymiser']) && $options['anonymiser']==true)
-                                       ? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : ''
-                                       : '';
-
-                               // Si multiple = non mais que c'est modifiable, alors on va chercher
-                               // la dernière réponse si elle existe
-                               if ($options
-                                       and !$options['multiple']
-                                       and $options['modifiable']
-                                       and $reponses = formidable_verifier_reponse_formulaire(
-                                               $formulaire['id_formulaire'],
-                                               $options['identification'],
-                                               $anonymisation
-                                       )) {
-                                       $id_formulaires_reponse = array_pop($reponses);
-                                       $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
-                               }
-                       }
-               } else {
-                       $contexte['editable'] = false;
-                       // le formulaire a déjà été répondu.
-                       // peut être faut il afficher les statistiques des réponses
-                       if ($formulaire['apres']=='stats') {
-                               // Nous sommes face à un sondage auquel on a déjà répondu !
-                               // On remplace complètement l'affichage du formulaire
-                               // par un affichage du résultat de sondage !
-                               $contexte['_remplacer_formulaire'] = recuperer_fond('modeles/formulaire_analyse', array(
-                                       'id_formulaire' => $formulaire['id_formulaire'],
-                               ));
-                       } else {
-                               $contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_deja_repondu');
-                               $contexte['message_erreur_class'] = 'deja_repondu';
-                       }
-               }
-       } else {
-               $contexte['editable'] = false;
-               $contexte['message_erreur'] = _T('formidable:erreur_inexistant');
-       }
-       if (!isset($contexte['_hidden'])) {
-               $contexte['_hidden'] = '';
-       }
-       $contexte['_hidden'] .= "\n" . '<input type="hidden" name="formidable_afficher_apres' /*.$formulaire['id_formulaire']*/ . '" value="' . $formulaire['apres'] . '"/>'; // marche pas
-
-       if ($precharger= _request('_formidable_cvtupload_precharger_fichiers')) {
-               $contexte['cvtupload_precharger_fichiers'] = $precharger;
-       }
-       $contexte['formidable_afficher_apres'] = $formulaire['apres'];
-
-       return $contexte;
-}
-
-
-/**
-* Vérification du formulaire CVT de Formidable.
-*
-* Pour chaque champ posté, effectue les vérifications demandées par
-* les saisies et retourne éventuellement les erreurs de saisie.
-*
-* @param int|string $id
-*     Identifiant numerique ou textuel du formulaire formidable
-* @param array $valeurs
-*     Valeurs par défauts passées au contexte du formulaire
-*     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
-* @param int|bool $id_formulaires_reponse
-*     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
-*
-* @return array
-*     Tableau des erreurs
-**/
-function formulaires_formidable_verifier($id, $valeurs = array(), $id_formulaires_reponse = false) {
-       $erreurs = array();
-       // On peut donner soit un id soit un identifiant
-       if (!$id_formulaire = formidable_id_formulaire($id)) {
-               $erreurs['message_erreur'] = _T('formidable:erreur_base');
-       } else {
-               // Sale bête !
-               if (_request('mechantrobot')!='') {
-                       $erreurs['hahahaha'] = 'hahahaha';
-                       return $erreurs;
-               }
-
-               $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire));
-               $saisies = unserialize($formulaire['saisies']);
-
-               $erreurs_par_fichier = array();
-               $erreurs = saisies_verifier($saisies, true, $erreurs_par_fichier);
-
-               // On supprime de $_FILES les fichiers envoyés qui ne passent pas le test de vérification
-
-               //$infos_plugins = charger_fonction('infos_plugins','plugins');
-               $plugins_actifs = liste_plugin_actifs();
-               if (isset($plugins_actifs['CVTUPLOAD'])) {
-                       include_spip('inc/cvtupload');
-                       foreach ($erreurs as $champ => $erreur) {
-                               if (isset($erreurs_par_fichier[$champ])) {
-                                       cvtupload_nettoyer_files_selon_erreurs($champ, $erreurs_par_fichier[$champ]);
-                               }
-                       }
-               }
-
-               // Si on a pas déjà une erreur sur le champ unicite, on lance une verification
-               if ($formulaire['unicite'] != '') {
-                       if (!$erreurs[$formulaire['unicite']]) {
-                               $reponses = sql_allfetsel(
-                                       'R.id_formulaire AS id',
-                                       'spip_formulaires_reponses AS R
-                                               LEFT JOIN spip_formulaires AS F
-                                               ON R.id_formulaire=F.id_formulaire
-                                               LEFT JOIN spip_formulaires_reponses_champs AS C
-                                               ON R.id_formulaires_reponse=C.id_formulaires_reponse',
-                                       'R.id_formulaire = ' . $id_formulaire . '
-                                               AND C.nom='.sql_quote($formulaire['unicite']).'
-                                               AND C.valeur='.sql_quote(_request($formulaire['unicite'])).'
-                                               AND R.statut = "publie"'
-                               );
-                               if (is_array($reponses) && count($reponses) > 0) {
-                                       $erreurs[$formulaire['unicite']] = $formulaire['message_erreur_unicite'] ?
-                                               _T($formulaire['message_erreur_unicite']) : _T('formidable:erreur_unicite');
-                               }
-                       }
-               }
-
-               if ($erreurs and !isset($erreurs['message_erreur'])) {
-                       $erreurs['message_erreur'] = _T('formidable:erreur_generique');
-               }
-       }
-       return $erreurs;
-}
-
-
-/**
- * Traitement du formulaire CVT de Formidable.
- *
- * Exécute les traitements qui sont indiqués dans la configuration des
- * traitements de ce formulaire formidable.
- *
- * Une fois fait, gère le retour après traitements des saisies en fonction
- * de ce qui a été configuré dans le formulaire, par exemple :
- * - faire réafficher le formulaire,
- * - faire afficher les saisies
- * - rediriger sur une autre page...
- *
- * @param int|string $id
- *     Identifiant numerique ou textuel du formulaire formidable
- * @param array $valeurs
- *     Valeurs par défauts passées au contexte du formulaire
- *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
- * @param int|bool $id_formulaires_reponse
- *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
- *
- * @return array
- *     Tableau des erreurs
- **/
-function formulaires_formidable_traiter($id, $valeurs = array(), $id_formulaires_reponse = false) {
-       $retours = array();
-
-       // POST Mortem de securite : on log le $_POST pour ne pas le perdre si quelque chose se passe mal
-       include_spip('inc/json');
-       $post = json_encode(array('post' => $_POST, 'files' => $_FILES));
-       spip_log($post, 'formidable_post'._LOG_INFO_IMPORTANTE);
-
-       // On peut donner soit un id soit un identifiant
-       if (!$id_formulaire = formidable_id_formulaire($id)) {
-               return array('message_erreur'=>_T('formidable:erreur_base'));
-       }
-
-       $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . $id_formulaire);
-       $traitements = unserialize($formulaire['traitements']);
-       $traitements = pipeline(
-               'formidable_traitements',
-               array(
-                       'args'=>array('id_formulaire'=>$id_formulaire),
-                       'data'=>$traitements
-               )
-       );
-       // selon le choix, le formulaire se remet en route à la fin ou non
-       $retours['editable'] = ($formulaire['apres']=='formulaire');
-       $retours['formidable_afficher_apres'] = $formulaire['apres'];
-       $retours['id_formulaire'] = $id_formulaire;
-
-       // Si on a une redirection valide
-       if (($formulaire['apres'] == 'redirige') and ($formulaire['url_redirect'] != '')) {
-               refuser_traiter_formulaire_ajax();
-               // traiter les raccourcis artX, brX
-               include_spip('inc/lien');
-               $url_redirect = typer_raccourci($formulaire['url_redirect']);
-               if (count($url_redirect) > 2) {
-                       $url_redirect = $url_redirect[0] . $url_redirect[2];
-               } else {
-                       $url_redirect = $formulaire['url_redirect']; // URL classique
-               }
-
-               $retours['redirect'] = $url_redirect;
-       }
-
-       // les traitements deja faits se notent ici
-       // pour etre sur de ne pas etre appeles 2 fois
-       // ainsi si un traitement A a besoin d'un traitement B,
-       // et que B n'est pas fait quand il est appele, il peut rendre la main sans rien faire au premier coup
-       // et sera rappele au second tour
-       $retours['traitements'] = array();
-       $erreur_texte = '';
-
-       // Si on a des traitements
-       if (is_array($traitements) and !empty($traitements)) {
-               $maxiter = 5;
-               do {
-                       foreach ($traitements as $type_traitement => $options) {
-                               // si traitement deja appele, ne pas le relancer
-                               if (!isset($retours['traitements'][$type_traitement])) {
-                                       if ($appliquer_traitement = charger_fonction($type_traitement, 'traiter/', true)) {
-                                               $retours = $appliquer_traitement(
-                                                       array(
-                                                               'formulaire' => $formulaire,
-                                                               'options' => $options,
-                                                               'id_formulaire' => $id_formulaire,
-                                                               'valeurs' => $valeurs,
-                                                               'id_formulaires_reponse' => $id_formulaires_reponse,
-                                                       ),
-                                                       $retours
-                                               );
-                                       } else {
-                                               // traitement introuvable, ne pas retenter
-                                               $retours['traitements'][$type_traitement] = true;
-                                       }
-                               }
-                       }
-               } while (count($retours['traitements']) < count($traitements) and $maxiter--);
-               // si on ne peut pas traiter correctement, alerter le webmestre
-               if (count($retours['traitements']) < count($traitements)) {
-                       $erreur_texte = "Impossible de traiter correctement le formulaire $id\n"
-                               . 'Traitements attendus :'.implode(',', array_keys($traitements))."\n"
-                               . 'Traitements realises :'.implode(',', array_keys($retours['traitements']))."\n";
-               }
-
-               // Si on a personnalisé le message de retour, c'est lui qui est affiché uniquement
-               if ($formulaire['message_retour']) {
-                       $retours['message_ok'] = _T_ou_typo($formulaire['message_retour']);
-               }
-       } else {
-               $retours['message_erreur'] = _T('formidable:retour_aucun_traitement');
-       }
-       if (isset($retours['fichiers'])) {// traitement particuliers si fichiers
-               if ($erreurs_fichiers = formidable_produire_messages_erreurs_fichiers($retours['fichiers'])) {
-                       // Inspecter les fichiers pour voir s'il y a des erreurs
-                       // Avertir l'utilisateur
-                       if (isset($retours['message_erreur'])) {
-                               $retours['message_erreur'] .= '<br />'.$erreurs_fichiers['message_public'];
-                       } else {
-                               $retours['message_erreur'] = $erreurs_fichiers['message_public'];
-                       }
-                       // Avertir le webmestre
-                       if (isset($retours['id_formulaires_reponse'])) {
-                               $erreur_fichiers_sujet = '[ERREUR] Impossible de sauvegarder les fichiers de la réponse '.$retours['id_formulaires_reponse']." au formulaire $id";
-                       } else {
-                               $erreur_fichiers_sujet = "[ERREUR] Impossible de sauvegarder les fichiers de la réponse au formulaire $id";
-                       }
-                       $erreur_fichiers_texte = "Récupérez le plus rapidement possible les fichiers temporaires suivants\n";
-                       $erreur_fichiers_texte .= $erreurs_fichiers['message_webmestre'];
-                       $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
-                       $envoyer_mail($GLOBALS['meta']['email_webmaster'], $erreur_fichiers_sujet, $erreur_fichiers_texte);
-               }
-               if ($formulaire['apres'] == 'valeurs') {
-                       // Si on affiche après les valeurs des réponses, modifier _request pour les saisies de types fichiers
-                       $vignette_par_defaut = charger_fonction('vignette', 'inc/');
-                       foreach ($retours['fichiers'] as $saisie => $description) {
-                               foreach ($description as $i => $desc) {
-                                       // ajouter la vignette et l'url
-                                       if (!isset($description[$i]['erreur'])) {
-                                               $description[$i]['vignette'] = $vignette_par_defaut($desc['extension'], false);
-                                               if (isset($retours['id_formulaires_reponse'])) {// si réponse enregistrée
-                                                       $description[$i]['url'] =  formidable_generer_url_action_recuperer_fichier($id_formulaire, $retours['id_formulaires_reponse'], $saisie, $desc['fichier']);
-                                               } elseif (isset($retours['timestamp'])) { // si réponse simplement envoyée par courriel
-                                                       $description[$i]['url'] = formidable_generer_url_action_recuperer_fichier_email(
-                                                               $saisie,
-                                                               $desc['fichier'],
-                                                               array('timestamp'=>$retours['timestamp'])
-                                                       );
-                                               }
-                                       }
-                               }
-                               set_request($saisie, $description);
-                       }
-               }
-       }
-       // Si on fait une redirection
-       // Et que l'on a enregistré le résultat
-       // Alors, passer l'id de la réponse à la page
-       if (isset($retours['id_formulaires_reponse']) AND isset($retours['redirect'])) {
-               $retours['redirect'] = parametre_url($retours['redirect'], 'id_formulaires_reponse', $retours['id_formulaires_reponse'], '&');
-       }
-       // lorsqu'on affichera à nouveau le html,
-       // dire à cvt-upload de ne pas générer le html pour les résultats des saisies fichiers
-       if ($formulaire['apres']=='formulaire' and isset($retours['fichiers'])) {
-               $formidable_cvtupload_precharger_fichiers = array();
-               set_request('_fichiers', null);
-               set_request('_cvtupload_precharger_fichiers_forcer', true);
-               foreach ($retours['fichiers'] as $champ => $valeur) {
-                       $i = -1;
-                       foreach ($valeur as $id => $info) {
-                               $i++;
-                               if (isset($info['fichier'])) {
-                                       $nom_fichier = $info['fichier'];
-                               } else {
-                                       $nom_fichier = $info['nom'];
-                               }
-                               if (isset($retours['id_formulaires_reponse'])) {
-                                       $chemin_fichier = _DIR_FICHIERS_FORMIDABLE
-                                               .'formulaire_'.$retours['id_formulaire']
-                                               .'/reponse_'.$retours['id_formulaires_reponse']
-                                               .'/'.$champ
-                                               .'/'.$nom_fichier;
-                                       $formidable_cvtupload_precharger_fichiers[$champ][$i]['url'] = formidable_generer_url_action_recuperer_fichier($retours['id_formulaire'], $retours['id_formulaires_reponse'], $champ, $nom_fichier);
-                                       $formidable_cvtupload_precharger_fichiers[$champ][$i]['chemin'] = $chemin_fichier;
-                               } elseif (isset($retours['timestamp'])) {
-                                       $chemin_fichier = _DIR_FICHIERS_FORMIDABLE
-                                               .'timestamp/'
-                                               .$retours['timestamp'].'/'
-                                               .$champ.'/'
-                                               .$nom_fichier;
-                                       $formidable_cvtupload_precharger_fichiers[$champ][$i]['chemin'] = $chemin_fichier;
-                                       $formidable_cvtupload_precharger_fichiers[$champ][$i]['url'] = formidable_generer_url_action_recuperer_fichier_email(
-                                               $champ,
-                                               $nom_fichier,
-                                               array('timestamp'=>$retours['timestamp'])
-                                       );
-                               }
-                       }
-               }
-               set_request('_formidable_cvtupload_precharger_fichiers', $formidable_cvtupload_precharger_fichiers);
-       }
-       // si aucun traitement, alerter le webmestre pour ne pas perdre les donnees
-       if (!$erreur_texte and !count($retours['traitements'])) {
-               $erreur_texte = "Aucun traitement pour le formulaire $id\n";
-       }
-       if ($erreur_texte) {
-               $erreur_sujet = "[ERREUR] Traitement Formulaire $id";
-               // dumper la saisie pour ne pas la perdre
-               $erreur_texte .= "\n".var_export($_REQUEST, true)."\n".var_export($_FILES, true);
-               $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
-               $envoyer_mail($GLOBALS['meta']['email_webmaster'], $erreur_sujet, $erreur_texte);
-       }
-       unset($retours['traitements']);
-       return $retours;
-}
-
-/**
- * Déclare à cvtupload les champs fichiers du formulaire
- *
- * @param int|string $id
- *     Identifiant numerique ou textuel du formulaire formidable
- * @param array $valeurs
- *     Valeurs par défauts passées au contexte du formulaire
- *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
- * @param int|bool $id_formulaires_reponse
- *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
- *
- * @return array
- *     Tableau des champs de type fichier
- **/
-function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaires_reponse = false) {
-       // On peut donner soit un id soit un identifiant
-       if (!$id_formulaire = formidable_id_formulaire($id)) {
-               return array();
-       }
-
-       // On cherche les saisies du formulaire
-       if ($saisies = sql_getfetsel('saisies', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))) {
-               $saisies = unserialize($saisies);
-               include_spip('inc/saisies_lister');
-               $saisies_fichiers = array_keys(saisies_lister_avec_type($saisies, 'fichiers'));
-               return $saisies_fichiers;
-       }
-}
-/**
- * Ajoute dans le contexte les elements
- * donnés par une reponse de formulaire indiquée
- *
- * @param array $contexte
- *     Contexte pour le squelette HTML du formulaire
- * @param int $id_formulaires_reponse
- *     Identifiant de réponse
- * @param bool $ok
- *     La reponse existe bien ?
- * @return array $contexte
- *     Contexte complète des nouvelles informations
- *
- **/
-function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) {
-
-       // On prépare des infos si jamais on a des champs fichiers
-       $saisies_fichiers = saisies_lister_avec_type($contexte['_saisies'], 'fichiers');// les saisies de type fichier
-       $fichiers = array();
-       $id_formulaire = $contexte['_formidable']['id_formulaire'];
-
-       // On va chercher tous les champs
-       $champs = sql_allfetsel(
-               'nom, valeur',
-               'spip_formulaires_reponses_champs',
-               'id_formulaires_reponse = ' . $id_formulaires_reponse
-       );
-       $ok = count($champs) ? true : false;
-       // On remplit le contexte avec les résultats précédents
-       foreach ($champs as $champ) {
-               if (array_key_exists($champ['nom'], $saisies_fichiers)) {
-                       $valeur= unserialize($champ['valeur']);
-                       $nom = $champ['nom'];
-                       $fichiers[$nom] = array();
-                       $chemin = _DIR_FICHIERS_FORMIDABLE
-                               ."formulaire_$id_formulaire/reponse_$id_formulaires_reponse/"
-                               ."$nom/";
-                       foreach ($valeur as $f => $fichier) {
-                               $fichiers[$nom][$f]= array();
-                               $param = serialize(array(
-                                       'formulaire' => $id_formulaire,
-                                       'reponse' => $id_formulaires_reponse,
-                                       'fichier' => $fichier['nom'],
-                                       'saisie' => $champ['nom']
-                               ));
-                               $fichiers[$nom][$f]['url'] =  formidable_generer_url_action_recuperer_fichier($id_formulaire, $id_formulaires_reponse, $champ['nom'], $fichier['nom']);
-                               $fichiers[$nom][$f]['chemin'] = $chemin.$fichier['nom'];
-                       }
-               } else {
-                       $test_array = filtre_tenter_unserialize_dist($champ['valeur']);
-                       $contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur'];
-               }
-       }
-       if ($fichiers != array()) {//s'il y a des fichiers dans les réponses
-               $contexte['cvtupload_precharger_fichiers'] = $fichiers;
-       }
-       return $contexte;
-}
-
-/**
- * Produire un message d'erreur concaténant les messages d'erreurs
- * par fichier.
- * Fournir également une forme pour l'envoyer par webmestre
- * @param array $fichiers
- *             le tableau des fichiers qui a été remplie par formidable_deplacer_fichiers_produire_vue_saisie()
- * @return array ('message_public' => 'message', 'message_webmestre' => 'message'
-**/
-function formidable_produire_messages_erreurs_fichiers($fichiers) {
-       $message_public = '';
-       $message_webmestre = '';
-       foreach ($fichiers as $champ => $description_champ) {
-               foreach ($description_champ as $n => $description) {
-                       if (isset($description['erreur'])) {
-                               $message_public .= $description['erreur']."\n";
-                               $message_webmestre .= "Pour le champ $champ[$n]:\n"
-                                       . '- Le fichier temporaire : '.$description['tmp_name']."\n"
-                                       . '- Ayant pour véritable nom : '.$description['nom']." \n";
-                       }
-               }
-       }
-       if ($message_public !='') {
-               return array('message_public'=>$message_public, 'message_webmestre'=>$message_webmestre);
-       } else {
-               return '';
-       }
-}
diff --git a/www/plugins/formidable/formulaires/importer_formulaire.html b/www/plugins/formidable/formulaires/importer_formulaire.html
deleted file mode 100644 (file)
index 6f70ffe..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id})]">
-       <h3 class="titrem"><:formidable:importer_formulaire:></h3>
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-       
-       [(#ENV{editable}|oui)
-       <form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
-               [(#REM) declarer les hidden qui declencheront le service du formulaire 
-               parametre : url d'action ]
-               #ACTION_FORMULAIRE{#ENV{action}}
-               
-               <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
-                       [(#SAISIE{selection, type_import,
-                               label=<:formidable:importer_formulaire_format_label:>,
-                               datas=#ENV{_types_import},
-                               defaut=yaml,
-                               cacher_option_intro=oui})]
-                       
-                       [(#SAISIE{input, fichier,
-                               label=<:formidable:importer_formulaire_fichier_label:>,
-                               type=file,
-                               size=6})]
-               </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
-               
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-               <!--extra-->
-               
-               <p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_upload:>" /></p>
-       </div></form>
-       ]
-</div>
diff --git a/www/plugins/formidable/formulaires/importer_formulaire.php b/www/plugins/formidable/formulaires/importer_formulaire.php
deleted file mode 100644 (file)
index 222c12e..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable');
-include_spip('inc/config');
-
-function formulaires_importer_formulaire_charger() {
-
-       $contexte = array();
-
-       // On va chercher toutes les fonctions d'importation existantes
-       $types_echange = echanges_formulaire_lister_disponibles();
-       $types_import = array();
-       foreach ($types_echange['importer'] as $type => $fonction) {
-               $types_import[$type] = _T("formidable:echanger_formulaire_${type}_importer");
-       }
-
-       $contexte['_types_import'] = $types_import;
-
-       return $contexte;
-}
-
-function formulaires_importer_formulaire_verifier() {
-       $erreurs = array();
-
-       return $erreurs;
-}
-
-function formulaires_importer_formulaire_traiter() {
-       $retours = array();
-
-       if (!$_FILES['fichier']['error']) {
-               $type_import = _request('type_import');
-               $fichier = $_FILES['fichier']['tmp_name'];
-
-               $importer = charger_fonction('importer', "echanger/formulaire/$type_import", true);
-
-               try {
-                       $erreur_ou_id = $importer($fichier);
-               } catch (Exception $e) {
-                       $erreur_ou_id = $e->getMessage();
-               }
-
-               if (!is_numeric($erreur_ou_id)) {
-                       $retours['message_erreur'] = $erreur_ou_id;
-                       $retours['editable'] = true;
-               } else {
-                       $id_formulaire = intval($erreur_ou_id);
-                       // Tout a fonctionné. En fonction de la config, on attribue l'auteur courant
-                       $auteurs = lire_config('formidable/analyse/auteur');
-                       if ($auteurs == 'on') {
-                               if ($id_auteur = session_get('id_auteur')) {
-                                       // association (par défaut) du formulaire et de l'auteur courant
-                                       objet_associer(array('formulaire'=>$id_formulaire), array('auteur'=>$id_auteur));
-                               }
-                       }
-                       $retours['redirect'] = generer_url_ecrire('formulaire', "id_formulaire=$id_formulaire");
-               }
-       }
-
-       return $retours;
-}
diff --git a/www/plugins/formidable/formulaires/inc-formidable-boutons.html b/www/plugins/formidable/formulaires/inc-formidable-boutons.html
deleted file mode 100644 (file)
index 5381699..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<p class='boutons'>
-    <span class='image_loading'></span>
-    <input type='submit' class='submit' value='<:bouton_valider:>' />
-</p>
diff --git a/www/plugins/formidable/formulaires/inc-formidable-unicite.html b/www/plugins/formidable/formulaires/inc-formidable-unicite.html
deleted file mode 100644 (file)
index c70f5cb..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#SET{name,unicite}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-<B_champs_unicite>
-<li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
-       <label for="#GET{name}"><:formidable:editer_unicite_label:></label>[
-       <span class='erreur_message'>(#GET{erreurs})</span>
-       ]<p class="explication"><:formidable:editer_unicite_explication:></p>
-       <select name="#GET{name}" class="select" id="#GET{name}">
-               <option value=""></option>
-               <BOUCLE_champs_unicite(POUR){tableau #ENV*{saisies}|unserialize}>
-               <option value="[(#VALEUR|table_valeur{options}|table_valeur{nom})]"[(#ENV{unicite,#GET{defaut}}|=={#VALEUR|table_valeur{options}|table_valeur{nom}}|oui)selected="selected"]>[(#VALEUR|table_valeur{options}|table_valeur{label})]</option>
-               </BOUCLE_champs_unicite>
-       </select>
-</li>
-#SET{name,message_erreur_unicite}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
-<li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
-       <label for="#GET{name}"><:formidable:editer_message_erreur_unicite_label:></label>[
-       <span class='erreur_message'>(#GET{erreurs})</span>
-       ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
-       <p class="explication"><:formidable:editer_message_erreur_unicite_explication:></p>
-</li>
-</B_champs_unicite>
diff --git a/www/plugins/formidable/genie/formidable_effacer_enregistrements.php b/www/plugins/formidable/genie/formidable_effacer_enregistrements.php
deleted file mode 100644 (file)
index 4adc61c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/formidable_fichiers');
-/**
- * Effacer régulièrement les enregistrements obsolètes
-**/
-function genie_formidable_effacer_enregistrements($t) {
-       $res = sql_select('id_formulaire,traitements', 'spip_formulaires');
-       while ($result = sql_fetch($res)) {
-               $traitements = unserialize($result['traitements']);
-               $id_formulaire = $result['id_formulaire'];
-               if (isset($traitements['enregistrement']['effacement'])
-                       and $traitements['enregistrement']['effacement'] == 'on'
-                       and isset($traitements['enregistrement']['effacement_delai'])
-               ) {
-                       $delai = intval($traitements['enregistrement']['effacement_delai']);
-                       if ($delai > 0) {
-                               // si on a bien configuré un délai
-                               $asupprimer = sql_select(
-                                       'id_formulaires_reponse',
-                                       'spip_formulaires_reponses',
-                                       "DATE_SUB(CURDATE(), INTERVAL $delai DAY) > maj
-                                               AND id_formulaire = $id_formulaire"
-                               ); // on utilise la date de maj, ce qui fait que lorsqu'une réponse est modifiée, l'échéance de la suppression est prorogée
-                               while ($reponse = sql_fetch($asupprimer)) {
-                                       $id_formulaires_reponse = $reponse['id_formulaires_reponse'];
-
-                                       formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse); // effacer d'abord les fichiers
-                                       sql_delete('spip_formulaires_reponses', "id_formulaires_reponse=$id_formulaires_reponse");// les réponses
-                                       sql_delete('spip_formulaires_reponses_champs', "id_formulaires_reponse=$id_formulaires_reponse");//les champs correspondant
-                                       spip_log("Effacement de la réponse $$id_formulaires_reponse du form $id_formulaire car antérieur à $delai jours");
-                               }
-                       }
-               }
-       }
-       return 1;
-}
diff --git a/www/plugins/formidable/genie/formidable_effacer_fichiers_email.php b/www/plugins/formidable/genie/formidable_effacer_fichiers_email.php
deleted file mode 100644 (file)
index d1fb281..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-include_spip('inc/formidable_fichiers');
-/**
- * Effacer régulièrement les fichiers des réponses envoyées par email
-**/
-function genie_formidable_effacer_fichiers_email($t) {
-       return formidable_effacer_fichiers_email();
-}
diff --git a/www/plugins/formidable/genie/formidable_hasher_ip.php b/www/plugins/formidable/genie/formidable_hasher_ip.php
deleted file mode 100644 (file)
index 215acb4..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-/**
-* CNIL -- Informatique et libertes
-*
-* masquer le numero IP des vieilles réponses
-* date de reference = 4 mois
-* definir a 0 pour desactiver
-* même valeur par défaut que pour les forums
-**/
-function genie_formidable_hasher_ip_dist($t) {
-       if (!defined('_CNIL_PERIODE')) {
-               define('_CNIL_PERIODE', 3600*24*31*4);
-       }
-
-       if (_CNIL_PERIODE) {
-               $critere_cnil = 'date<"'.date('Y-m-d', time()-_CNIL_PERIODE).'"'
-                       . ' AND statut != "spam"'
-                       . ' AND (ip LIKE "%.%" OR ip LIKE "%:%")'; # ipv4 ou ipv6
-               $c = sql_countsel('spip_formulaires_reponses', $critere_cnil);
-               if ($c>0) {
-                       spip_log("CNIL: masquer IP de $c réponses anciennes à formidable", 'formidable');
-                       sql_update('spip_formulaires_reponses', array('ip' => 'MD5(ip)'), $critere_cnil);
-                       return $c;
-               }
-       }
-       return 0;
-}
diff --git a/www/plugins/formidable/http/collectionjson/formulaires-ressource.html b/www/plugins/formidable/http/collectionjson/formulaires-ressource.html
deleted file mode 100644 (file)
index 35f9e07..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{statut?}>
-{
-       "collection": {
-               "version": "1.0",
-               "href": "[(#VAL{&}|self|url_absolue)]",
-               "items": [
-                       <INCLURE{fond=http/collectionjson/inc-formulaire, id_formulaire, mode, url_self=#SELF}>
-               ]
-       }
-}
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/http/collectionjson/formulaires.html b/www/plugins/formidable/http/collectionjson/formulaires.html
deleted file mode 100644 (file)
index a0e87e9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-[(#SET{defaut_tri,#ARRAY{
-       titre,1,
-       date_creation,#ENV{date_sens,-1},
-       maj,#ENV{date_sens,-1},
-       id_formulaire,1,
-       points,-1,
-}})]
-
-{
-       "collection": {
-               "version": "1.0",
-               "href": "[(#URL_SITE_SPIP|concat{/http.api/collectionjson/formulaires}|url_absolue)]",
-               "title": "#NOM_SITE_SPIP - <:formidable:bouton_formulaires:>",
-               "updated": "[(#DATE|date_iso)]"
-               <B_formulaires>
-               ,
-               "links": [
-                       {"rel":"self", "type":"application/json", "href":"[(#VAL{&}|self|url_absolue)]"}[,
-                       (#PAGINATION{collectionjson})]
-               ],
-               "totalResults": #GRAND_TOTAL,
-               "startIndex": #ENV{debut_formulaires,0},
-               "itemsPerPage": #ENV{pagination,100},
-               "items": [
-               <BOUCLE_formulaires(FORMULAIRES formulaires_liens)
-                       {statut IN #ENV{statut,#LISTE{publie}}}
-                       {id_auteur?}
-                       {formulaires_liens.objet?}{formulaires_liens.id_objet?}
-                       {recherche?}
-                       {tri #ENV{par,#ENV{recherche}|?{points,date_creation}},#GET{defaut_tri}}
-                       {pagination #ENV{pagination,100}}{","}
-               >
-                       <INCLURE{fond=http/collectionjson/inc-formulaire, id_formulaire, mode, objet=#ENV{objet}, id_objet=#ENV{id_objet}, url_self=#SELF}>
-               </BOUCLE_formulaires>
-               ]
-               </B_formulaires>
-       }
-}
diff --git a/www/plugins/formidable/http/collectionjson/formulaires_reponses-ressource.html b/www/plugins/formidable/http/collectionjson/formulaires_reponses-ressource.html
deleted file mode 100644 (file)
index 2b60e1d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){id_formulaires_reponse}{statut?}>
-{
-       "collection": {
-               "version": "1.0",
-               "href": "[(#VAL{&}|self|url_absolue)]",
-               "items": [
-                       <INCLURE{fond=http/collectionjson/inc-formulaires_reponse, id_formulaires_reponse, mode, url_self=#SELF}>
-               ]
-       }
-}
-</BOUCLE_formulaires_reponse>
diff --git a/www/plugins/formidable/http/collectionjson/formulaires_reponses.html b/www/plugins/formidable/http/collectionjson/formulaires_reponses.html
deleted file mode 100644 (file)
index 8d02f0f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-[(#SET{defaut_tri,#ARRAY{
-       titre,1,
-       date,#ENV{date_sens,-1},
-       maj,#ENV{date_sens,-1},
-       id_formulaires_reponse,1,
-       points,-1,
-}})]
-
-{
-       "collection": {
-               "version": "1.0",
-               "href": "[(#URL_SITE_SPIP|concat{/http.api/collectionjson/formulaires_reponses}|url_absolue)]",
-               "title": "#NOM_SITE_SPIP - <:formidable:reponses_liste:>",
-               "updated": "[(#DATE|date_iso)]"
-               <B_formulaires_reponses>
-               ,
-               "links": [
-                       {"rel":"self", "type":"application/json", "href":"[(#VAL{&}|self|url_absolue)]"}[,
-                       (#PAGINATION{collectionjson})]
-               ],
-               "totalResults": #GRAND_TOTAL,
-               "startIndex": #ENV{debut_formulaires_reponses,0},
-               "itemsPerPage": #ENV{pagination,100},
-               "items": [
-               <BOUCLE_formulaires_reponses(FORMULAIRES_REPONSES)
-                       {id_formulaire?}
-                       {statut IN #ENV{statut,#LISTE{publie}}}
-                       {id_auteur?}
-                       {cookie?}
-                       {recherche?}
-                       {tri #ENV{par,#ENV{recherche}|?{points,date}},#GET{defaut_tri}}
-                       {pagination #ENV{pagination,100}}{","}
-               >
-                       <INCLURE{fond=http/collectionjson/inc-formulaires_reponse, id_formulaires_reponse, mode, url_self=#SELF}>
-               </BOUCLE_formulaires_reponses>
-               ]
-               </B_formulaires_reponses>
-       }
-}
diff --git a/www/plugins/formidable/http/collectionjson/formulaires_reponses.php b/www/plugins/formidable/http/collectionjson/formulaires_reponses.php
deleted file mode 100644 (file)
index 46440ea..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Répondre à un formulaire Formidable en Collection+JSON
- *
- * Il faut avoir un id_formulaire et pouvoir y répondre.
- *
- * @param Request $requete
- * @param Response $reponse
- * @return void
- */
-function http_collectionjson_formulaires_reponses_post_collection_dist($requete, $reponse) {
-       include_spip('inc/session');
-       include_spip('inc/autoriser');
-       $fonction_erreur = charger_fonction('erreur', 'http/collectionjson/');
-
-       // On teste si on a bien du contenu au bon format
-       if (
-               $contenu = $requete->getContent()
-               and $json = json_decode($contenu, true)
-               and is_array($json)
-               and isset($json['collection']['items'][0]['data'])
-               and $data = $json['collection']['items'][0]['data']
-               and is_array($data)
-       ) {
-               // Pour chaque champ envoyé, ça dépend ce que c'est
-               foreach ($data as $champ) {
-                       if (
-                               isset($champ['name'])
-                               and isset($champ['value'])
-                       ) {
-                               // Si c'est id_formulaire, on le garde de côté pour l'autorisation et pour le traitement
-                               if ($champ['name'] == 'id_formulaire') {
-                                       $id_formulaire = intval($champ['value']);
-                               }
-                               // Sinon on le met dans le post pour verifier/traiter
-                               set_request($champ['name'], $champ['value']);
-                       }
-               }
-
-               // On teste l'autorisation
-               if ($id_formulaire > 0 and autoriser('repondre', 'formulaire', $id_formulaire)) {
-                       // On vérifie maintenant les erreurs
-                       $formidable_verifier = charger_fonction('verifier', 'formulaires/formidable');
-                       $erreurs = $formidable_verifier($id_formulaire);
-
-                       // On passe les erreurs dans le pipeline "verifier" (par exemple pour Saisies)
-                       $erreurs = pipeline('formulaire_verifier', array(
-                               'args' => array(
-                                       'form' => 'formidable',
-                                       'args' => array($id_formulaire),
-                               ),
-                               'data' => $erreurs,
-                       ));
-
-                       // S'il y a des erreurs, on va générer un JSON les listant
-                       if ($erreurs) {
-                               $reponse->setStatusCode(400);
-                               $reponse->headers->set('Content-Type', 'application/json');
-                               $reponse->setCharset('utf-8');
-
-                               $json_reponse = array(
-                                       'collection' => array(
-                                               'version' => '1.0',
-                                               'href' => url_absolue(self('&')),
-                                               'error' => array(
-                                                       'title' => _T('erreur'),
-                                                       'code' => 400,
-                                               ),
-                                               'errors' => array(),
-                                       ),
-                               );
-
-                               foreach ($erreurs as $nom => $erreur) {
-                                       $json_reponse['collection']['errors'][$nom] = array(
-                                               'title' => $erreur,
-                                               'code' => 400,
-                                       );
-                               }
-                               $reponse->setContent(json_encode($json_reponse));
-                       } else {
-                               // Sinon on continue le traitement
-                               // On lance le traitement de la réponse
-                               $formidable_traiter = charger_fonction('traiter', 'formulaires/formidable', true);
-                               $retours_formidable = $formidable_traiter($id_formulaire);
-
-                               // On passe dans le pipeline "traiter" (par exemple pour les quizz)
-                               $retours_formidable = pipeline('formulaire_traiter', array(
-                                       'args' => array(
-                                               'form' => 'formidable',
-                                               'args' => array($id_formulaire),
-                                       ),
-                                       'data' => $retours_formidable,
-                               ));
-
-                               // Si à la fin on a bien un identifiant de réponse
-                               if ($id_formulaires_reponse = $retours_formidable['id_formulaires_reponse']) {
-                                       // On va cherche la fonction qui génère la vue d'une ressource
-                                       if ($fonction_ressource = charger_fonction('get_ressource', 'http/collectionjson/', true)) {
-                                               // On ajoute à la requête, l'identifiant de la nouvelle ressource
-                                               $requete->attributes->set('ressource', $id_formulaires_reponse);
-                                               $reponse = $fonction_ressource($requete, $reponse);
-
-                                               // C'est une création, on renvoie 201
-                                               $reponse->setStatusCode(201);
-                                       }
-                               } else {
-                                       // Sinon l'enregistrement n'a pas fonctionné donc erreur
-                                       // (TODO : il faudrait les chaînes pour les 5XX dans le plugin HTTP)
-                                       $reponse = $fonction_erreur(500, $requete, $reponse);
-                               }
-                       }
-               } else {
-                       // Sinon pas le droit
-                       $reponse = $fonction_erreur(403, $requete, $reponse);
-               }
-       } else {
-               // Sinon on ne comprend pas ce qui se passe
-               $reponse = $fonction_erreur(415, $requete, $reponse);
-       }
-
-       return $reponse;
-}
diff --git a/www/plugins/formidable/http/collectionjson/inc-formulaire.html b/www/plugins/formidable/http/collectionjson/inc-formulaire.html
deleted file mode 100644 (file)
index 58e222d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{statut?}>
-[(#SET{item, [(#ARRAY{
-       href, [(#URL_SITE_SPIP|concat{/http.api/collectionjson/formulaires/#ID_FORMULAIRE})],
-       published, [(#DATE_CREATION|date_iso)],
-       updated, [(#MAJ|date_iso)],
-       links, [(#LISTE{
-               [(#ARRAY{rel,edit, type,application/json, href,[(#URL_SITE_SPIP|concat{/http.api/collectionjson/formulaires/#ID_FORMULAIRE})]})],
-       })],
-       data, [(#LISTE{
-               #ARRAY{name,id_formulaire, value,#ID_FORMULAIRE},
-               #ARRAY{name,identifiant, value,#IDENTIFIANT},
-               #ARRAY{name,statut, value,#STATUT},
-               #ARRAY{name,date_creation, value,#DATE_CREATION},
-               #ARRAY{name,maj, value,#MAJ},
-       })],
-})]})]
-
-[(#REM) Si on trouve un logo, on ajoute un lien "preview" ]
-#SET{logo, #LOGO_FORMULAIRE}
-[(#GET{logo}|oui)
-[(#SET{item, [(#GET{item}|push_table_valeur{links, #ARRAY{rel,preview, href,#GET{logo}|image_reduire{1200,0}|extraire_attribut{src}|url_absolue}})]})]
-]
-
-[(#REM) Des champs au contenu interprété en HTML ]
-[(#ENV{mode}|!={raw}|oui)
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,titre, value,#TITRE, prompt,<:info_titre:>})]})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,descriptif, value,#DESCRIPTIF, prompt,<:info_descriptif:>})], #DESCRIPTIF})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,message_retour, value,[(#MESSAGE_RETOUR|propre)], prompt,<:formidable:editer_message_ok:>})], #MESSAGE_RETOUR})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,saisies, array,[(#SAISIES|unserialize)], prompt,<:formidable:champs:>})], #SAISIES})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,traitements, array,[(#TRAITEMENTS|unserialize)], prompt,<:formidable:voir_traitements:>})], #TRAITEMENTS})]})]
-]
-
-[(#REM) Des champs au contenu BRUT qui peut être modifié ]
-[(#ENV{mode}|=={raw}|oui)
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,titre, value,#TITRE*, prompt,<:info_titre:>})]})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,descriptif, value,#DESCRIPTIF*, prompt,<:info_descriptif:>})], #DESCRIPTIF*})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,message_retour, value,#MESSAGE_RETOUR*, prompt,<:formidable:editer_message_ok:>})], #MESSAGE_RETOUR})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,saisies, value,#SAISIES*, prompt,<:formidable:champs:>})], #SAISIES})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,traitements, value,#TRAITEMENTS*, prompt,<:formidable:voir_traitements:>})], #TRAITEMENTS})]})]
-]
-
-[(#GET{item}|json_encode)]
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/http/collectionjson/inc-formulaires_reponse.html b/www/plugins/formidable/http/collectionjson/inc-formulaires_reponse.html
deleted file mode 100644 (file)
index 831dcb2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){id_formulaires_reponse}{statut?}>
-[(#SET{item, [(#ARRAY{
-       href, [(#URL_SITE_SPIP|concat{/http.api/collectionjson/formulaires_reponses/#ID_FORMULAIRES_REPONSE})],
-       published, [(#DATE|date_iso)],
-       updated, [(#MAJ|date_iso)],
-       links, [(#LISTE{
-               [(#ARRAY{rel,edit, type,application/json, href,[(#URL_SITE_SPIP|concat{/http.api/collectionjson/formulaires_reponses/#ID_FORMULAIRES_REPONSE})]})],
-               [(#ARRAY{rel,up, type,application/json, href,[(#URL_SITE_SPIP|concat{/http.api/collectionjson/formulaires/#ID_FORMULAIRE})]})],
-       })],
-       data, [(#LISTE{
-               #ARRAY{name,id_formulaires_reponse, value,#ID_FORMULAIRES_REPONSE},
-               #ARRAY{name,statut, value,#STATUT},
-               #ARRAY{name,date, value,#DATE},
-               #ARRAY{name,maj, value,#MAJ},
-       })],
-})]})]
-
-[(#REM) Si on a le plugin de quizz ]
-[(#PLUGIN{formidable_quizz}|oui)
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,quizz_score, value,#QUIZZ_SCORE, prompt,<:formidable_quizz:resultats_score_label:>})]})]})]
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,quizz_total, value,#QUIZZ_TOTAL, prompt,<:formidable_quizz:resultats_total_label:>})]})]})]
-]
-
-[(#REM) On va chercher chaque champ ]
-<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
-[(#ENV{mode}|!={raw}|oui)
-       #SET{valeur, #ID_FORMULAIRES_REPONSE|calculer_voir_reponse{#ID_FORMULAIRE, #NOM, valeur_uniquement}|trim}
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,#NOM, value,#GET{valeur}})]})]})]
-]
-[(#ENV{mode}|=={raw}|oui)
-       [(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,#NOM, value,#VALEUR})]})]})]
-]
-</BOUCLE_champs>
-
-[(#GET{item}|json_encode)]
-</BOUCLE_formulaires_reponse>
diff --git a/www/plugins/formidable/icones_barre/formulaire.png b/www/plugins/formidable/icones_barre/formulaire.png
deleted file mode 100644 (file)
index ef6eae5..0000000
Binary files a/www/plugins/formidable/icones_barre/formulaire.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formidable-128.png b/www/plugins/formidable/images/formidable-128.png
deleted file mode 100644 (file)
index f30905e..0000000
Binary files a/www/plugins/formidable/images/formidable-128.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formidable-24.png b/www/plugins/formidable/images/formidable-24.png
deleted file mode 100644 (file)
index 50510d0..0000000
Binary files a/www/plugins/formidable/images/formidable-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formidable-64.png b/www/plugins/formidable/images/formidable-64.png
deleted file mode 100644 (file)
index 7093aeb..0000000
Binary files a/www/plugins/formidable/images/formidable-64.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formidable.svg b/www/plugins/formidable/images/formidable.svg
deleted file mode 100644 (file)
index 5baf77e..0000000
+++ /dev/null
@@ -1,1104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg:svg
-   xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg9991"
-   sodipodi:version="0.32"
-   inkscape:version="0.47pre4 r22446"
-   sodipodi:docname="formidable.svg"
-   inkscape:export-filename="/home/vincent/public_html/collectivite/plugins/formidable/images/formidable-128.png"
-   inkscape:export-xdpi="180"
-   inkscape:export-ydpi="180"
-   version="1.1">
-  <svg:defs
-     id="defs9993">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 32 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="64 : 32 : 1"
-       inkscape:persp3d-origin="32 : 21.333333 : 1"
-       id="perspective227" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       id="linearGradient9806">
-      <svg:stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop9808" />
-      <svg:stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop9810" />
-    </svg:linearGradient>
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient9806"
-       id="radialGradient9812"
-       cx="24.35099"
-       cy="41.591846"
-       fx="24.35099"
-       fy="41.591846"
-       r="19.136078"
-       gradientTransform="matrix(1,0,0,0.242494,0,31.50606)"
-       gradientUnits="userSpaceOnUse" />
-    <svg:linearGradient
-       id="XMLID_3_"
-       gradientUnits="userSpaceOnUse"
-       x1="26.2524"
-       y1="34.8477"
-       x2="26.2524"
-       y2="32.5825">
-      <svg:stop
-         offset="0"
-         style="stop-color:#EF2929"
-         id="stop227" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#A40000"
-         id="stop229" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="path2756_1_"
-       gradientUnits="userSpaceOnUse"
-       x1="-4.2974"
-       y1="72.0352"
-       x2="-4.2974"
-       y2="69.3176"
-       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#555753"
-         id="stop215" />
-      <svg:stop
-         offset="0.1275"
-         style="stop-color:#484C4A"
-         id="stop217" />
-      <svg:stop
-         offset="0.3459"
-         style="stop-color:#393E3F"
-         id="stop219" />
-      <svg:stop
-         offset="0.6043"
-         style="stop-color:#313638"
-         id="stop221" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#2E3436"
-         id="stop223" />
-    </svg:linearGradient>
-    <svg:radialGradient
-       id="path2327_1_"
-       cx="169.5005"
-       cy="-40.2339"
-       r="9.5353"
-       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
-       gradientUnits="userSpaceOnUse">
-      <svg:stop
-         offset="0"
-         style="stop-color:#E9B96E"
-         id="stop199" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#C17D11"
-         id="stop201" />
-    </svg:radialGradient>
-    <svg:linearGradient
-       id="XMLID_2_"
-       gradientUnits="userSpaceOnUse"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646"
-       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#C17D11"
-         id="stop186" />
-      <svg:stop
-         offset="0.2735"
-         style="stop-color:#BD7A10"
-         id="stop188" />
-      <svg:stop
-         offset="0.5694"
-         style="stop-color:#B0700C"
-         id="stop190" />
-      <svg:stop
-         offset="0.8747"
-         style="stop-color:#9A6105"
-         id="stop192" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#8F5902"
-         id="stop194" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="XMLID_1_"
-       gradientUnits="userSpaceOnUse"
-       x1="-25.4316"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493"
-       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#C17D11"
-         id="stop173" />
-      <svg:stop
-         offset="0.2735"
-         style="stop-color:#BD7A10"
-         id="stop175" />
-      <svg:stop
-         offset="0.5694"
-         style="stop-color:#B0700C"
-         id="stop177" />
-      <svg:stop
-         offset="0.8747"
-         style="stop-color:#9A6105"
-         id="stop179" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#8F5902"
-         id="stop181" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="path4173_1_"
-       gradientUnits="userSpaceOnUse"
-       x1="65.4673"
-       y1="21.7046"
-       x2="65.4673"
-       y2="15.4519"
-       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#FFFFFF"
-         id="stop163" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#C9C9C9"
-         id="stop165" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="path29441_5_"
-       gradientUnits="userSpaceOnUse"
-       x1="-764.8428"
-       y1="70.6904"
-       x2="-768.0942"
-       y2="65.1441"
-       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#F5F5F5"
-         id="stop80" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#E9E9E9"
-         id="stop82" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="path29441_4_"
-       gradientUnits="userSpaceOnUse"
-       x1="-776.0811"
-       y1="62.5264"
-       x2="-779.3325"
-       y2="56.9801"
-       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#F5F5F5"
-         id="stop71" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#E9E9E9"
-         id="stop73" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="rect29408_3_"
-       gradientUnits="userSpaceOnUse"
-       x1="35.4419"
-       y1="63.6533"
-       x2="40.9202"
-       y2="57.2008"
-       gradientTransform="matrix(1.0076,0,0,-0.9876,-21.8209,64.5593)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#F5F5F5"
-         id="stop62" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#E9E9E9"
-         id="stop64" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="path29441_3_"
-       gradientUnits="userSpaceOnUse"
-       x1="-777.9102"
-       y1="48.9697"
-       x2="-781.1614"
-       y2="43.4239"
-       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#F5F5F5"
-         id="stop53" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#E9E9E9"
-         id="stop55" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="rect29408_2_"
-       gradientUnits="userSpaceOnUse"
-       x1="29.3257"
-       y1="53.0791"
-       x2="34.8039"
-       y2="46.6266"
-       gradientTransform="matrix(1.0076,0,0,-0.9876,-21.8209,64.5593)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#F5F5F5"
-         id="stop44" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#E9E9E9"
-         id="stop46" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="path4370_1_"
-       gradientUnits="userSpaceOnUse"
-       x1="-695.4531"
-       y1="-64.7212"
-       x2="-696.7315"
-       y2="-64.0704"
-       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#000000"
-         id="stop36" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#000000"
-         id="stop38" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="path4368_1_"
-       gradientUnits="userSpaceOnUse"
-       x1="95.3657"
-       y1="95.0371"
-       x2="97.3309"
-       y2="94.6373"
-       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#000000"
-         id="stop30" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#000000"
-         id="stop32" />
-    </svg:linearGradient>
-    <svg:radialGradient
-       id="path2329_1_"
-       cx="46.8472"
-       cy="-100.144"
-       r="13.5656"
-       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
-       gradientUnits="userSpaceOnUse">
-      <svg:stop
-         offset="0"
-         style="stop-color:#729FCF"
-         id="stop23" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#3465A4"
-         id="stop25" />
-    </svg:radialGradient>
-    <svg:radialGradient
-       id="XMLID_5_"
-       cx="23.436"
-       cy="33.9185"
-       r="19.7892"
-       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
-       gradientUnits="userSpaceOnUse">
-      <svg:stop
-         offset="0"
-         style="stop-color:#E9B96E"
-         id="stop14" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#C17D11"
-         id="stop16" />
-    </svg:radialGradient>
-    <svg:foreignObject
-       id="foreignObject7"
-       height="1"
-       width="1"
-       y="0"
-       x="0"
-       requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
-      <i:pgfRef
-         xlink:href="#adobe_illustrator_pgf" />
-    </svg:foreignObject>
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_5_"
-       id="radialGradient266885"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
-       cx="23.436"
-       cy="33.9185"
-       r="19.7892" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#path2329_1_"
-       id="radialGradient266887"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
-       cx="46.8472"
-       cy="-100.144"
-       r="13.5656" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path4368_1_"
-       id="linearGradient266889"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)"
-       x1="95.3657"
-       y1="95.0371"
-       x2="97.3309"
-       y2="94.6373" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path4370_1_"
-       id="linearGradient266891"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)"
-       x1="-695.4531"
-       y1="-64.7212"
-       x2="-696.7315"
-       y2="-64.0704" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path4173_1_"
-       id="linearGradient266903"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)"
-       x1="65.4673"
-       y1="21.7046"
-       x2="65.4673"
-       y2="15.4519" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient266905"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
-       x1="-25.4316"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient266907"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#path2327_1_"
-       id="radialGradient266909"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
-       cx="169.5005"
-       cy="-40.2339"
-       r="9.5353" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path2756_1_"
-       id="linearGradient266911"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
-       x1="-4.2974"
-       y1="72.0352"
-       x2="-4.2974"
-       y2="69.3176" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient266913"
-       gradientUnits="userSpaceOnUse"
-       x1="26.2524"
-       y1="34.8477"
-       x2="26.2524"
-       y2="32.5825" />
-    <svg:radialGradient
-       id="radialGradient2174"
-       cx="46.847198"
-       cy="-100.144"
-       r="13.5656"
-       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
-       gradientUnits="userSpaceOnUse">
-      <svg:stop
-         offset="0"
-         style="stop-color:#729FCF"
-         id="stop2176" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#3465A4"
-         id="stop2178" />
-    </svg:radialGradient>
-    <svg:linearGradient
-       id="linearGradient2182"
-       gradientUnits="userSpaceOnUse"
-       x1="95.3657"
-       y1="95.037102"
-       x2="97.330902"
-       y2="94.637299"
-       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#000000"
-         id="stop2184" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#000000"
-         id="stop2186" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="linearGradient2189"
-       gradientUnits="userSpaceOnUse"
-       x1="-695.45312"
-       y1="-64.721199"
-       x2="-696.73151"
-       y2="-64.070396"
-       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#000000"
-         id="stop2191" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#000000"
-         id="stop2193" />
-    </svg:linearGradient>
-    <namedview
-       zoom="9.8994949"
-       pageopacity="0.0"
-       pageshadow="2"
-       showpageshadow="false"
-       borderopacity="0.17254902"
-       pagecolor="#ffffff"
-       bordercolor="#666666"
-       cy="24.622653"
-       showgrid="false"
-       current-layer="layer1"
-       cx="25.799661"
-       window-y="167"
-       document-units="px"
-       window-width="770"
-       grid-bbox="true"
-       window-height="695"
-       window-x="472" />
-    <svg:linearGradient
-       id="linearGradient2280"
-       gradientUnits="userSpaceOnUse"
-       x1="65.4673"
-       y1="21.704599"
-       x2="65.4673"
-       y2="15.4519"
-       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#FFFFFF"
-         id="stop2282" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#C9C9C9"
-         id="stop2284" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path4173_1_"
-       id="linearGradient266966"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.7587571,0,0,-1.7587571,-73.922013,79.170666)"
-       x1="65.4673"
-       y1="21.7046"
-       x2="65.4673"
-       y2="15.4519" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path4370_1_"
-       id="linearGradient267038"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.7195361,0.36951432,-0.36951432,-1.7195361,-1171.8999,198.77048)"
-       x1="-695.4531"
-       y1="-64.7212"
-       x2="-696.7315"
-       y2="-64.0704" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path4368_1_"
-       id="linearGradient267041"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.7295622,0.31939001,0.31939001,-1.7295622,-181.4823,185.09853)"
-       x1="95.3657"
-       y1="95.0371"
-       x2="97.3309"
-       y2="94.6373" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#path2329_1_"
-       id="radialGradient267045"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.758757,0,0,-1.1992961,-52.081768,-80.225303)"
-       cx="46.8472"
-       cy="-100.144"
-       r="13.5656" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_5_"
-       id="radialGradient267053"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
-       cx="23.436"
-       cy="33.9185"
-       r="19.7892" />
-    <svg:radialGradient
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
-       r="19.7892"
-       cy="33.918499"
-       cx="23.436001"
-       id="radialGradient2166">
-      <svg:stop
-         id="stop2168"
-         style="stop-color:#E9B96E"
-         offset="0" />
-      <svg:stop
-         id="stop2170"
-         style="stop-color:#C17D11"
-         offset="1" />
-    </svg:radialGradient>
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient267061"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
-       x1="-25.4316"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient267063"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#path2327_1_"
-       id="radialGradient267065"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
-       cx="169.5005"
-       cy="-40.2339"
-       r="9.5353" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path2756_1_"
-       id="linearGradient267067"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
-       x1="-4.2974"
-       y1="72.0352"
-       x2="-4.2974"
-       y2="69.3176" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient267069"
-       gradientUnits="userSpaceOnUse"
-       x1="26.2524"
-       y1="34.8477"
-       x2="26.2524"
-       y2="32.5825" />
-    <svg:radialGradient
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
-       r="9.5353003"
-       cy="-40.233898"
-       cx="169.5005"
-       id="radialGradient2315">
-      <svg:stop
-         id="stop2317"
-         style="stop-color:#E9B96E"
-         offset="0" />
-      <svg:stop
-         id="stop2319"
-         style="stop-color:#C17D11"
-         offset="1" />
-    </svg:radialGradient>
-    <svg:linearGradient
-       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
-       y2="69.317596"
-       x2="-4.2974"
-       y1="72.035202"
-       x1="-4.2974"
-       gradientUnits="userSpaceOnUse"
-       id="linearGradient2329">
-      <svg:stop
-         id="stop2331"
-         style="stop-color:#555753"
-         offset="0" />
-      <svg:stop
-         id="stop2333"
-         style="stop-color:#484C4A"
-         offset="0.1275" />
-      <svg:stop
-         id="stop2335"
-         style="stop-color:#393E3F"
-         offset="0.3459" />
-      <svg:stop
-         id="stop2337"
-         style="stop-color:#313638"
-         offset="0.6043" />
-      <svg:stop
-         id="stop2339"
-         style="stop-color:#2E3436"
-         offset="1" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       y2="32.5825"
-       x2="26.252399"
-       y1="34.847698"
-       x1="26.252399"
-       gradientUnits="userSpaceOnUse"
-       id="linearGradient2342">
-      <svg:stop
-         id="stop2344"
-         style="stop-color:#EF2929"
-         offset="0" />
-      <svg:stop
-         id="stop2346"
-         style="stop-color:#A40000"
-         offset="1" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient267084"
-       gradientUnits="userSpaceOnUse"
-       x1="26.2524"
-       y1="34.8477"
-       x2="26.2524"
-       y2="32.5825"
-       gradientTransform="matrix(2.7108449,0,0,2.7108449,-38.9913,-41.797214)" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path2756_1_"
-       id="linearGradient267087"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.575138,269.19554)"
-       x1="-4.2974"
-       y1="72.0352"
-       x2="-4.2974"
-       y2="69.3176" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#path2327_1_"
-       id="radialGradient267097"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.697,-58.147403)"
-       cx="169.5005"
-       cy="-40.2339"
-       r="9.5353" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient267114"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
-       x1="-25.4316"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient267116"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646" />
-    <svg:linearGradient
-       id="linearGradient2289"
-       gradientUnits="userSpaceOnUse"
-       x1="-25.431601"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493"
-       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#C17D11"
-         id="stop2291" />
-      <svg:stop
-         offset="0.2735"
-         style="stop-color:#BD7A10"
-         id="stop2293" />
-      <svg:stop
-         offset="0.5694"
-         style="stop-color:#B0700C"
-         id="stop2295" />
-      <svg:stop
-         offset="0.8747"
-         style="stop-color:#9A6105"
-         id="stop2297" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#8F5902"
-         id="stop2299" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       id="linearGradient2302"
-       gradientUnits="userSpaceOnUse"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646"
-       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)">
-      <svg:stop
-         offset="0"
-         style="stop-color:#C17D11"
-         id="stop2304" />
-      <svg:stop
-         offset="0.2735"
-         style="stop-color:#BD7A10"
-         id="stop2306" />
-      <svg:stop
-         offset="0.5694"
-         style="stop-color:#B0700C"
-         id="stop2308" />
-      <svg:stop
-         offset="0.8747"
-         style="stop-color:#9A6105"
-         id="stop2310" />
-      <svg:stop
-         offset="1"
-         style="stop-color:#8F5902"
-         id="stop2312" />
-    </svg:linearGradient>
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient267131"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.339053,25.517944)"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient267134"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.74292,25.517944)"
-       x1="-25.4316"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493" />
-    <inkscape:perspective
-       id="perspective3062"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective3076"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective3090"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective3104"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective3118"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient3017"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.74292,25.517944)"
-       x1="-25.4316"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient3019"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.339053,25.517944)"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#path2327_1_"
-       id="radialGradient3021"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.697,-58.147403)"
-       cx="169.5005"
-       cy="-40.2339"
-       r="9.5353" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path2756_1_"
-       id="linearGradient3023"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.575138,269.19554)"
-       x1="-4.2974"
-       y1="72.0352"
-       x2="-4.2974"
-       y2="69.3176" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient3025"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7108449,0,0,2.7108449,-38.9913,-41.797214)"
-       x1="26.2524"
-       y1="34.8477"
-       x2="26.2524"
-       y2="32.5825" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient3030"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7108449,0,0,2.7108449,-39.169171,-41.746948)"
-       x1="26.2524"
-       y1="34.8477"
-       x2="26.2524"
-       y2="32.5825" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#path2756_1_"
-       id="linearGradient3033"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.397267,269.24581)"
-       x1="-4.2974"
-       y1="72.0352"
-       x2="-4.2974"
-       y2="69.3176" />
-    <svg:radialGradient
-       inkscape:collect="always"
-       xlink:href="#path2327_1_"
-       id="radialGradient3040"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.87487,-58.097137)"
-       cx="169.5005"
-       cy="-40.2339"
-       r="9.5353" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient3043"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.161182,25.56821)"
-       x1="-25.979"
-       y1="-10.6646"
-       x2="-18.7339"
-       y2="-10.6646" />
-    <svg:linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient3046"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.5650493,25.56821)"
-       x1="-25.4316"
-       y1="-10.5493"
-       x2="-18.1875"
-       y2="-10.5493" />
-  </svg:defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="24.999168"
-     inkscape:cy="36.55781"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="867"
-     inkscape:window-height="669"
-     inkscape:window-x="246"
-     inkscape:window-y="112"
-     inkscape:window-maximized="0" />
-  <svg:metadata
-     id="metadata9996">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </svg:metadata>
-  <svg:g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <svg:image
-       y="0.52496314"
-       x="79.286026"
-       id="image3064"
-       height="13.594464"
-       width="13.594464"
-       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-combobox.png" />
-    <svg:path
-       d="m 41.665519,9.108502 c -1.867773,3.960546 -1.612951,8.007839 0.5747,9.04338 2.187651,1.032832 5.478619,-1.341865 7.349101,-5.302413 1.867773,-3.9605434 1.612955,-8.0051252 -0.574701,-9.0406662 -2.190363,-1.032836 -5.481326,1.3391575 -7.3491,5.2996992 z"
-       id="path183"
-       style="fill:url(#linearGradient3046);stroke:#8f5902;stroke-width:2.36402392;stroke-miterlimit:4;stroke-dasharray:none" />
-    <svg:path
-       d="m 22.33177,9.1057907 c 1.867773,3.9578363 1.612957,8.0078393 -0.574698,9.0406703 -2.187649,1.03283 -5.478616,-1.341867 -7.349099,-5.302413 -1.867773,-3.9605449 -1.612953,-8.005125 0.5747,-9.0379564 2.187648,-1.032836 5.475904,1.3391576 7.349097,5.2996991 z"
-       id="path196"
-       style="fill:url(#linearGradient3043);stroke:#8f5902;stroke-width:2.36402392;stroke-miterlimit:4;stroke-dasharray:none" />
-    <svg:path
-       style="fill:url(#radialGradient3040);stroke:#8f5902;stroke-width:2.36402392;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
-       d="m 55.477275,30.694962 c 0.0055,12.968683 -10.499103,29.735262 -23.465076,29.74068 -12.963262,0.0055 -23.4840487,-16.750309 -23.4894717,-29.716283 0,-0.0081 0,-0.01641 0,-0.02447 C 8.5146273,17.726208 19.021832,7.2081281 31.990516,7.1999959 44.951062,7.1944459 55.471855,17.701807 55.477275,30.667783 c 0,0.01095 0,0.01896 0,0.02705 z"
-       cx="31.112698"
-       type="arc"
-       rx="8.6620579"
-       cy="19.008621"
-       ry="8.6620579"
-       id="path2327" />
-    <svg:path
-       style="opacity:0.12660002;fill:none;stroke:#ffffff;stroke-width:2.36402392;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
-       d="m 52.590227,30.694962 c 0.0055,11.374707 -9.211453,26.850921 -20.580738,26.856344 -11.369282,0.0056 -20.599712,-15.459951 -20.605135,-26.834653 0,-0.0081 0,-0.01356 0,-0.02158 -0.0055,-11.374705 9.211452,-20.602421 20.583451,-20.607842 11.366569,-0.0055 20.596998,9.208739 20.602422,20.586154 0,0.0081 0,0.01356 0,0.02158 z"
-       enable-background="new    "
-       cx="31.112698"
-       type="arc"
-       rx="8.6620579"
-       cy="19.008621"
-       ry="8.6620579"
-       id="path3834" />
-    <svg:g
-       id="g205"
-       transform="matrix(2.7108452,0,0,2.7108452,-39.169172,-41.746951)">
-      <svg:ellipse
-         style="fill:#8f5902"
-         sodipodi:ry="0.54100001"
-         sodipodi:rx="1.041"
-         sodipodi:cy="29.219"
-         sodipodi:cx="24.940001"
-         id="ellipse207"
-         ry="0.54100001"
-         rx="1.041"
-         cy="29.219"
-         cx="24.940001"
-         transform="matrix(0.8505,0.526,-0.526,0.8505,19.0996,-8.7499)"
-         d="m 25.981001,29.219 c 0,0.298786 -0.466072,0.541 -1.041,0.541 -0.574929,0 -1.041,-0.242214 -1.041,-0.541 0,-0.298786 0.466071,-0.541 1.041,-0.541 0.574928,0 1.041,0.242214 1.041,0.541 z" />
-      <svg:ellipse
-         style="fill:#8f5902"
-         sodipodi:ry="0.54100001"
-         sodipodi:rx="1.0420001"
-         sodipodi:cy="29.219"
-         sodipodi:cx="27.565001"
-         id="ellipse209"
-         ry="0.54100001"
-         rx="1.0420001"
-         cy="29.219"
-         cx="27.565001"
-         transform="matrix(-0.8506,0.5258,-0.5258,-0.8506,66.3766,39.5785)"
-         d="m 28.607001,29.219 c 0,0.298786 -0.46652,0.541 -1.042,0.541 -0.575481,0 -1.042001,-0.242214 -1.042001,-0.541 0,-0.298786 0.46652,-0.541 1.042001,-0.541 0.57548,0 1.042,0.242214 1.042,0.541 z" />
-    </svg:g>
-    <svg:path
-       style="fill:url(#linearGradient3033);stroke:#2e3436;stroke-width:0.67771125;stroke-linecap:round;stroke-linejoin:round"
-       d="m 22.70858,43.845272 c 0.09486,5.055726 4.209941,9.463561 9.292779,9.463561 5.07741,0 9.192476,-4.407835 9.287353,-9.463561 l -18.580132,0 0,0 z"
-       nodetypes="cscc"
-       id="path2756" />
-    <svg:path
-       style="fill:url(#linearGradient3030);stroke:#a40000;stroke-width:0.67771125;stroke-linecap:round;stroke-linejoin:round"
-       id="path231"
-       d="m 33.009791,46.447685 -1.434034,1.989758 -0.872894,-1.962651 c -2.4994,0.393071 -4.489161,1.935545 -5.109946,3.922592 1.678014,1.772894 4.003921,2.908737 6.581934,2.908737 2.399098,0 4.578618,-0.99217 6.22681,-2.564457 -0.504216,-2.201206 -2.66476,-3.930725 -5.39187,-4.293979 z" />
-    <svg:image
-       y="12.687449"
-       x="11.29285"
-       id="image3078"
-       height="25.508533"
-       width="25.508533"
-       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-checkbox.png" />
-    <svg:image
-       y="14.403575"
-       x="30.422155"
-       id="image3092"
-       height="22.700869"
-       width="22.700869"
-       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-radio.png" />
-    <svg:image
-       y="-3.2308276"
-       x="-44.282436"
-       id="image3106"
-       height="16.103373"
-       width="16.103373"
-       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-text-box.png" />
-    <svg:image
-       y="43.025379"
-       x="73.367607"
-       id="image3120"
-       height="14.591788"
-       width="14.591788"
-       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-design-mode.png" />
-  </svg:g>
-</svg:svg>
diff --git a/www/plugins/formidable/images/formulaire-24.png b/www/plugins/formidable/images/formulaire-24.png
deleted file mode 100644 (file)
index bd657c2..0000000
Binary files a/www/plugins/formidable/images/formulaire-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-action-ajouter.png b/www/plugins/formidable/images/formulaire-action-ajouter.png
deleted file mode 100644 (file)
index 5ba908a..0000000
Binary files a/www/plugins/formidable/images/formulaire-action-ajouter.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-analyse-24.png b/www/plugins/formidable/images/formulaire-analyse-24.png
deleted file mode 100644 (file)
index 2d4abfa..0000000
Binary files a/www/plugins/formidable/images/formulaire-analyse-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-config-auteurs-24.png b/www/plugins/formidable/images/formulaire-config-auteurs-24.png
deleted file mode 100644 (file)
index 0050a97..0000000
Binary files a/www/plugins/formidable/images/formulaire-config-auteurs-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-config-champs-24.png b/www/plugins/formidable/images/formulaire-config-champs-24.png
deleted file mode 100644 (file)
index f400bab..0000000
Binary files a/www/plugins/formidable/images/formulaire-config-champs-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-config-traitements-24.png b/www/plugins/formidable/images/formulaire-config-traitements-24.png
deleted file mode 100644 (file)
index d0d689d..0000000
Binary files a/www/plugins/formidable/images/formulaire-config-traitements-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-dupliquer-24.png b/www/plugins/formidable/images/formulaire-dupliquer-24.png
deleted file mode 100644 (file)
index 338618e..0000000
Binary files a/www/plugins/formidable/images/formulaire-dupliquer-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-editer-24.png b/www/plugins/formidable/images/formulaire-editer-24.png
deleted file mode 100644 (file)
index bf913de..0000000
Binary files a/www/plugins/formidable/images/formulaire-editer-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-exporter-24.png b/www/plugins/formidable/images/formulaire-exporter-24.png
deleted file mode 100644 (file)
index 9e18a29..0000000
Binary files a/www/plugins/formidable/images/formulaire-exporter-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-nouveau-48.png b/www/plugins/formidable/images/formulaire-nouveau-48.png
deleted file mode 100644 (file)
index e308819..0000000
Binary files a/www/plugins/formidable/images/formulaire-nouveau-48.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-reponse-24.png b/www/plugins/formidable/images/formulaire-reponse-24.png
deleted file mode 100644 (file)
index 4fc0f89..0000000
Binary files a/www/plugins/formidable/images/formulaire-reponse-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-reponse-supprimer-24.png b/www/plugins/formidable/images/formulaire-reponse-supprimer-24.png
deleted file mode 100644 (file)
index 000f135..0000000
Binary files a/www/plugins/formidable/images/formulaire-reponse-supprimer-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-reponses-24.png b/www/plugins/formidable/images/formulaire-reponses-24.png
deleted file mode 100644 (file)
index 26d2247..0000000
Binary files a/www/plugins/formidable/images/formulaire-reponses-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-reponses-exporter-24.png b/www/plugins/formidable/images/formulaire-reponses-exporter-24.png
deleted file mode 100644 (file)
index fc4f1ba..0000000
Binary files a/www/plugins/formidable/images/formulaire-reponses-exporter-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-reponses-supprimer-24.png b/www/plugins/formidable/images/formulaire-reponses-supprimer-24.png
deleted file mode 100644 (file)
index a8096fe..0000000
Binary files a/www/plugins/formidable/images/formulaire-reponses-supprimer-24.png and /dev/null differ
diff --git a/www/plugins/formidable/images/formulaire-supprimer-24.png b/www/plugins/formidable/images/formulaire-supprimer-24.png
deleted file mode 100644 (file)
index 8e00019..0000000
Binary files a/www/plugins/formidable/images/formulaire-supprimer-24.png and /dev/null differ
diff --git a/www/plugins/formidable/inc/formidable.php b/www/plugins/formidable/inc/formidable.php
deleted file mode 100644 (file)
index fd8e325..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/*
- * Liste tous les traitements configurables (ayant une description)
- *
- * @return array Un tableau listant des saisies et leurs options
- */
-function traitements_lister_disponibles() {
-       static $traitements = null;
-
-       if (is_null($traitements)) {
-               $traitements = array();
-               $liste = find_all_in_path('traiter/', '.+[.]yaml$');
-               ksort($liste);
-
-               if (count($liste)) {
-                       foreach ($liste as $fichier => $chemin) {
-                               $type_traitement = preg_replace(',[.]yaml$,i', '', $fichier);
-                               // On ne garde que les traitements qui ont bien la fonction
-                               if (charger_fonction($type_traitement, 'traiter', true)
-                                       and (
-                                               is_array($traitement = traitements_charger_infos($type_traitement))
-                                       )
-                               ) {
-                                       $traitements[$type_traitement] = $traitement;
-                               }
-                       }
-               }
-       }
-
-       return $traitements;
-}
-
-/**
- * Charger les informations contenues dans le yaml d'un traitement
- *
- * @param string $type_saisie Le type de la saisie
- * @return array Un tableau contenant le YAML décodé
- */
-function traitements_charger_infos($type_traitement) {
-       include_spip('inc/yaml');
-       $fichier = find_in_path("traiter/$type_traitement.yaml");
-       $traitement = yaml_decode_file($fichier);
-
-       if (is_array($traitement)) {
-               $traitement += array('titre' => '', 'description' => '', 'icone' => '');
-               $traitement['titre'] = $traitement['titre'] ? _T_ou_typo($traitement['titre']) : $type_traitement;
-               $traitement['description'] = $traitement['description'] ? _T_ou_typo($traitement['description']) : '';
-               $traitement['icone'] = $traitement['icone'] ? find_in_path($traitement['icone']) : '';
-       }
-       return $traitement;
-}
-
-/*
- * Liste tous les types d'échanges (export et import) existant pour les formulaires
- *
- * @return array Retourne un tableau listant les types d'échanges
- */
-function echanges_formulaire_lister_disponibles() {
-       // On va chercher toutes les fonctions existantes
-       $liste = find_all_in_path('echanger/formulaire/', '.+[.]php$');
-       $types_echange = array('exporter' => array(), 'importer' => array());
-       if (count($liste)) {
-               foreach ($liste as $fichier => $chemin) {
-                       $type_echange = preg_replace(',[.]php$,i', '', $fichier);
-
-                       // On ne garde que les échanges qui ont bien la fonction
-                       if ($f = charger_fonction('exporter', "echanger/formulaire/$type_echange", true)) {
-                               $types_echange['exporter'][$type_echange] = $f;
-                       }
-                       if ($f = charger_fonction('importer', "echanger/formulaire/$type_echange", true)) {
-                               $types_echange['importer'][$type_echange] = $f;
-                       }
-               }
-       }
-       return $types_echange;
-}
-
-/*
- * Génère le nom du cookie qui sera utilisé par le plugin lors d'une réponse
- * par un visiteur non-identifié.
- *
- * @param int $id_formulaire L'identifiant du formulaire
- * @return string Retourne le nom du cookie
- */
-function formidable_generer_nom_cookie($id_formulaire) {
-       return $GLOBALS['cookie_prefix'].'cookie_formidable_'.$id_formulaire;
-}
-
-/*
- * Vérifie si le visiteur a déjà répondu à un formulaire
- *
- * @param int $id_formulaire L'identifiant du formulaire
- * @param string $choix_identification Comment verifier une reponse. Priorite sur 'cookie' ou sur 'id_auteur'
- * @param string $anonymisation : vaut '' si le formulaire n'est pas anonymisé, sinon c'est la variable d'anonymisation
- * @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false
- */
-function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification = 'cookie', $anonymisation = '') {
-       global $auteur_session;
-       $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
-       $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
-       $cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
-
-       $anonymiser = ($anonymisation == '') ? false : true;
-       if ($anonymiser) {
-               $anonymiser_variable = $anonymisation;
-       }
-
-       // traitement de l'anonymisation
-       if ($anonymiser) {
-               // mod de l'id_auteur
-               $variables_anonymisation =
-                               $GLOBALS['formulaires']['variables_anonymisation'][$anonymiser_variable];
-               $id = eval("return $variables_anonymisation;");
-               $id_auteur = formidable_scramble($id, $id_formulaire);
-       }
-       // ni cookie ni id, on ne peut rien faire
-       if (!$cookie and !$id_auteur) {
-               return false;
-       }
-
-       // priorite sur le cookie
-       if ($choix_identification == 'cookie' or !$choix_identification) {
-               if ($cookie) {
-                       $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
-               } else {
-                       $where = 'id_auteur='.$id_auteur;
-               }
-       } else {
-               // sinon sur l'id_auteur
-               if ($id_auteur) {
-                       $where = 'id_auteur='.$id_auteur;
-               } else {
-                       $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
-               }
-       }
-
-       $reponses = sql_allfetsel(
-               'id_formulaires_reponse',
-               'spip_formulaires_reponses',
-               array(
-                       array('=', 'id_formulaire', intval($id_formulaire)),
-                       array('=', 'statut', sql_quote('publie')),
-                       $where
-               ),
-               '',
-               'date'
-       );
-
-       if (is_array($reponses)) {
-               return array_map('reset', $reponses);
-       } else {
-               return false;
-       }
-}
-
-/*
- * Génère la vue d'analyse de toutes les réponses à une saisie
- *
- * @param array $saisie Un tableau décrivant une saisie
- * @param array $env L'environnement, contenant normalement la réponse à la saisie
- * @return string Retour le HTML des vues
- */
-function formidable_analyser_saisie($saisie, $valeurs = array(), $reponses_total = 0, $format_brut = false) {
-       // Si le paramètre n'est pas bon ou que c'est un conteneur, on génère du vide
-       if (!is_array($saisie) or (isset($saisie['saisies']) and $saisie['saisies'])) {
-               return '';
-       }
-
-       $contexte = array('reponses_total'=>$reponses_total);
-
-       // On sélectionne le type de saisie
-       $contexte['type_saisie'] = $saisie['saisie'];
-
-       // Peut-être des transformations à faire sur les options textuelles
-       $options = $saisie['options'];
-       foreach ($options as $option => $valeur) {
-               $options[$option] = _T_ou_typo($valeur, 'multi');
-       }
-
-       // On ajoute les options propres à la saisie
-       $contexte = array_merge($contexte, $options);
-
-       // On récupère toutes les valeurs du champ
-       if (isset($valeurs[$contexte['nom']])
-               and $valeurs[$contexte['nom']]
-               and is_array($valeurs[$contexte['nom']])) {
-               $contexte['valeurs'] = $valeurs[$contexte['nom']];
-       } else {
-               $contexte['valeurs'] = array();
-       }
-
-       // On génère la saisie
-       if ($format_brut) {
-               return analyser_saisie($contexte);
-       } else {
-               return recuperer_fond(
-                       'saisies-analyses/_base',
-                       $contexte
-               );
-       }
-}
-
-/*
- * Renvoie une ligne de réponse sous la forme d'un tableau
- *
- * @param array $saisie Un tableau décrivant une saisie
- * @return array Tableau contenant une ligne
- */
-function analyser_saisie($saisie) {
-       if (!isset($saisie['type_saisie']) or $saisie['type_saisie'] == '') {
-               return '';
-       }
-
-       $ligne = array();
-
-       switch ($saisie['type_saisie']) {
-               case 'selecteur_rubrique':
-               case 'selecteur_rubrique_article':
-               case 'selecteur_article':
-                       $ligne['plein'] = count(array_filter($saisie['valeurs']));
-                       $ligne['vide'] = count(array_diff_key($saisie['valeurs'], array_filter($saisie['valeurs'])));
-                       break;
-               case 'radio':
-               case 'selection':
-               case 'selection_multiple':
-               case 'choix_couleur':
-               case 'checkbox':
-                       $stats = array();
-                       foreach ($saisie['valeurs'] as $valeur) {
-                               if (is_array($valeur)) {
-                                       foreach ($valeur as $choix) {
-                                               if (isset($stats["choix-$choix"])) {
-                                                       $stats["choix-$choix"]++;
-                                               } else {
-                                                       $stats["choix-$choix"] = 1;
-                                               }
-                                       }
-                               } else {
-                                       if (isset($stats["choix-$valeur"])) {
-                                               $stats["choix-$valeur"]++;
-                                       } else {
-                                               $stats["choix-$valeur"] = 1;
-                                       }
-                               }
-                       }
-                       $datas = is_string($saisie['datas'])
-                               ? saisies_chaine2tableau(saisies_aplatir_chaine($saisie['datas']))
-                               : $saisie['datas'];
-                       foreach ($datas as $key => $val) {
-                               $nb = (isset($stats["choix-$key"]))
-                                       ? $stats["choix-$key"]
-                                       : 0;
-                               $ligne[$val] = $nb;
-                       }
-                       break;
-               case 'destinataires':
-                       $stats = array();
-                       foreach ($saisie['valeurs'] as $valeur) {
-                               foreach ($valeur as $choix) {
-                                       if (isset($stats["choix-$choix"])) {
-                                               $stats["choix-$choix"]++;
-                                       } else {
-                                               $stats["choix-$choix"] = 1;
-                                       }
-                               }
-                       }
-                       foreach ($stats as $key => $val) {
-                               $key = str_replace('choix-', '', $key);
-                               if ($key == '') {
-                                       $key = '<valeur vide>';
-                               }
-                               $auteur = sql_getfetsel('nom', 'spip_auteurs', "id_auteur=$key");
-                               $ligne[$auteur] = $val;
-                       }
-                       break;
-       }
-
-       $vide = 0;
-       foreach ($saisie['valeurs'] as $valeur) {
-               if ($valeur == '') {
-                       $vide++;
-               }
-               switch ($saisie['type_saisie']) {
-                       case 'case':
-                       case 'oui_non':
-                               if (isset($ligne['oui']) == false) {
-                                       $ligne['oui'] = 0;
-                               }
-                               if (isset($ligne['non']) == false) {
-                                       $ligne['non'] = 0;
-                               }
-                               if ($valeur) {
-                                       $ligne['oui']++;
-                               } else {
-                                       $ligne['non']++;
-                               }
-                               break;
-                       case 'input':
-                       case 'hidden':
-                       case 'explication':
-                               break;
-               }
-       }
-       $ligne['sans_reponse'] = $vide;
-       $ligne['header'] = $saisie['label'] != ''
-               ? $saisie['label']
-               : $saisie['type_saisie'];
-
-       return $ligne;
-}
-
-
-/**
- * Tente de déserialiser un texte
- *
- * Si le paramètre est un tableau, retourne le tableau,
- * Si c'est une chaîne, tente de la désérialiser, sinon
- * retourne la chaîne.
- *
- * @filtre
- *
- * @param string|array $texte
- *      Le texte (possiblement sérializé) ou un tableau
- * @return array|string
- *      Tableau, texte désérializé ou texte
-**/
-function filtre_tenter_unserialize_dist($texte) {
-       if (is_array($texte)) {
-               return $texte;
-       }
-       if ($tmp = @unserialize($texte)) {
-               return $tmp;
-       }
-       return $texte;
-}
-
-
-/**
- * Retourne un texte du nombre de réponses
- *
- * @param int $nb
- *      Nombre de réponses
- * @return string
- *      Texte indiquant le nombre de réponses
-**/
-function titre_nb_reponses($nb) {
-       if (!$nb) {
-               return _T('formidable:reponse_aucune');
-       }
-       if ($nb == 1) {
-               return _T('formidable:reponse_une');
-       }
-       return _T('formidable:reponses_nb', array('nb' => $nb));
-}
-
-/**
- * Transforme le hash MD5 en une valeur numérique unique
- *
- * trouvé ici : http://stackoverflow.com/questions/1422725/represent-md5-hash-as-an-integer
- * @param string $hex_str La valeur alphanumérique à transformer
- * @return string Valeur numérique
-*/
-function md5_hex_to_dec($hex_str) {
-       $arr = str_split($hex_str, 4);
-       $dec = array();
-       foreach ($arr as $grp) {
-               $dec[] = str_pad(hexdec($grp), 5, '0', STR_PAD_LEFT);
-       }
-
-       /* on s'assure que $result ne commence pas par un zero */
-       $result = implode('', $dec);
-       for ($cpt = 0; $cpt < strlen($result); $cpt++) {
-               if ($result[$cpt] != '0') {
-                       break;
-               }
-       }
-       $result = substr($result, $cpt);
-       return $result;
-}
-
-/**
- * Transforme un login en une valeur numérique de 19 caractères
- *
- * NOTE: il devient impossible de retrouver la valeur d'origine car le HASH
- * est coupé à 19cars et est donc incomplet. L'unicité n'est pas garantie mais
- * les chances pour que deux logins tombent sur le même HASH sont de 1 sur
- * 10 milliards de milliards
- * A la fin, on recherche et supprime les éventuels zéros de début
- * @param string $login Login à transformer
- * @param string $id_form ID du formulaire concerné
- * @param string $passwd Chaîne 'secrète' ajoutée au login et id_formulaire pour éviter
- *  les recoupements d'identité entre plusieurs formulaires
- * @return string Un nombre de 19 chiffres
-*/
-function formidable_scramble($login, $id_form, $passwd = '') {
-       if ($passwd == '') {
-               $passwd = $GLOBALS['formulaires']['passwd']['interne'];
-       }
-       $login_md5 = md5("$login$passwd$id_form");
-       $login_num = md5_hex_to_dec($login_md5);
-       $login_num = substr($login_num, 0, 19);
-
-       return $login_num;
-}
diff --git a/www/plugins/formidable/inc/formidable_fichiers.php b/www/plugins/formidable/inc/formidable_fichiers.php
deleted file mode 100644 (file)
index cdf18e4..0000000
+++ /dev/null
@@ -1,549 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-include_spip('inc/flock');
-include_spip('inc/documents');
-if (!defined('_FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL')) {// la taille maximum (en Mio) des fichiers qu'on autorise directement en PJ dans les emails. 
-       define('_FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL', 10);
-}
-
-if (!defined('_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL')) {
-       // Combien de temps un lien par email dans fichier est valable (en seconde)
-       define('_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL', 24*3600);
-}
-if (!defined('_FORMIDABLE_EFFACEMENT_FICHIERS_EMAIL')) {
-       // Au bout de combien de temps efface-t-on les fichiers enregistrés lorsque le traitement est uniquement email?
-       define('_FORMIDABLE_EFFACEMENT_FICHIERS_EMAIL', _FORMIDABLE_EXPIRATION_FICHIERS_EMAIL);
-}
-if (!defined('_FORMIDABLE_LIENS_FICHIERS_ACCUSE_RECEPTION')) {
-       // mettre à false si on ne veut pas de lien vers les fichiers dans l'accusé de réception
-       define('_FORMIDABLE_LIENS_FICHIERS_ACCUSE_RECEPTION', true);
-}
-/**
- * Créer, si le formulaire contient des saisies de type fichiers, un dossier pour stocker les fichiers.
- * Vérifier que ce dossier soit accessible en écriture.
- * Vérifier qu'on ne puisse pas y accéder de l'exterieur.
- *
- * @param int $id_formulaire
- * @param bool $forcer, pour forcer la création du dossier même si pas de saisie fichiers
- * @return $erreur
- **/
-function formidable_creer_dossier_formulaire($id_formulaire, $forcer = false) {
-       if (!$forcer) {
-               include_spip('formulaires/formidable');
-               // Récuperer la liste des saisies de type fichier
-               $saisies_fichiers = formulaires_formidable_fichiers($id_formulaire);
-
-               if (!is_array($saisies_fichiers) or $saisies_fichiers == array ()) {
-                       //pas de saisie fichiers?
-                       return '';
-               }
-       }
-       $nom_dossier = "formulaire_$id_formulaire";
-
-       // On crée le dossier
-       sous_repertoire(_DIR_FICHIERS, '', true, true);
-       sous_repertoire(_DIR_FICHIERS_FORMIDABLE, '', true, true);
-       $dossier = sous_repertoire(_DIR_FICHIERS_FORMIDABLE, $nom_dossier, false, true);
-       if (strpos($dossier, "$nom_dossier/") === false) {
-               spip_log("Impossible d'écrire $nom_dossier", 'formidable'._LOG_ERREUR);
-               return _T(
-                       'formidable:creer_dossier_formulaire_erreur_impossible_creer',
-                       array('dossier'=>_DIR_FICHIERS_FORMIDABLE . $nom_dossier)
-               );
-       }
-
-       // Créer un htaccess ici
-       include_spip('inc/acces');
-       verifier_htaccess($dossier);
-
-       // on crée un fichier de test, pour s'assurer
-       // 1. Qu'on puisse écrire dans le rep
-       // 2. Qu'on ne puisse pas accéder à ce fichier depuis l'exterieur.
-       $fichier = $dossier.'test.txt';
-       $ecriture_ok = ecrire_fichier(
-               $fichier,
-               "Ce fichier n'est normalement pas lisible de l'extérieur. Si tel est le cas, il y a un souci de confidentialité.",
-               false
-       );
-       if ($ecriture_ok == false) {
-               spip_log("Impossible d'écrire dans $nom_dossier", 'formidable'._LOG_ERREUR);
-               return _T(
-                       'formidable:creer_dossier_formulaire_erreur_impossible_ecrire',
-                       array('dossier'=>_DIR_FICHIERS_FORMIDABLE . $nom_dossier)
-               );
-       }
-
-       include_spip('inc/distant');
-       $url = url_absolue($fichier);
-       if ($data = recuperer_page($url) && $data != null) {
-               // si on peut récuperer la page avec un statut http 200,
-               // c'est qu'il y a un problème. recuperer_page() est obsolète en 3.1, mais recuperer_url() n'existe pas en 3.0
-               spip_log("$nom_dossier accessible en lecture depuis le web", 'formidable'._LOG_CRITIQUE);
-               return _T(
-                       'formidable:creer_dossier_formulaire_erreur_possible_lire_exterieur',
-                       array('dossier'=>_DIR_FICHIERS_FORMIDABLE . $nom_dossier)
-               );
-       }
-       // Et si tout va bien
-       spip_log("Création du dossier $nom_dossier", 'formidable');
-       return '';
-}
-
-/**
- * Déplace un fichier uploadé de son adresse temporaire vers son adresse définitive.
- * Crée si besoin les dossiers de stockage.
- *
- * @param string $fichier l'adresse temporaire du fichier
- * @param string $nom le nom du fichier
- * @param string $mime le mime du fichier
- * @param string $extension l'extension du fichier
- * @param string $champ le champ concerné
- * @return string $nom_definitif
- *             le nom définitif du fichier tel que stocké dans son dossier,
- *             vide s'il y a eu un souci lors du déplacement (dans ce cas un courriel sera envoyé au webmestre)
- *
- **/
-function formidable_deplacer_fichier_emplacement_definitif($fichier, $nom, $mime, $extension, $champ, $options) {
-       if (isset($options['id_formulaire'])) {
-               $id_formulaire = $options['id_formulaire'];
-               $dossier_formulaire =  "formulaire_$id_formulaire";
-       } else {
-               // si c'est pas set, c'est qu'il y a une erreur
-               return '';
-       }
-
-       if (isset($options['id_formulaires_reponse'])) {
-               $dossier_reponse = 'reponse_'.$options['id_formulaires_reponse'];
-       } elseif (isset($options['timestamp'])) {
-               $dossier_reponse = 'reponse_'.$options['timestamp'];
-       } else { // si ni timestamp, ni id_formulaires_reponse => erreur
-               return '';
-       }
-       // déterminer le basename
-       $basename = pathinfo($nom, PATHINFO_BASENAME);
-
-       // Appliquer les alias de type_mime
-       include_spip('base/typedoc');
-       while (isset($GLOBALS['mime_alias'][$mime])) {
-               $mime = $GLOBALS['mime_alias'][$mime];
-       }
-
-       // sécurité : si la combinaison extension/mime_type est inconnu de SPIP (spip_documents_type), on zip.
-       // On n'utilise volontairement pas verifier/fichiers.php, dès fois que celui-ci évolue dans le future
-       $res = sql_select(
-               'mime_type',
-               'spip_types_documents',
-               'mime_type='.sql_quote($mime).' and extension='.sql_quote($extension)
-       );
-       if (sql_count($res) == 0) {
-               $zipper = true;
-               $nom_dans_zip = $nom;
-               // pas de fichier nom de zip commencant par point
-               while (strpos($basename, '.') === 0) {
-                       $basename = substr($basename, 1);
-               }
-               $nom = "$basename.zip";
-       } else {
-               $zipper = false;
-       }
-       if (!isset($options['timestamp'])) { // si on enregistre la réponse en base
-
-               // d'abord, créer si besoin le dossier pour le formulaire, si on a une erreur, on ne déplace pas le fichier
-               if (formidable_creer_dossier_formulaire($id_formulaire, true) != '') {
-                       return '';
-               }
-
-               // puis on créer le dossier pour la réponse
-               $dossier_reponse = sous_repertoire(
-                       _DIR_FICHIERS_FORMIDABLE.$dossier_formulaire.'/',
-                       $dossier_reponse,
-                       false,
-                       true
-               );
-
-               // puis le dossier pour le champ
-               $dossier_champ = sous_repertoire($dossier_reponse, $champ, false, true);
-               $appendice_nom = 0;
-       } else { // si on enregistre sous forme de timestamp
-               sous_repertoire(_DIR_FICHIERS, '', true, true);
-               sous_repertoire(_DIR_FICHIERS_FORMIDABLE, '', true, true);
-               $dossier = sous_repertoire(_DIR_FICHIERS_FORMIDABLE, 'timestamp', false, true);
-               $dossier = sous_repertoire($dossier, $options['timestamp'], false, true);
-               $dossier_champ = sous_repertoire($dossier, $champ, false, true);
-
-               // Générer un fichier htaccess ici
-               include_spip('inc/acces');
-               verifier_htaccess($dossier);
-
-               // on crée un fichier de test, pour s'assurer
-               // 1. Qu'on puisse écrire dans le rep
-               // 2. Qu'on ne puisse pas accéder à ce fichier depuis l'exterieur.
-               $fichier_test = $dossier.'test.txt';
-               $ecriture_ok = ecrire_fichier(
-                       $fichier_test,
-                       "Ce fichier n'est normalement pas lisible de l'extérieur. Si tel est le cas, il y a un souci de confidentialité.",
-                       false
-               );
-               if ($ecriture_ok == false) {
-                       spip_log("Impossible d'écrire dans $dossier", 'formidable'._LOG_ERREUR);
-                       return '';
-               }
-               include_spip('inc/distant');
-               $url = url_absolue($fichier_test);
-               if ($data = recuperer_page($url) && $data != null) {
-                       // si on peut récuperer la page avec un statut http 200,
-                       // c'est qu'il y a un problème.
-                       // recuperer_page() est obsolète en 3.1, mais recuperer_url() n'existe pas en 3.0
-                       spip_log("$dossier accessible en lecture depuis le web", 'formidable'._LOG_CRITIQUE);
-                       return '';
-               }
-       }
-       // S'assurer qu'il n'y a pas un fichier du même nom à destination
-       $chemin_final = $dossier_champ.$nom;
-       $n = 1;
-       //la constante PATHINFO_FILENAME n'est qu'à partir de PHP 5.2, or SPIP 3 peut fonctionne en PHP 5.1
-       $basename_sans_extension = substr_replace($basename, '', -strlen($extension)-1);
-       while (@file_exists($chemin_final)) {
-               $nom = $basename_sans_extension."_$n.".$extension;
-               $chemin_final = $dossier_champ.$nom;
-               $n++;
-       }
-       if (!$zipper) { // si on ne zippe pas, c'est simple
-               if ($fichier = deplacer_fichier_upload($fichier, $chemin_final, true)) {
-                       spip_log("Enregistrement du fichier $chemin_final", 'formidable');
-                       return $nom;
-               } else {
-                       spip_log("Pb lors de l'enregistrement du fichier $chemin_final", 'formidable'._LOG_ERREUR);
-                       return '';
-               }
-       } else { // si on doit zipper, c'est plus complexe
-               include_spip('inc/pclzip');
-               $zip = new PclZip($chemin_final);
-               // mettre à jour le fichier dans le dossier cvtupload
-               if (!$tmp_dir = tempnam($dossier_champ, 'tmp_upload')) {
-                       return '';
-               }
-               spip_unlink($tmp_dir);
-               @mkdir($tmp_dir);
-               $old_fichier = $fichier;
-               if (!$fichier = deplacer_fichier_upload($fichier, $tmp_dir.'/'.$nom_dans_zip, false)) {
-                       spip_log("Pb lors de l'enregistrement du fichier $tmp_dir/$nom_dans_zip", 'formidable'._LOG_ERREUR);
-                       return '';
-               }
-               $zip_final = $zip -> create(
-                       $fichier,
-                       PCLZIP_OPT_REMOVE_PATH,
-                       $tmp_dir,
-                       PCLZIP_OPT_ADD_PATH,
-                       ''
-               );
-               if (!$zip_final) {
-                       spip_log("Pb lors de l'enregistrement du fichier $fichier", 'formidable'._LOG_ERREUR);
-                       return '';
-               } else {
-                       spip_unlink($old_fichier);
-                       supprimer_repertoire($tmp_dir);
-                       spip_log("Enregistrement du fichier $fichier, automatiquement zippé", 'formidable');
-                       return $nom;
-               }
-       }
-
-       return $nom;
-}
-
-/**
- * Fournit à l'utilisateur·trice un fichier qui se trouve normalement dans un endroit inaccessible,
- * par exemple dans config.
- * La fonction ne vérifie ni l'existence effective du fichier,
- * ni le droit effectif de l'utilisateur.
- * Ceci doit être fait dans l'action qui appelle cette fonction
- * @param string $chemin le chemin du fichier
- * @param string $f le nom du fichier qui sera envoyé à l'utilisateur·trice.
- *
-**/
-function formidable_retourner_fichier($chemin, $f) {
-       header('Content-Type: '.mime_content_type($chemin));
-       header("Content-Disposition: attachment; filename=\"$f\";");
-       header('Content-Transfer-Encoding: binary');
-       // fix for IE catching or PHP bug issue (inspiré de plugins-dist/dump/action/telecharger_dump.php
-       header('Pragma: public');
-       header('Expires: 0'); // set expiration time
-       header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-       if ($cl = filesize($chemin)) {
-               header('Content-Length: '.$cl);
-       }
-       readfile($chemin);
-       exit;
-}
-/**
- * Déplacer un fichier temporaire à son emplacement définif.
- * Produire un tableau de description des fichiers déplacés.
- * Le tout à partir de la description d'une saisies 'fichiers'
- * @param array $saisie la description de la saisie fichiers
- * @param array $options
- *             des options, dépendantes du type de traitement,
- *             qui permettent d'indiquer où l'on déplace le fichier
- * @return array un tableau de "vue" de la saisie
-**/
-function formidable_deplacer_fichiers_produire_vue_saisie($saisie, $options) {
-       $nb_fichiers_max = $saisie['options']['nb_fichiers'];
-       // on va parcourir $_FILES en nous limitant aux nombres de fichiers définies par la saisie,
-       // pour éviter les éventuelles ajout supplémentaire de fichiers par modif du html
-       $champ = $saisie['options']['nom'];
-       if (!isset($_FILES[$champ])) {//précaution
-               return null;
-       }
-       $description_fichiers = array();
-       $mon_file = $_FILES[$champ];
-       $i = 0;
-       while ($i < $nb_fichiers_max) {
-               if ($mon_file['error'][$i] == 0) {
-                       // la saisie fichiers est forcément structurée sous la forme d'un tableau,
-                       // on peut donc vérifier qu'il n'y a pas d'erreur facilement
-                       $description = array(); // tableau pour stocker la description de ce fichier
-
-                       // les infos qu'on peut récuperer directement de $files
-                       $description['taille'] = $mon_file['size'][$i];
-                       $description['mime'] = $mon_file['type'][$i];
-
-                       // l'adresse du nouveau fichier, sans le chemin
-                       if ($nouveau_nom = formidable_deplacer_fichier_emplacement_definitif(
-                               $mon_file['tmp_name'][$i],
-                               $mon_file['name'][$i],
-                               $mon_file['type'][$i],
-                               pathinfo($mon_file['name'][$i], PATHINFO_EXTENSION),
-                               $champ,
-                               $options
-                       )) {
-                                       $description['nom'] = $nouveau_nom;
-                                       $description['extension'] = pathinfo($nouveau_nom, PATHINFO_EXTENSION);
-                       } else {
-                               $description['erreur'] = _T(
-                                       'formidable:erreur_deplacement_fichier',
-                                       array('nom'=>$mon_file['name'][$i])
-                               );
-                               $description['nom'] = $mon_file['name'][$i];
-                               $description['tmp_name'] = $mon_file['tmp_name'][$i];
-                       }
-                       //on ajoute la description au tableau global
-                       $description_fichiers[] = $description;
-               }
-               $i++;
-       }
-       return $description_fichiers;
-}
-/**
- * Efface les fichiers d'un formulaire
- * @param $str $id_formulaire
- * @return int 1 ou 0 selon que l'on a effacé ou non un répertoire
-**/
-function formidable_effacer_fichiers_formulaire($id_formulaire) {
-       $chemin = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire";
-       if (file_exists($chemin)) {// par sécurité
-               if (supprimer_repertoire($chemin)) {
-                       spip_log("Effacement du dossier $chemin", 'formidable');
-                       return 1;
-               } else {
-                       spip_log("Pb lors de l'effacement du dossier $chemin", 'formidable'._LOG_ERREUR);
-                       return 0;
-               }
-       }
-       return 0;
-}
-
-/**
- * efface les fichiers d'une réponse formidable
- * @param $str $id_formulaire
- * @param $str $id_formulaires_reponse
- * @return int 1 ou 0 selon que l'on a effacé ou non un répertoire
-**/
-function formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse) {
-       $chemin = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$id_formulaires_reponse";
-       if (file_exists($chemin)) {// par sécurité
-               if (supprimer_repertoire($chemin)) {
-                       spip_log("Effacement du dossier $chemin", 'formidable');
-                       return 1;
-               } else {
-                       spip_log("Pb lors de l'effacement du dossier $chemin", 'formidable'._LOG_ERREUR);
-                       return 0;
-               }
-       }
-       return 0;
-}
-
-/** Efface les fichiers d'un champ pour les réponses d'un formulaire
- * @param str $id_formulaire
- * @param array|str $reponses
- * @param str $champ
-**/
-function formidable_effacer_fichiers_champ($id_formulaire, $reponses, $champ) {
-       if ($champ != '') { // on devrait pas arriver ici avec un $champ vide, mais prenons nos précaution
-
-               if (!is_array($reponses)) {
-                       $reponses = array($reponses);
-               }
-
-               $rep_vide = array('.', '..', '.ok'); // si scandire retourne cela où inférieur, alors le dossier est vide
-               foreach ($reponses as $rep) {
-                       $chemin_reponse = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$rep";
-                       $chemin_champ = $chemin_reponse.'/'.$champ;
-
-                       if (file_exists($chemin_champ)) {
-                               if (supprimer_repertoire($chemin_champ)) {
-                                       spip_log("Effacement du dossier $chemin_champ", 'formidable');
-                               } else {
-                                       spip_log("Pb lors de l'effacement du dossier $chemin_champ", 'formidable'._LOG_ERREUR);
-                               }
-                               if (count(array_diff(scandir($chemin_reponse), $rep_vide)) == 0) {
-                                       // si jamais il ne reste plus aucun fichiers pour cette réponse,
-                                       // on peut effacer le repertoire de celle-ci
-                                       if (supprimer_repertoire($chemin_reponse)) {
-                                               spip_log("Effacement du dossier $chemin_reponse", 'formidable');
-                                       } else {
-                                               spip_log("Pb lors de l'effacement du dossier $chemin_reponse", 'formidable'._LOG_ERREUR);
-                                       }
-                               }
-                       }
-               }
-       }
-}
-
-/** Efface les fichiers des réponses par email
- * lorsque la constante _FORMIDABLE_EFFACEMENT_FICHIERS_EMAIL est différent de 0 et que le temps est écoulé
- * @return int nombre de dossiers effacés
- **/
-function formidable_effacer_fichiers_email() {
-       if (_FORMIDABLE_EFFACEMENT_FICHIERS_EMAIL == 0) {
-               return 0;
-       }
-       $dossiers_effaces = 0;
-       $chemin = _DIR_FICHIERS_FORMIDABLE.'timestamp';
-       $timestamp = time();
-       if (is_dir($chemin)) {
-               $dossiers = scandir($chemin);
-               if (is_array($dossiers)) {
-                       foreach ($dossiers as $dossier) {
-                               if (strval(intval($dossier)) != $dossier) { // on ne traite que les dossiers qui ont comme nom un entier
-                                       continue;
-                               }
-                               if ($timestamp - intval($dossier) >= _FORMIDABLE_EFFACEMENT_FICHIERS_EMAIL) {
-                                       $chemin_complet = "$chemin/$dossier";
-                                       if (supprimer_repertoire($chemin_complet)) {
-                                               spip_log("Effacement du dossier $chemin_complet", 'formidable');
-                                               $dossiers_effaces++;
-                                       } else {
-                                               spip_log("Pb lors de l'effacement du dossier $chemin_complet", 'formidable'._LOG_ERREUR);
-                                       }
-                               }
-                       }
-               }
-       }
-       return $dossiers_effaces;
-}
-/**
- * Génerer un zip des réponses d'un formulaire
- * @param int $id_formulaire  (identifiant numérique)
- * @param str $chemin_du_zip chemin complet du zip
- * @param str $fichier_csv un fichier csv à ajouter, contenant les réponses
- * @return str|int chemin complet du zip ou 0 si erreur lors de la création
-**/
-function formidable_zipper_reponses_formulaire($id_formulaire, $chemin_du_zip, $fichier_csv, $saisies_fichiers) {
-       include_spip('inc/pclzip');
-       $zip = new PclZip("$chemin_du_zip");
-       $chemin_fichiers = _DIR_FICHIERS_FORMIDABLE . 'formulaire_' . $id_formulaire;
-       if (!$zip->create($saisies_fichiers, PCLZIP_OPT_REMOVE_PATH, $chemin_fichiers)) {
-               spip_log(
-                       "Impossible de créer le zip pour l'export des réponses du formulaire $id_formulaire",
-                       'formidable'._LOG_ERREUR
-               );
-               return 0;
-       } else {
-               $zip->add($fichier_csv, PCLZIP_OPT_REMOVE_ALL_PATH);
-               return $chemin_du_zip;
-       }
-}
-/**
- * Générer une url d'action pour la récupération d'un fichier lié à une réponse
- * @param int|str $id_formulaire
- * @param int|str $id_formulaires_reponse
- * @param str $saisie
- * @param str $fichier
- **/
-function formidable_generer_url_action_recuperer_fichier($id_formulaire, $id_formulaires_reponse, $saisie, $fichier) {
-       $param = array(
-               'formulaire' => $id_formulaire,
-               'reponse' => $id_formulaires_reponse,
-               'saisie' => $saisie,
-               'fichier' => $fichier
-       );
-
-       // Pour les utilisateurs non authentifiés, on se base sur le cookier
-       $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
-       if (isset($_COOKIE[$nom_cookie])) {
-               include_spip('inc/securiser_action');
-               $param['cookie'] = sha1($_COOKIE[$nom_cookie].secret_du_site());
-       }
-
-       $param = serialize($param);
-       $securiser_action = charger_fonction('securiser_action', 'inc');
-       return $securiser_action('formidable_recuperer_fichier', $param, '', false);
-}
-
-/** Générer une url d'action pour récuperer un fichier à partir d'un lien email
- * @param string $saisie
- * @param string $fichier
- * @param array $options décrivant si on récupère par id de réponse ou par timestamp
- * @return string $url
- *
-**/
-function formidable_generer_url_action_recuperer_fichier_email($saisie, $fichier, $options) {
-       if (isset($options['id_formulaires_reponse'])) {//si reponses enregistrées
-               $arg = serialize(array(
-                       'formulaire' => strval($options['id_formulaire']),
-                       'reponse' => strval($options['id_formulaires_reponse']),
-                       'fichier' => $fichier,
-                       'saisie' => $saisie
-               ));
-       } elseif (isset($options['timestamp'])) {//si par timestamp
-               $arg = serialize(array(
-                       'timestamp' => strval($options['timestamp']),
-                       'fichier' => $fichier,
-                       'saisie' => $saisie
-               ));
-       }
-       $pass = secret_du_site();
-       $action = 'formidable_recuperer_fichier_par_email';
-       $hash = _action_auteur("$action-$arg", '', $pass, 'alea_ephemere');
-       $url = generer_url_action($action, "arg=$arg&hash=$hash", true, true);
-       return $url;
-}
-
-/** Générer le chemin d'un fichier d'après les paramètres passés en argument
- * @param array $param, paramètres décrivant le fichiers: nom, timestamp de la réponse ou numéro d'enregistrement de la réponse, id du formulaire,  champ formidable
- * @return string $chemin;
-**/
-function formidable_generer_chemin_fichier($param){
-       $chemin_fichier = '';
-       if (isset($param['reponse'])) {
-               $chemin_fichier = _DIR_FICHIERS_FORMIDABLE
-                       .'formulaire_'.$param['formulaire']
-                       .'/reponse_'.$param['reponse']
-                       .'/'.$param['saisie']
-                       .'/'.$param['fichier'];
-       } elseif (isset($param['timestamp'])) {
-               $chemin_fichier = _DIR_FICHIERS_FORMIDABLE
-                       . 'timestamp/'
-                       . $param['timestamp'].'/'
-                       . $param['saisie'].'/'
-                       . $param['fichier'];
-       } else {
-               include_spip('inc/minipres');
-               echo minipres(_T('formidable:erreur_fichier_introuvable'));
-       }
-       return $chemin_fichier;
-}
-
diff --git a/www/plugins/formidable/inc/rechercher_joints_formulaires_reponse_formulaires_reponses_champ.php b/www/plugins/formidable/inc/rechercher_joints_formulaires_reponse_formulaires_reponses_champ.php
deleted file mode 100644 (file)
index 1edad5a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-// Securite
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function inc_rechercher_joints_formulaires_reponse_formulaires_reponses_champ_dist(
-       $table,
-       $table_liee,
-       $ids_trouves,
-       $serveur
-) {
-
-       $cle_depart = 'id_formulaires_reponse';
-       $cle_arrivee = 'id_formulaires_reponse';
-
-       $s = sql_select(
-               "DISTINCT R.$cle_depart",
-               'spip_formulaires_reponses AS R JOIN spip_formulaires_reponses_champs AS C ON C.id_formulaires_reponse=R.id_formulaires_reponse',
-               sql_in('C.id_formulaires_reponses_champ', $ids_trouves),
-               '',
-               '',
-               '',
-               '',
-               $serveur
-       );
-
-       return array($cle_depart, $cle_arrivee, $s);
-}
diff --git a/www/plugins/formidable/lang/formidable.xml b/www/plugins/formidable/lang/formidable.xml
deleted file mode 100644 (file)
index 8f531b5..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<traduction module="formidable" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/" reference="fr">
-       <langue code="ar" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=ar" total="239" traduits="128" relire="0" modifs="7" nouveaux="104" pourcent="53.56">
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=de" total="239" traduits="94" relire="0" modifs="8" nouveaux="137" pourcent="39.33">
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=en" total="239" traduits="239" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Benitron" lien="https://trad.spip.net/auteur/benitron" />
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-               <traducteur nom="jack31" lien="https://trad.spip.net/auteur/jack31" />
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-               <traducteur nom="Paolo" lien="https://trad.spip.net/auteur/paolo" />
-               <traducteur nom="twelf" lien="https://trad.spip.net/auteur/twelf" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=es" total="239" traduits="166" relire="0" modifs="11" nouveaux="62" pourcent="69.46">
-               <traducteur nom="severo" lien="https://trad.spip.net/auteur/severo" />
-               <traducteur nom="tin" lien="https://trad.spip.net/auteur/tin" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=fr" total="239" traduits="239" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="it" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=it" total="239" traduits="110" relire="0" modifs="7" nouveaux="122" pourcent="46.03">
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=pt_br" total="239" traduits="230" relire="0" modifs="2" nouveaux="7" pourcent="96.23">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-               <traducteur nom="telopa" lien="https://trad.spip.net/auteur/telopa" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=ru" total="239" traduits="169" relire="2" modifs="8" nouveaux="60" pourcent="70.71">
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/formidable?lang_cible=sk" total="239" traduits="130" relire="0" modifs="8" nouveaux="101" pourcent="54.39">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-</traduction>
diff --git a/www/plugins/formidable/lang/formidable_ar.php b/www/plugins/formidable/lang/formidable_ar.php
deleted file mode 100644 (file)
index 72ac109..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activer_pages_explication' => 'افتراضياً صفحات الاستمارات العمومية غير مسموح بها',
-       'activer_pages_label' => 'السماح بإنشاء صفحات عمومية للاستمارات',
-       'admin_reponses_auteur' => 'السماح لواضعي الاستمارات بتعديل إجاباتهم',
-       'analyse_avec_reponse' => 'أجابات غير فارغة',
-       'analyse_exclure_champs_label' => 'الحقول المطلوب استبعادها',
-       'analyse_exporter' => 'تصدير التحليل',
-       'analyse_longueur_moyenne' => 'متوسط الطول بعدد الكلمات',
-       'analyse_nb_reponses_total' => '@nb@ شخص أجابوا على الاستمارة.',
-       'analyse_sans_reponse' => 'بدون جواب',
-       'analyse_une_reponse_total' => 'شخص واحد أجاب على هذه الاستمارة',
-       'analyse_zero_reponse_total' => 'لم يجب أحد على هذه الاستمارة.',
-       'aucun_traitement' => 'لا يوجد اي معالجة',
-       'autoriser_admin_restreint' => 'السماح للمدراء المحدودين بإنشاء الاستمارات وتعديلها',
-       'autoriser_admin_restreint_explication' => 'افتراضياً، لا يحق الا للمدراء الوصول الي الاستمارات وإنشائها وتعديلها',
-
-       // B
-       'bouton_formulaires' => 'الاستمارات',
-       'bouton_revert_formulaire' => 'العودة الى آخر إصدار تم حفظه',
-
-       // C
-       'cfg_titre_page_configurer_formidable' => 'إعداد ملحق الاستمارات',
-       'cfg_titre_parametrages_analyse' => 'إعداد وحدة تحليل الإجابات',
-       'champs' => 'الحقول',
-       'changer_statut' => 'هذه الاستمارة:',
-
-       // E
-       'editer_apres_choix_formulaire' => 'الاستمارة من جديد',
-       'editer_apres_choix_redirige' => 'إعادة التوجيه الى عنوان جديد',
-       'editer_apres_choix_rien' => 'لا شيء',
-       'editer_apres_choix_stats' => 'إحصاءات الإجابات',
-       'editer_apres_choix_valeurs' => 'القيم المدخلة',
-       'editer_apres_explication' => 'بعد التصديق، عرض مكان الاستمارة:',
-       'editer_apres_label' => 'عرض بعد ذلك',
-       'editer_descriptif' => 'الوصف',
-       'editer_descriptif_explication' => 'وصف للاستمارة مخصص للمجال الخاص.',
-       'editer_identifiant' => 'المعرّف',
-       'editer_identifiant_explication' => 'أدخل معرّف نصي فريد سيسمح لك تفعيل الاستمارة بسهولة أكبر.', # MODIF
-       'editer_menu_auteurs' => 'إعداد المؤلفين',
-       'editer_menu_champs' => 'إعداد الحقول',
-       'editer_menu_formulaire' => 'إعداد الاستمارة',
-       'editer_menu_traitements' => 'إعداد المعالجات',
-       'editer_message_erreur_unicite_label' => 'رساسلة الخطأ في حال لم يكن الحقل فريداً',
-       'editer_message_ok' => 'رسالة الاياب',
-       'editer_message_ok_explication' => 'يمكن تخصيص الرسالة التي ستعرض على المستخدم بعد تصديقه على إجاباته للاستمارة.',
-       'editer_modifier_formulaire' => 'تعديل الاستمارة',
-       'editer_nouveau' => 'استمارة جديدة',
-       'editer_redirige_url' => 'عنوان إعادة التوجيه بعد التصديق',
-       'editer_redirige_url_explication' => 'أترك فارغاً اذا اردت البقاء في الصفحة نفسها',
-       'editer_resume_reponse' => 'عرض مقتضب للإجابة',
-       'editer_titre' => 'العنوان',
-       'erreur_identifiant' => 'هذا المعرّف مستخدم سايقاً',
-       'erreur_inexistant' => 'هذه الاستمارة غير موجودة',
-       'erreur_unicite' => 'هذه القيمة مستخدمة سابقاً',
-       'exporter_formulaire_format_label' => 'تنسيق الملف',
-       'exporter_formulaire_statut_label' => 'الإجابات',
-
-       // F
-       'formulaires_aucun' => 'حالياً لا يوجد اي استمارة.',
-       'formulaires_aucun_champ' => 'حالياً لا يوجد اي حقل إدخال في هذه الاستمارة.',
-       'formulaires_dupliquer' => 'تكرار الاستمارة',
-       'formulaires_dupliquer_copie' => '(نسخة)',
-       'formulaires_introduction' => 'هنا يتم إنشاء استمارات الموقع وإعدادها.',
-       'formulaires_nouveau' => 'إنشاء استمارة جديدة',
-       'formulaires_supprimer' => 'حذف الاستمارة',
-       'formulaires_tous' => 'كل الاستمارات',
-
-       // I
-       'identification_par_cookie' => 'بواسطة الكعكة',
-       'identification_par_id_auteur' => 'بواسطة معرّف (id_auteur) الشخص المعرّف به',
-       'importer_formulaire' => 'استيراد استمارة',
-       'importer_formulaire_format_label' => 'تنسيق الملف',
-       'info_1_formulaire' => 'استمارة واحدة',
-       'info_1_reponse' => 'إجابة واحدة',
-       'info_aucun_formulaire' => 'لا توجد استمارات',
-       'info_aucune_reponse' => 'لا توجد إجابات',
-       'info_nb_formulaires' => '@nb@ استمارة',
-       'info_nb_reponses' => '@nb@ إجابة',
-       'info_reponse_publiee' => 'مصدّقة',
-       'info_reponse_publiees' => 'مصدّقة',
-       'info_reponse_supprimee' => 'محذوفة', # MODIF
-       'info_reponse_supprimees' => 'محذوفة', # MODIF
-       'info_reponse_toutes' => 'الكل',
-
-       // M
-       'modele_label_formulaire_formidable' => 'اي استمارة',
-       'modele_nom_formulaire' => 'استمارة',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => 'عرض عنوان الاستمارة؟',
-       'noisette_nom_noisette_formulaire' => 'إستمارة',
-
-       // R
-       'reponse_aucune' => 'لا توجد إجابات',
-       'reponse_numero' => 'إجابة رقم:',
-       'reponse_statut' => 'هذه الإجابة:',
-       'reponse_supprimer' => 'حذف هذه الإجابة',
-       'reponse_une' => 'إجابة واحدة',
-       'reponses_analyse' => 'تحليل الإجابات',
-       'reponses_anonyme' => 'مغفّل',
-       'reponses_auteur' => 'مستخدم',
-       'reponses_exporter' => 'تصدير الإجابات',
-       'reponses_exporter_format_csv' => 'جدول إلكتروني .CSV',
-       'reponses_exporter_format_xls' => 'إكسل .XLS',
-       'reponses_exporter_statut_publie' => 'منشورة',
-       'reponses_exporter_statut_tout' => 'الكل',
-       'reponses_exporter_telecharger' => 'تحميل',
-       'reponses_ip' => 'عنوان IP',
-       'reponses_liste' => 'لائحة الإجابات',
-       'reponses_liste_prop' => 'إجابات بانتظار التصديق',
-       'reponses_liste_publie' => 'كل الإجابات المصدّقة',
-       'reponses_supprimer' => 'حذف كل الإجابات على هذه الاستمارة', # MODIF
-       'reponses_voir_detail' => 'عرض الإجابة',
-
-       // S
-       'sans_reponses' => 'بدون إجابة',
-
-       // T
-       'texte_statut_poubelle' => 'محذوفة', # MODIF
-       'texte_statut_propose_evaluation' => 'مقترحة',
-       'texte_statut_publie' => 'مصدّقة',
-       'titre_cadre_raccourcis' => 'إختصارات',
-       'titre_reponses' => 'إجابات',
-       'traitements_aide_memoire' => 'مفكرة:',
-       'traiter_email_description' => 'يرسل نتيجة الاستمارة بالبريد الإلكتروني الى لائحة من المتلقين.', # MODIF
-       'traiter_email_option_activer_accuse_label_case' => 'أيضاً إرسال بريد الى عنوان المرسِل يحتوي على رسالة تأكيد الاستلام.',
-       'traiter_email_option_destinataires_explication' => 'اختيار الحقل المناسب للمرسَل اليهم.',
-       'traiter_email_option_destinataires_label' => 'المرسَل اليهم',
-       'traiter_email_option_destinataires_plus_explication' => 'لائحة عناوين بريد تفصل بينها فواصل.',
-       'traiter_email_option_destinataires_plus_label' => 'المرسل اليهم الإضافيون',
-       'traiter_email_option_envoyeur_courriel_explication' => 'اختيار الحقل الذي سيحتوي على عنوان بريد المرسِل.',
-       'traiter_email_option_envoyeur_courriel_label' => 'بريد المرسِل',
-       'traiter_email_option_envoyeur_nom_explication' => 'تكوين هذا الاسم بواسطة الاختصارات @raccourcis@ (أنظر المفكرة). اذا ترك فارغاً سيتم استخدام اسم الموقع.',
-       'traiter_email_option_envoyeur_nom_label' => 'اسم المرسِل',
-       'traiter_email_option_sujet_accuse_label' => 'موضوع الإقرار بالاستلام',
-       'traiter_email_option_sujet_explication' => 'تكوين الموضوع بواسطة الاختصارات @raccourcis@. اذا ترك فارغاً سيتم تكوين الموضوع آلياً.',
-       'traiter_email_option_sujet_label' => 'موضوع الرسالة',
-       'traiter_email_titre' => 'إرسال بالبريد الإلكتروني',
-       'traiter_enregistrement_description' => 'يسجل نتائج الاستمارة في قاعدة البيانات.', # MODIF
-       'traiter_enregistrement_option_anonymiser_label' => 'جعل الاستمارة مغفّلة',
-       'traiter_enregistrement_option_auteur' => 'استخدام المؤلفين للاستمارات',
-       'traiter_enregistrement_option_auteur_explication' => 'تخصيص مؤلف او اكثر لايتمارة. اذا تم تفعيل هذا الخيار، مؤلفو الاستمارة وحدهم يمكنهم الوصول الى بياناتهم.',
-       'traiter_enregistrement_option_choix_select_label' => 'اختيار معامل من بين الماملات المقترحة',
-       'traiter_enregistrement_option_identification_explication' => 'اذا كانت الإجابات قابلة للتعديل، اي اسلوب مفضل استخدامه لمعرفة اي جواب يجب تعديله؟ ',
-       'traiter_enregistrement_option_identification_label' => 'تعريف',
-       'traiter_enregistrement_option_ip_label' => 'تسجيل عناوين IP (تحجب بعد فترة محددة)',
-       'traiter_enregistrement_option_moderation_label' => 'مراقبة',
-       'traiter_enregistrement_option_modifiable_explication' => 'قابل للتعديل: يمكن للزوار تعديل إجاباتهم بعد حين.',
-       'traiter_enregistrement_option_modifiable_label' => 'إجابات يمكن تعديلها',
-       'traiter_enregistrement_option_multiple_explication' => 'متعدد: الشخص نفسه يمكنه الإجابة عدة مرات.',
-       'traiter_enregistrement_option_multiple_label' => 'إجابات متعددة',
-       'traiter_enregistrement_titre' => 'تسجيل النتائج',
-
-       // V
-       'voir_exporter' => 'تصدير الاستمارة',
-       'voir_numero' => 'استمارة رقم:',
-       'voir_reponses' => 'عرض الإجابات',
-       'voir_traitements' => 'المعالجات'
-);
diff --git a/www/plugins/formidable/lang/formidable_de.php b/www/plugins/formidable/lang/formidable_de.php
deleted file mode 100644 (file)
index 1ee0b26..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'analyse_avec_reponse' => 'Ausgefüllte Antworten',
-       'analyse_exporter' => 'Analyse exportieren',
-       'analyse_longueur_moyenne' => 'Durchschnittliche Anzahl Worte',
-       'analyse_sans_reponse' => 'Leere Antworten',
-
-       // B
-       'bouton_formulaires' => 'Formulare',
-
-       // C
-       'champs' => 'Felder',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_descriptif' => 'Beschreibung',
-       'editer_descriptif_explication' => 'Eine Beschreibung des Formulars für das Backend.',
-       'editer_identifiant' => 'Bezeichnung',
-       'editer_identifiant_explication' => 'Gegen sie eine Bezeichnung an, mit dem sie das Formular ansprechen können.', # MODIF
-       'editer_menu_champs' => 'Felder konfigurieren',
-       'editer_menu_formulaire' => 'Formular konfigurieren',
-       'editer_menu_traitements' => 'Verarbeitung konfigurieren',
-       'editer_message_ok' => 'Bestätigungstext',
-       'editer_message_ok_explication' => 'Sie können die Nachricht festlegen, die nach dem Absenden des Formulars angezeigt wird.',
-       'editer_modifier_formulaire' => 'Formular ändern',
-       'editer_nouveau' => 'Neues Formular',
-       'editer_titre' => 'Titel',
-       'erreur_autorisation' => 'Sie sind nicht berechtigt, die Formulare der Website zu ändern.',
-       'erreur_base' => 'Beim Speichern ist ein technischer Fehler aufgetreten.',
-       'erreur_generique' => 'Die Felder enthalten Fehler. Bitte überprüfen Sie Ihre Eingaben.',
-       'erreur_identifiant' => 'Diese Bezeichnung wird bereits verwendet.',
-       'erreur_importer_forms' => 'Fehler beim Importieren des Formulars aus Forms&Tables',
-       'erreur_importer_wcs' => 'Fehler beim Importieren des Formulars aus W.C.S',
-       'erreur_importer_yaml' => 'Fehler beim Importieren des Formulars aus YAML',
-       'erreur_inexistant' => 'Formular nicht vorhanden.',
-       'exporter_formulaire_format_label' => 'Format der Datei',
-
-       // F
-       'formulaire_anonyme_explication' => 'Diese Form ist anonym, dh die Identität des Benutzers nicht registriert ist.', # MODIF
-       'formulaires_aucun' => 'Kein Formular vorhanden.',
-       'formulaires_dupliquer' => 'Formular kopieren',
-       'formulaires_dupliquer_copie' => '(Kopie)',
-       'formulaires_introduction' => 'Erstellen und bearbeiten sie Formulare für ihre Website.',
-       'formulaires_nouveau' => 'Neues Formular anlegen',
-       'formulaires_supprimer' => 'Formular löschen',
-       'formulaires_supprimer_confirmation' => 'Achtung - alle Daten aus dem Formular werden ebenfalls gelöscht. Sind sie sicher, dass sie das Formular löschen wollen?',
-       'formulaires_tous' => 'Alle Formulare',
-
-       // I
-       'importer_formulaire' => 'Formular importieren',
-       'importer_formulaire_fichier_label' => 'Dateien importeieren',
-       'importer_formulaire_format_label' => 'Format der Datei',
-
-       // R
-       'reponse_intro' => '@auteur@ hat auf das Formular geantwortet @formulaire@',
-       'reponse_numero' => 'Antwort Nummer:',
-       'reponse_statut' => 'Diese Antwort ist:',
-       'reponse_supprimer' => 'Diese Antwort löschen',
-       'reponse_supprimer_confirmation' => 'Wollen sie diese Antwor wirklich löschen?',
-       'reponses_analyse' => 'Analyse der Antworten',
-       'reponses_anonyme' => 'Anonym',
-       'reponses_auteur' => 'Nutzer',
-       'reponses_exporter' => 'Antworten exportieren',
-       'reponses_ip' => 'IP-Adresse',
-       'reponses_liste' => 'Liste der Antworten',
-       'reponses_liste_prop' => 'Nicht freigegebene Antworten',
-       'reponses_liste_publie' => 'Alle freigegebenen Antworten',
-       'reponses_voir_detail' => 'Antwort anzeigen',
-       'retour_aucun_traitement' => 'Ihre Antwort wurde gesendet, jedoch wurde keine Verarbeitungsoption für das Formular festgelegt. Deshalb geschieht mit den Daten aus diesem Formular überhaupt nichts. :)',
-
-       // S
-       'sans_reponses' => 'Unbeantwortet',
-
-       // T
-       'traitements_aide_memoire' => 'Merkzettel:',
-       'traitements_avertissement_creation' => 'Die Änderungen der Felder des Formulars wurden erfolgreich gespeichert. Jetzt können sie festlege, welche Verarbeitungsschritte nach dem Senden des Formulars ausgef',
-       'traitements_avertissement_modification' => 'Die Änderungen der Felder des Formulars wurden erfolgreich gespeichert. <strong>Manche Verarbeitungsoptionen müssen entsprechend neu konfiguriert werden.</strong>',
-       'traitements_champ_aucun' => 'Kein',
-       'traiter_email_description' => 'Sendet das Ergebnis des Formulars an eine Empfängerliste.', # MODIF
-       'traiter_email_horodatage' => 'Formular "@formulaire@" am @date@ um @heure@ gesendet.',
-       'traiter_email_message_erreur' => 'Beim Versenden des Formulars ist ein Fehler aufgetreten.',
-       'traiter_email_message_ok' => 'Ihre Nachricht wurde per Mail gesendet.',
-       'traiter_email_option_activer_accuse_label_case' => 'Ebenfalls eine Empfangsbestätigung an Absender senden.',
-       'traiter_email_option_destinataires_explication' => 'Legen sie das Feld fest, das die Empfängeradresse enthält.',
-       'traiter_email_option_destinataires_label' => 'Empfänger',
-       'traiter_email_option_destinataires_plus_explication' => 'Eine kommagetrennte Empfängerliste.',
-       'traiter_email_option_destinataires_plus_label' => 'Weitere Empfänger',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Legen sie das Feld fest, das die Absenderadresse enthält.',
-       'traiter_email_option_envoyeur_courriel_label' => 'Absenderadresse',
-       'traiter_email_option_envoyeur_nom_explication' => 'Definieren sie den Namen mit Hilf der @raccourcis@ (siehe Merkzettel). Wenn sie nichts eintragen, wird der Name der Website verwendet.',
-       'traiter_email_option_envoyeur_nom_label' => 'Name des Absenders',
-       'traiter_email_option_sujet_accuse_label' => 'Betreff der Empfangsbestätigung',
-       'traiter_email_option_sujet_explication' => 'Definieren sie den Betreff mit Hilf der @raccourcis@. Wenn sie das Feld freilassen, wird der Inhalt automatisch erstellt.',
-       'traiter_email_option_sujet_label' => 'Betreff der Nachricht',
-       'traiter_email_page' => '<a href="@url@">Aus der Seite</a>.',
-       'traiter_email_sujet' => '@nom@ hat ihnen geschrieben.',
-       'traiter_email_sujet_accuse' => 'Danke für ihre Antwort.',
-       'traiter_email_titre' => 'Per Mail senden',
-       'traiter_email_url_enregistrement' => 'Sie könen die Antworten <a href="@url@">auf dieser Seite verwalten</a>.', # MODIF
-       'traiter_email_url_enregistrement_precis' => 'Sie können Ihre Antwort <a href="@url@">auf dieser Seite einsehen</a>.',
-       'traiter_enregistrement_description' => 'Einträge in das Formular in der Datenbank speichern', # MODIF
-       'traiter_enregistrement_erreur_base' => 'Beim Speichern in der Datenbank ist ein Fehler aufgetreten',
-       'traiter_enregistrement_erreur_deja_repondu' => 'Sie haben dieses Formular bereits ausgefüllt.',
-       'traiter_enregistrement_option_anonymiser_explication' => 'Stellen die Ergebnisse der anonymen Form (nicht halten Trace-Kennung der Befragten).', # MODIF
-       'traiter_enregistrement_option_anonymiser_label' => 'Anonymisierter Form',
-       'traiter_enregistrement_option_anonymiser_variable_explication' => 'Welches System Variable verwendet, um einen einzelnen Wert für jeden Autor ohne Offenlegung seiner Identität zu berechnen.',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Variable aus dem anonymisierter Form.',
-       'traiter_enregistrement_option_choix_select_label' => 'Wählen eine Variable von denen zur Verfügung.',
-       'traiter_enregistrement_option_moderation_label' => 'Moderation',
-       'traiter_enregistrement_option_modifiable_explication' => 'Sollen die Besucher ihre Antworten nachträglich &aauml;ndern können?', # MODIF
-       'traiter_enregistrement_option_modifiable_label' => 'Antworten editierbar',
-       'traiter_enregistrement_option_multiple_explication' => 'Darf die gleiche Person das Formular mehrmals ausfüllen und absenden?', # MODIF
-       'traiter_enregistrement_option_multiple_label' => 'Mehrfache Antworten',
-       'traiter_enregistrement_titre' => 'Ergebnisse speichern',
-
-       // V
-       'voir_exporter' => 'Formular exportieren',
-       'voir_numero' => 'Formular Nummer:',
-       'voir_reponses' => 'Antworten anzeigen',
-       'voir_traitements' => 'Verarbeitungsoptionen'
-);
diff --git a/www/plugins/formidable/lang/formidable_en.php b/www/plugins/formidable/lang/formidable_en.php
deleted file mode 100644 (file)
index 70c39eb..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activer_pages_explication' => 'By default, public pages of the forms are not allowed',
-       'activer_pages_label' => 'Allow creation of public pages for the forms.',
-       'admin_reponses_auteur' => 'Allow forms author to modify the answers',
-       'admin_reponses_auteur_explication' => 'Only administrators can normally modify the answers filled in a form (to the bin, published, proposed to evaluation). This option allows the author of a form to modify the status (with the risk to alterate potentiall statistics)
-',
-       'analyse_avec_reponse' => 'Non-empty answers',
-       'analyse_exclure_champs_explication' => 'Insert the name of the fields to exclude, separated by <code>|</code>. Do not insert <code>@</code>.
-
-',
-       'analyse_exclure_champs_label' => 'Fields to exclude',
-       'analyse_exporter' => 'Export analysis',
-       'analyse_longueur_moyenne' => 'Average number in words length',
-       'analyse_nb_reponses_total' => '@nb@ people responded to this form.',
-       'analyse_sans_reponse' => 'Stayed unanswered',
-       'analyse_une_reponse_total' => 'One person responded to this form.',
-       'analyse_zero_reponse_total' => 'No one responded to this form.',
-       'aucun_traitement' => 'No treatment',
-       'autoriser_admin_restreint' => 'Allow restricted administrators to create and modify forms',
-       'autoriser_admin_restreint_explication' => 'By default, only administrators have access to the creation and modification of forms',
-
-       // B
-       'bouton_formulaires' => 'Forms',
-       'bouton_revert_formulaire' => 'Back to the last saved version',
-
-       // C
-       'cfg_analyse_classe_explication' => 'You can specify CSS classes that will be added on the container of each graph, such as 
-<code>gray</code>,<code>blue</code>,
-               <code>orange</code>, <code>green</code> or whatever you like!',
-       'cfg_analyse_classe_label' => 'CSS class of the progress bar',
-       'cfg_objets_explication' => 'Choose the content to which the forms can be linked.',
-       'cfg_objets_label' => 'Link forms to content',
-       'cfg_titre_page_configurer_formidable' => 'Configure Formidable',
-       'cfg_titre_parametrages_analyse' => 'Settings in the answers analysis',
-       'champs' => 'Fields',
-       'changer_statut' => 'This form is:',
-       'creer_dossier_formulaire_erreur_impossible_creer' => 'Impossible to create @dossier@ folder, needed to store files. Check access rights.',
-       'creer_dossier_formulaire_erreur_impossible_ecrire' => 'Impossible to create @dossier@ folder, needed to store files. Check access rights.',
-       'creer_dossier_formulaire_erreur_possible_lire_exterieur' => 'It is possible to remotely read the contents of the folder @dossier@. This is problematic in terms of data confidentiality.',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_apres_choix_formulaire' => 'The form, again',
-       'editer_apres_choix_redirige' => 'Redirect to a new address',
-       'editer_apres_choix_rien' => 'Nothing',
-       'editer_apres_choix_stats' => 'Answers statistics',
-       'editer_apres_choix_valeurs' => 'The entered values',
-       'editer_apres_explication' => 'After validation, display instead of the form:',
-       'editer_apres_label' => 'Display then',
-       'editer_css' => 'CSS Classes ',
-       'editer_descriptif' => 'Description',
-       'editer_descriptif_explication' => 'An explanation of the form for the private area.',
-       'editer_identifiant' => 'Login',
-       'editer_identifiant_explication' => 'Give a single textual identifier that allows you to call the form more easily. The identifier can only contain digits, Latin letters not accented and the character "_"',
-       'editer_menu_auteurs' => 'Configure authors',
-       'editer_menu_champs' => 'Configure the fields',
-       'editer_menu_formulaire' => 'Configure the form',
-       'editer_menu_traitements' => 'Configure the treatments',
-       'editer_message_erreur_unicite_explication' => 'If you leave this field empty, the Formidable default error message will be shown',
-       'editer_message_erreur_unicite_label' => 'Error message when a field is not unique',
-       'editer_message_ok' => 'Return message',
-       'editer_message_ok_explication' => 'You can customize the message that will be displayed to the user after submitting a valid form.',
-       'editer_modifier_formulaire' => 'Modify the form',
-       'editer_nouveau' => 'New form',
-       'editer_redirige_url' => 'Forwarding address after validation',
-       'editer_redirige_url_explication' => 'Leave blank if you want to stay on the same page',
-       'editer_resume_reponse' => 'Display summary of the response',
-       'editer_resume_reponse_explication' => '
-This string is used to display a summary of each reply in the lists. Fields such as <tt>@input_1@</tt> will be replaced as indicated by the following reminder',
-       'editer_titre' => 'Title',
-       'editer_unicite_explication' => 'Save the form only if a field is unique',
-       'editer_unicite_label' => 'Verify that this field is unique',
-       'erreur_autorisation' => 'You do not have the right to edit the website forms',
-       'erreur_base' => 'An error occurred as the data was being saved.',
-       'erreur_deplacement_fichier' => 'The file "@nom@" could not be stored correctly by the system. Contact the webmaster.',
-       'erreur_fichier_expire' => 'The link to download the file is too old.',
-       'erreur_fichier_introuvable' => 'The requested file was not found.',
-       'erreur_generique' => 'There are errors in the fields below. Please check.',
-       'erreur_identifiant' => 'This login is already used.',
-       'erreur_identifiant_format' => 'The identifier can only contain digits, Latin letters not accented and the character "_"',
-       'erreur_importer_forms' => 'Error while importing the Forms&Tables form',
-       'erreur_importer_wcs' => 'Error while importing the W.C.S form',
-       'erreur_importer_yaml' => 'Error while importing the YAML file',
-       'erreur_inexistant' => 'This form doesn’t exist.',
-       'erreur_unicite' => 'This value is already in use',
-       'exporter_formulaire_date_debut_label' => 'From',
-       'exporter_formulaire_date_erreur' => 'The start date must be before the end date',
-       'exporter_formulaire_date_fin_label' => 'Until',
-       'exporter_formulaire_format_label' => 'File format',
-       'exporter_formulaire_statut_label' => 'Answers',
-
-       // F
-       'formulaire_anonyme_explication' => 'This form is anonymous; meaning that the user’s identity won’t be recorded.',
-       'formulaires_aucun' => 'There is no form for now',
-       'formulaires_aucun_champ' => 'There is currently no entry field for this form.',
-       'formulaires_corbeille_tous' => '@nb@ forms in the trash',
-       'formulaires_corbeille_un' => 'One form in the trash',
-       'formulaires_dupliquer' => 'Duplicate the form',
-       'formulaires_dupliquer_copie' => '(copy)',
-       'formulaires_introduction' => 'Create and configure forms on your site here.',
-       'formulaires_nouveau' => 'Create a new form',
-       'formulaires_reponses_corbeille_tous' => '@nb@ form responses in the trash',
-       'formulaires_reponses_corbeille_un' => 'A form response in the trash',
-       'formulaires_supprimer' => 'Delete the form',
-       'formulaires_supprimer_confirmation' => 'Beware, it will also remove all the results. Are you sure you want to delete this form?',
-       'formulaires_tous' => 'All forms',
-
-       // H
-       'heures_minutes_secondes' => '@h@h @m@min @s@s',
-
-       // I
-       'id_formulaires_reponse' => 'Answer identifier',
-       'identification_par_cookie' => 'By cookie',
-       'identification_par_id_auteur' => 'By login (id_auteur) of the authenticated person',
-       'importer_formulaire' => 'Import a form',
-       'importer_formulaire_fichier_label' => 'File to import',
-       'importer_formulaire_format_label' => 'File format',
-       'info_1_formulaire' => '1 form',
-       'info_1_reponse' => '1 answer',
-       'info_aucun_formulaire' => 'No form',
-       'info_aucune_reponse' => 'No answer',
-       'info_formulaire_refuse' => 'Archived',
-       'info_formulaire_utilise_par' => 'Form used by:',
-       'info_nb_formulaires' => '@nb@ forms',
-       'info_nb_reponses' => '@nb@ answers',
-       'info_reponse_proposee' => 'To moderate',
-       'info_reponse_proposees' => 'To moderate',
-       'info_reponse_publiee' => 'Validated',
-       'info_reponse_publiees' => 'Validated',
-       'info_reponse_refusee' => 'Rejected',
-       'info_reponse_refusees' => 'Rejected',
-       'info_reponse_supprimee' => 'Deleted',
-       'info_reponse_supprimees' => 'Deleted',
-       'info_reponse_toutes' => 'All',
-       'info_utilise_1_formulaire' => 'Form used:',
-       'info_utilise_nb_formulaires' => 'Forms used:',
-
-       // J
-       'jours_heures_minutes_secondes' => '@j@j @h@h @m@min @s@s',
-
-       // L
-       'lien_expire' => 'Link expiring in @delai@',
-       'liens_ajouter' => 'Add a form',
-       'liens_ajouter_lien' => 'Add this form',
-       'liens_creer_associer' => 'Create and associate a form',
-       'liens_retirer_lien_formulaire' => 'Remove this form',
-       'liens_retirer_tous_liens_formulaires' => 'Remove all forms',
-
-       // M
-       'minutes_secondes' => '@m@min @s@s',
-       'modele_label_formulaire_formidable' => 'Which form ?',
-       'modele_nom_formulaire' => 'one form',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => 'Dispaly the title of the form ?',
-       'noisette_label_identifiant' => 'Form to display :',
-       'noisette_nom_noisette_formulaire' => 'Form',
-
-       // P
-       'pas_analyse_fichiers' => 'Formidable does not offer (yet) scan of sent files',
-
-       // R
-       'reponse_aucune' => 'No answer',
-       'reponse_intro' => '@auteur@ answered to the form @formulaire@',
-       'reponse_maj' => 'Last update',
-       'reponse_numero' => 'Answer number :',
-       'reponse_statut' => 'This answer is :',
-       'reponse_supprimer' => 'Delete this reply',
-       'reponse_supprimer_confirmation' => 'Do you really wish to delete this reply?',
-       'reponse_une' => '1 reply',
-       'reponses_analyse' => 'Answer analysis',
-       'reponses_anonyme' => 'Anonymous',
-       'reponses_auteur' => 'User',
-       'reponses_exporter' => 'Export the answers',
-       'reponses_exporter_format_csv' => 'Spreadsheet.CSV',
-       'reponses_exporter_format_xls' => 'Excel .XLS',
-       'reponses_exporter_statut_publie' => 'Published',
-       'reponses_exporter_statut_tout' => 'All',
-       'reponses_exporter_telecharger' => 'Download',
-       'reponses_ip' => 'IP address',
-       'reponses_liste' => 'Answers list',
-       'reponses_liste_prop' => 'Answers pending for validation',
-       'reponses_liste_publie' => 'All validated answers',
-       'reponses_nb' => '@nb@ answers',
-       'reponses_supprimer' => 'Delete all answers ',
-       'reponses_supprimer_confirmation' => 'Are you sure you want to delete all answers to this form?',
-       'reponses_voir_detail' => 'See the answer',
-       'retour_aucun_traitement' => 'Your reply was accepted. But as the function of the form has not yet been configured, nothing was done with your data!',
-
-       // S
-       'sans_reponses' => 'Unanswered',
-       'secondes' => '@s@s',
-
-       // T
-       'texte_statut_poubelle' => 'deleted',
-       'texte_statut_propose_evaluation' => 'proposed',
-       'texte_statut_publie' => 'validated',
-       'texte_statut_refuse' => 'archived',
-       'texte_statut_refusee' => 'rejected',
-       'titre_cadre_raccourcis' => 'Shortcuts',
-       'titre_formulaires_archives' => 'Archives',
-       'titre_reponses' => 'Answers',
-       'traitements_actives' => 'Activated treatments',
-       'traitements_aide_memoire' => 'List of shortcuts:',
-       'traitements_avertissement_creation' => 'Changes to the form fields have been successfully saved. You can now define which treatments will be performed when using the form.',
-       'traitements_avertissement_modification' => 'Changes to the form fields have been successfully saved. <strong>Some treatments may need to be reconfigured accordingly.</ strong>',
-       'traitements_champ_aucun' => 'None',
-       'traiter_email_description' => 'Post by email the result of the form to a list of recipients.',
-       'traiter_email_horodatage' => 'Form "@formulaire@" sent on @date@ at @heure@.',
-       'traiter_email_message_erreur' => 'An error occurred when sending the email.',
-       'traiter_email_message_ok' => 'Your message has been successfully sent by email.',
-       'traiter_email_option_activer_accuse_label_case' => 'Also send an email to the sender with a confirmation message.',
-       'traiter_email_option_activer_ip_label_case' => 'Send the IP address of the sender to the recipients.',
-       'traiter_email_option_courriel_envoyeur_accuse_explication' => 'Specify the email used to send the acknowledgment. Otherwise, the recipient will be the sender.',
-       'traiter_email_option_courriel_envoyeur_accuse_label' => 'Email of the acknowledgement of receipt',
-       'traiter_email_option_destinataires_champ_form_explication' => 'If one of the fields is an email address and you want to send the form to this address, select the field.',
-       'traiter_email_option_destinataires_champ_form_label' => 'The recipient is in one of the fields of the forms',
-       'traiter_email_option_destinataires_explication' => 'Choose the field that corresponds to the message recipients.',
-       'traiter_email_option_destinataires_label' => 'Recipients',
-       'traiter_email_option_destinataires_plus_explication' => 'A list of addresses separated by commas.',
-       'traiter_email_option_destinataires_plus_label' => 'Extra recipients',
-       'traiter_email_option_destinataires_selon_champ_explication' => 'Allows you to specify one or more recipients based on the value of a field.
-Indicate the field, its value, and the concerned email (s) (separated by a comma) according to this format, such as: "@selection_1@/choix1 : mail@example.tld". You can specify multiple tests, returning to line between each test.',
-       'traiter_email_option_destinataires_selon_champ_label' => 'Recipients according to a field',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Select the field that will contain the email address of the sender.',
-       'traiter_email_option_envoyeur_courriel_label' => 'Sender Email',
-       'traiter_email_option_envoyeur_nom_explication' => 'Build this name using the @raccourcis@ (see the notes). If you enter nothing, it will be the name of the site.',
-       'traiter_email_option_envoyeur_nom_label' => 'Name of sender',
-       'traiter_email_option_exclure_champs_email_explication' => 'If you do not want certain fields to appear in sent emails (for example hidden fields), just define them here, separated by a comma.',
-       'traiter_email_option_exclure_champs_email_label' => 'Fields to exclude from the message content',
-       'traiter_email_option_masquer_liens_label_case' => 'Hide administration links in the email.',
-       'traiter_email_option_nom_envoyeur_accuse_explication' => 'Specify the name of the sender used to send the acknowledgment. Otherwise, the recipient will be the sender.',
-       'traiter_email_option_nom_envoyeur_accuse_label' => 'Name of the sender of the acknowledgment',
-       'traiter_email_option_pj_explication' => 'If the documents posted weigh less than _FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL Mio (constant modifiable by the webmaster).',
-       'traiter_email_option_pj_label' => 'Join the files in the email',
-       'traiter_email_option_sujet_accuse_label' => 'Subject of the acknowledgement of receipt',
-       'traiter_email_option_sujet_explication' => 'Build topic using @raccourcis@. If you enter nothing, the subject will be built automatically.',
-       'traiter_email_option_sujet_label' => 'Message subject',
-       'traiter_email_option_vrai_envoyeur_explication' => 'Some SMTP servers do not allow to use arbitrary email for the "From" field. For this reason Formidable inserts the default email sender in the "Reply-To". Tick here to insert the email in the "From" field.',
-       'traiter_email_option_vrai_envoyeur_label' => 'Insert email of the sender in the "From" field',
-       'traiter_email_page' => '<a href="@url@">From this page</a>.',
-       'traiter_email_sujet' => '@nom@ has written to you.',
-       'traiter_email_sujet_accuse' => 'Thank you for you reply.',
-       'traiter_email_titre' => 'Send by email',
-       'traiter_email_url_enregistrement' => 'You can manage all the answers <a href="@url@">on this page</a>.',
-       'traiter_email_url_enregistrement_precis' => 'You can see this answer <a href="@url@"> on this page</a>.',
-       'traiter_enregistrement_description' => 'Save the form results in the database',
-       'traiter_enregistrement_erreur_base' => 'An error occurred while writing to the database',
-       'traiter_enregistrement_erreur_deja_repondu' => 'You have already filled in this form.',
-       'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'The answer to edit can not be found.',
-       'traiter_enregistrement_message_ok' => 'Thanks. Your answers have been correctly saved.',
-       'traiter_enregistrement_option_anonymiser_explication' => 'Results anonymous (don’t keep any tracks of user who have answered).',
-       'traiter_enregistrement_option_anonymiser_label' => 'Anonymize form',
-       'traiter_enregistrement_option_anonymiser_variable_explication' => 'What system variable used to calculate a single value for each author without revealing his identity.',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Variable from witch the form will be anonymized',
-       'traiter_enregistrement_option_auteur' => 'Link authors to the forms',
-       'traiter_enregistrement_option_auteur_explication' => 'Bind one or more authors to a form. If activated, this option prevents anyone except the author(s) to access form’s configuration or results.',
-       'traiter_enregistrement_option_choix_select_label' => 'Select a variable from the available',
-       'traiter_enregistrement_option_effacement_delai_label' => 'Number of days before deletion',
-       'traiter_enregistrement_option_effacement_label' => 'Regularly clear  the oldest results',
-       'traiter_enregistrement_option_identification_explication' => 'If the answers can be changed, which method is used first to know the answer to modify ?',
-       'traiter_enregistrement_option_identification_label' => 'Identification',
-       'traiter_enregistrement_option_ip_label' => 'Record IPs (hidden after a period of retention)',
-       'traiter_enregistrement_option_moderation_label' => 'Moderation',
-       'traiter_enregistrement_option_modifiable_explication' => 'Editable: Visitors can change their answers afterwards.',
-       'traiter_enregistrement_option_modifiable_label' => 'Answers can be modified',
-       'traiter_enregistrement_option_multiple_explication' => 'Multiple: A single person may answer several times.',
-       'traiter_enregistrement_option_multiple_label' => 'Multiple answers',
-       'traiter_enregistrement_titre' => 'Record the results',
-
-       // V
-       'voir_exporter' => 'Export the form',
-       'voir_numero' => 'Form number :',
-       'voir_reponses' => 'See the answers',
-       'voir_traitements' => 'Treatments'
-);
diff --git a/www/plugins/formidable/lang/formidable_es.php b/www/plugins/formidable/lang/formidable_es.php
deleted file mode 100644 (file)
index d50e98d..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'admin_reponses_auteur' => 'Autorizar a l@s autores de los formularios a modificar las respuestas',
-       'admin_reponses_auteur_explication' => 'Solo l@s administradores pueden normalmente modificar las respuestas a un formulario (a la papelera, publicada, propuesta para evaluación). Esta opción permite a un·a autor·a de formulario modificar el estatus (con el riesgo de distorsionar eventuales estadísticas).',
-       'analyse_avec_reponse' => 'Respuestas no vacías',
-       'analyse_exclure_champs_explication' => 'Ingresar el nombre de los campos a excluir del análisis, separados por unos <code>|</code>. No poner los <code>@</code>.',
-       'analyse_exclure_champs_label' => 'Campos a excluir',
-       'analyse_exporter' => 'Exportar análisis',
-       'analyse_longueur_moyenne' => 'Longitud media de las palabras',
-       'analyse_nb_reponses_total' => '@nb@ personas han respondido a este formulario. ',
-       'analyse_sans_reponse' => 'Sin respuesta',
-       'analyse_une_reponse_total' => 'Una persona ha respondido a este formulario. ',
-       'analyse_zero_reponse_total' => 'Nadie ha respondido a este formulario.',
-       'aucun_traitement' => 'Ningún tratamiento',
-
-       // B
-       'bouton_formulaires' => 'Formularios',
-       'bouton_revert_formulaire' => 'Volver a la última versión grabada',
-
-       // C
-       'cfg_analyse_classe_explication' => 'Puede especificar clases CSS que se añadirán en el envase de cada gráfico, tales como: <code>gray</code>,<code>blue</code>,
-               <code>orange</code>, <code>green</code> o las que quieras!', # MODIF
-       'cfg_analyse_classe_label' => 'Clase CSS de la barra de progreso',
-       'cfg_titre_page_configurer_formidable' => 'Configurar Formidable',
-       'cfg_titre_parametrages_analyse' => 'Configuración en el análisis de respuestas',
-       'champs' => 'Campos',
-       'changer_statut' => 'Este formulario es:',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_apres_choix_formulaire' => 'El formulario, de nuevo',
-       'editer_apres_choix_redirige' => 'Redirigir a una nueva dirección',
-       'editer_apres_choix_rien' => 'Nada',
-       'editer_apres_choix_stats' => 'Estadísticas de respuesta',
-       'editer_apres_choix_valeurs' => 'Los valores ingresados',
-       'editer_apres_explication' => 'Después de la validación, mostrar en lugar del formulario:',
-       'editer_apres_label' => 'Mostrar a continuación',
-       'editer_descriptif' => 'Descripción',
-       'editer_descriptif_explication' => 'Una explicación del formulario para la zona privada.',
-       'editer_identifiant' => 'Nombre de usuario',
-       'editer_identifiant_explication' => 'Da un único identificador textual que permita llamar al formulario de manera más sencilla', # MODIF
-       'editer_menu_auteurs' => 'Configurar l@s autor@s',
-       'editer_menu_champs' => 'Configurar los campos',
-       'editer_menu_formulaire' => 'Configurar el formulario',
-       'editer_menu_traitements' => 'Configurar los tratamientos',
-       'editer_message_ok' => 'Mensaje de respuesta',
-       'editer_message_ok_explication' => 'Puedes personalizar el mensaje que se mostrará al usuario después de enviar un formulario válido.',
-       'editer_modifier_formulaire' => 'Modificar el formulario',
-       'editer_nouveau' => 'Nuevo formulario',
-       'editer_redirige_url' => 'Dirección de reenvío después de la validación',
-       'editer_redirige_url_explication' => 'Dejar en blanco si quieres permanecer en la misma página',
-       'editer_titre' => 'Título',
-       'erreur_autorisation' => 'No tienes permisos para editar los formularios web',
-       'erreur_base' => 'Se ha producido un error técnico mientras se salvavan los datos.',
-       'erreur_generique' => 'Hay errores en los campos a continuación. Por favor, comprueba. ',
-       'erreur_identifiant' => 'El nombre de usuario ya está siendo utilizado.',
-       'erreur_identifiant_format' => 'El identificador solo puede contener cifras, letras y el carácter "_"', # MODIF
-       'erreur_importer_forms' => 'Error durante la importación de Forms&Tables',
-       'erreur_importer_wcs' => 'Error durante la importación del formulario W.C.S',
-       'erreur_importer_yaml' => 'Error durante la importación del archivo YAML',
-       'erreur_inexistant' => 'Este formulario no existe. ',
-       'exporter_formulaire_format_label' => 'Formato de archivo',
-       'exporter_formulaire_statut_label' => 'Respuestas',
-
-       // F
-       'formulaire_anonyme_explication' => 'Este formulario es anónimo; significa que que la identidad del usuario no será guardada. ',
-       'formulaires_aucun' => 'Todavía no existe ningún formulario.',
-       'formulaires_aucun_champ' => 'Todavía este formulario no contiene ningún campo.',
-       'formulaires_dupliquer' => 'Duplicar el formulario',
-       'formulaires_dupliquer_copie' => '(copia)',
-       'formulaires_introduction' => 'Crea y configura los formularios de tu sitio aquí.',
-       'formulaires_nouveau' => 'Crea un nuevo formulario',
-       'formulaires_supprimer' => 'Eliminar el formulario. ',
-       'formulaires_supprimer_confirmation' => 'Atención, también se eliminarán todos los resultados. ¿Está seguro de que desea eliminar este formulario?',
-       'formulaires_tous' => 'Todos los formularios',
-
-       // I
-       'identification_par_cookie' => 'Por cookie',
-       'identification_par_id_auteur' => 'Por el identificador (id_auteur) de la persona autenticada',
-       'importer_formulaire' => 'Importar un formulario',
-       'importer_formulaire_fichier_label' => 'Archivo a importar',
-       'importer_formulaire_format_label' => 'Formato de archivo',
-       'info_1_formulaire' => '1 formulario',
-       'info_1_reponse' => '1 respuesta',
-       'info_aucun_formulaire' => 'Ningún formulario',
-       'info_aucune_reponse' => 'Ninguna respuesta',
-       'info_formulaire_refuse' => 'Archivado',
-       'info_formulaire_utilise_par' => 'Formulario utilizado por:',
-       'info_nb_formulaires' => '@nb@ formularios',
-       'info_nb_reponses' => '@nb@ respuestas',
-       'info_reponse_proposee' => 'A moderar',
-       'info_reponse_proposees' => 'A moderar',
-       'info_reponse_publiee' => 'Validada',
-       'info_reponse_publiees' => 'Validadas',
-       'info_reponse_supprimee' => 'Borrada', # MODIF
-       'info_reponse_supprimees' => 'Borradas', # MODIF
-       'info_reponse_toutes' => 'Todas',
-       'info_utilise_1_formulaire' => 'Formulario utilizado:',
-       'info_utilise_nb_formulaires' => 'Formularios utilizados:',
-
-       // M
-       'modele_label_formulaire_formidable' => '¿Cuál formulario?',
-       'modele_nom_formulaire' => 'un formulario',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => '¿Mostrar el título del formulario? ',
-       'noisette_label_identifiant' => 'Formulario a mostrar:',
-       'noisette_nom_noisette_formulaire' => 'Formulario',
-
-       // R
-       'reponse_aucune' => 'Ninguna respuesta',
-       'reponse_intro' => '@auteur@ respondió el formulario @formulaire@',
-       'reponse_numero' => 'Respuesta numéro:',
-       'reponse_statut' => 'Esta respuesta es:',
-       'reponse_supprimer' => 'Eliminar esta respuesta',
-       'reponse_supprimer_confirmation' => '¿Estás seguro de que deseas eliminar esta respuesta?',
-       'reponse_une' => '1 respuesta',
-       'reponses_analyse' => 'Analizar las respuestas',
-       'reponses_anonyme' => 'Anónimo',
-       'reponses_auteur' => 'Usuario',
-       'reponses_exporter' => 'Exportar las respuestas',
-       'reponses_exporter_statut_tout' => 'Todas',
-       'reponses_ip' => 'Dirección IP',
-       'reponses_liste' => 'Lista de respuestas',
-       'reponses_liste_prop' => 'Respuestas pendientes de validación',
-       'reponses_liste_publie' => 'Todas las respuestas validadas',
-       'reponses_nb' => '@nb@ respuestas',
-       'reponses_supprimer' => 'Borrar todas las respuestas a este formulario', # MODIF
-       'reponses_supprimer_confirmation' => '¿Confirma la supresión de todas las respuestas a este formulario?',
-       'reponses_voir_detail' => 'Ver la respuesta',
-       'retour_aucun_traitement' => 'Su respuesta ha sido enviada, pero ningún tratamiento ha sido definido para este formulario. ¡No se hizo nada con sus datos!',
-
-       // S
-       'sans_reponses' => 'Sin respuesta',
-
-       // T
-       'texte_statut_poubelle' => 'borrada', # MODIF
-       'texte_statut_propose_evaluation' => 'propuesta',
-       'texte_statut_publie' => 'validada',
-       'texte_statut_refuse' => 'archivado',
-       'titre_cadre_raccourcis' => 'Accesos directos',
-       'titre_formulaires_archives' => 'Archivos',
-       'titre_reponses' => 'Respuestas',
-       'traitements_actives' => 'Tratamientos activados',
-       'traitements_aide_memoire' => 'Ayuda memoria: ',
-       'traitements_avertissement_creation' => 'Los cambios en los campos del formulario se han guardado correctamente. Ahora puedes definir que tratamientos se llevarán a cabo cuando se utilice el formulario.',
-       'traitements_avertissement_modification' => 'Los cambios en los campos del formulario se han guardado correctamente. <strong>Algunos tratamientos pueden necesitar ser reconfigurados en consecuencia. </strong>',
-       'traitements_champ_aucun' => 'Ninguno',
-       'traiter_email_description' => 'Publicar los resultados del formulario por correo electrónico a una lista de destinatarios.', # MODIF
-       'traiter_email_horodatage' => 'Formulario "@formulaire@" publicado el @date@ a las @heure@.',
-       'traiter_email_message_erreur' => 'Se ha producido un error al enviar el correo electrónico. ',
-       'traiter_email_message_ok' => 'Tu mensaje ha sido enviado por correo electrónico.',
-       'traiter_email_option_activer_accuse_label_case' => 'También enviar un correo electrónico al remitente con un mensaje de confirmación.',
-       'traiter_email_option_destinataires_champ_form_explication' => 'Si uno de sus campos es una dirección de correo electrónico y si desea mandar el formulario a esta dirección, seleccione el campo.',
-       'traiter_email_option_destinataires_champ_form_label' => 'Destinatario presente en uno de los campos de los formularios',
-       'traiter_email_option_destinataires_explication' => 'Elige el campo que corresponde a los destinatarios del mensaje.',
-       'traiter_email_option_destinataires_label' => 'Destinatarios',
-       'traiter_email_option_destinataires_plus_explication' => 'Una lista de direcciones separadas por coma',
-       'traiter_email_option_destinataires_plus_label' => 'Destinatarios extra',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Selecciona el campo que contendrá la dirección de correo electrónico del remitente.',
-       'traiter_email_option_envoyeur_courriel_label' => 'Enviar email',
-       'traiter_email_option_envoyeur_nom_explication' => 'Construye este nombre usando los @raccourcis@ (usa la ayuda memoria). Si lo dejas en blanco se usará el nombre del sitio. ',
-       'traiter_email_option_envoyeur_nom_label' => 'Nombre del remitente',
-       'traiter_email_option_sujet_accuse_label' => 'Asunto del acuse de recibo. ',
-       'traiter_email_option_sujet_explication' => 'Construye este asunto usando los @raccourcis@ (usa la ayuda memoria). Si lo dejas en blanco se usará uno por defecto. ',
-       'traiter_email_option_sujet_label' => 'Asunto del mensaje',
-       'traiter_email_option_vrai_envoyeur_explication' => 'Algunos servidores SMTP no permiten el uso de un correo electrónico arbitrario para el campo "From". Por esta razón Formidable inserta  por defecto el correo del remitente en el campo "Reply-to". Marca aquí para insertarlo en el campo "From".',
-       'traiter_email_option_vrai_envoyeur_label' => 'Inserta el correo del remitente en el campo "From"',
-       'traiter_email_page' => '<a href="@url@">Desde esta página</a>.',
-       'traiter_email_sujet' => '@nom@ ha escrito a usted.',
-       'traiter_email_sujet_accuse' => 'Gracias por su respuesta. ',
-       'traiter_email_titre' => 'Enviar por correo electrónico',
-       'traiter_email_url_enregistrement' => 'Puede gestionar las respuestas <a href="@url@">desde esta página</a>.', # MODIF
-       'traiter_enregistrement_description' => 'Salvar los resultados del formulario en una base de datos', # MODIF
-       'traiter_enregistrement_erreur_base' => 'Se ha producido un error técnico mientras se escribía en la base de datos',
-       'traiter_enregistrement_erreur_deja_repondu' => 'Usted ya ha respondido a este formulario.',
-       'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La respuesta a editar no puso ser encontrada. ',
-       'traiter_enregistrement_message_ok' => 'Gracias. Sus respuestas fueron grabadas.', # MODIF
-       'traiter_enregistrement_option_anonymiser_explication' => 'Resultados anónimos (no mantener ningún tipo de datos de los usuarios que han respondido).',
-       'traiter_enregistrement_option_anonymiser_label' => 'Anonimizar el formulario',
-       'traiter_enregistrement_option_anonymiser_variable_explication' => '¿Qué variable de sistema utilizará para calcular un valor único para cada autor sin revelar su identidad ?',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Variable del formulario que anonimiza',
-       'traiter_enregistrement_option_auteur' => 'Utilizar l@s autor@s para los formularios',
-       'traiter_enregistrement_option_auteur_explication' => 'Atribuir un@ o vari@s autor@s a un formulario. Si esta opción esta activada, solo l@s autor@s de un formulario podrán acceder a sus datos.',
-       'traiter_enregistrement_option_choix_select_label' => 'Seleccione una variable de las disponibles',
-       'traiter_enregistrement_option_identification_explication' => '¿Si las respuestas se pueden modificar, cuál es el método para usar en primer lugar para conocer la respuesta a modificar?',
-       'traiter_enregistrement_option_identification_label' => 'Identificación',
-       'traiter_enregistrement_option_ip_label' => 'Grabar las IPs (ocultadas después de un tiempo de guardia)',
-       'traiter_enregistrement_option_moderation_label' => 'Moderación',
-       'traiter_enregistrement_option_modifiable_explication' => 'Modificable: Los visitantes pueden cambiar sus respuestas con posterioridad.',
-       'traiter_enregistrement_option_modifiable_label' => 'Respuestas modificables',
-       'traiter_enregistrement_option_multiple_explication' => 'Multiple: Una misma persona puede responder varias veces el formulario.',
-       'traiter_enregistrement_option_multiple_label' => 'Respuestas múltiples',
-       'traiter_enregistrement_titre' => 'Registra los resultados',
-
-       // V
-       'voir_exporter' => 'Exportar el formulario',
-       'voir_numero' => 'Formulario número:',
-       'voir_reponses' => 'Ver las respuesta',
-       'voir_traitements' => 'Tratamientos'
-);
diff --git a/www/plugins/formidable/lang/formidable_fr.php b/www/plugins/formidable/lang/formidable_fr.php
deleted file mode 100644 (file)
index fed3ae3..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activer_pages_explication' => 'Par défaut, les pages publiques des formulaires ne sont pas autorisées',
-       'activer_pages_label' => 'Autoriser la création de pages publique pour les formulaires',
-       'admin_reponses_auteur' => 'Autoriser les auteurs des formulaires à modifier les réponses',
-       'admin_reponses_auteur_explication' => 'Seul les administrateurs peuvent normalement modifier les réponses apportées à un formulaire (à la poubelle, publiée, proposé à l’évaluation). Cette option permet à un auteur d’un formulaire d’en modifier le statut (au risque de fausser d’éventuelles statistiques).',
-       'analyse_avec_reponse' => 'Réponses non-vide',
-       'analyse_exclure_champs_explication' => 'Mettre le nom des champs à exclure dans l’analyse, séparé par des <code>|</code>. Ne pas mettre les <code>@</code>.',
-       'analyse_exclure_champs_label' => 'Champs à exclure',
-       'analyse_exporter' => 'Exporter l’analyse',
-       'analyse_longueur_moyenne' => 'Longueur moyenne en nombre de mots',
-       'analyse_nb_reponses_total' => '@nb@ personnes ont répondu à ce formulaire.',
-       'analyse_sans_reponse' => 'Laissés blanc',
-       'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.',
-       'analyse_zero_reponse_total' => 'Aucune personne n’a répondu à ce formulaire.',
-       'aucun_traitement' => 'Aucun traitement',
-       'autoriser_admin_restreint' => 'Autoriser les administrateurs restreints à créer et modifier les formulaires',
-       'autoriser_admin_restreint_explication' => 'Par défaut, seuls les administrateurs ont accès à la création et modification des formulaires',
-
-       // B
-       'bouton_formulaires' => 'Formulaires',
-       'bouton_revert_formulaire' => 'Revenir à la dernière version enregistrée',
-
-       // C
-       'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
-       sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
-       <code>orange</code>, <code>green</code> ou tout ce qui vous plairait !',
-       'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression',
-       'cfg_objets_explication' => 'Choisir les contenus auxquels pourront être liés les formulaires.',
-       'cfg_objets_label' => 'Lier les formulaires aux contenus',
-       'cfg_titre_page_configurer_formidable' => 'Configurer Formidable',
-       'cfg_titre_parametrages_analyse' => 'Paramétrages de l’analyse des réponses',
-       'champs' => 'Champs',
-       'changer_statut' => 'Ce formulaire est :',
-       'creer_dossier_formulaire_erreur_impossible_creer' => 'Impossible de créer le dossier @dossier@,  nécessaire pour stocker les fichiers. Vérifier les droits d’accès.',
-       'creer_dossier_formulaire_erreur_impossible_ecrire' => 'Impossible d’écrire dans le  @dossier@,  nécessaire pour stocker les fichiers. Vérifier les droits d’accès.',
-       'creer_dossier_formulaire_erreur_possible_lire_exterieur' => 'Il est possible de lire à distance le contenu du dossier  @dossier@. Ceci est problématique en terme de confidentialité des données.',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_apres_choix_formulaire' => 'Le formulaire, à nouveau',
-       'editer_apres_choix_redirige' => 'Rediriger vers une nouvelle adresse',
-       'editer_apres_choix_rien' => 'Rien du tout',
-       'editer_apres_choix_stats' => 'Les statistiques des réponses',
-       'editer_apres_choix_valeurs' => 'Les valeurs saisies',
-       'editer_apres_explication' => 'Après validation, afficher à la place du formulaire :',
-       'editer_apres_label' => 'Afficher ensuite',
-       'editer_css' => 'Classes CSS',
-       'editer_descriptif' => 'Descriptif',
-       'editer_descriptif_explication' => 'Une explication du formulaire destinée à l’espace privé.',
-       'editer_identifiant' => 'Identifiant',
-       'editer_identifiant_explication' => 'Donnez un identifiant textuel unique qui vous permettra d’appeler plus facilement le formulaire. L’identifiant ne peut contenir que des chiffres, lettres latines non accentuées et le caractère "_".',
-       'editer_menu_auteurs' => 'Configurer les auteurs',
-       'editer_menu_champs' => 'Configurer les champs',
-       'editer_menu_formulaire' => 'Configurer le formulaire',
-       'editer_menu_traitements' => 'Configurer les traitements',
-       'editer_message_erreur_unicite_explication' => 'Si vous laissez ce champ vide, le message d’erreur par défaut de formidable s’affichera',
-       'editer_message_erreur_unicite_label' => 'Message d’erreur quand un champ n’est pas unique',
-       'editer_message_ok' => 'Message de retour',
-       'editer_message_ok_explication' => 'Vous pouvez personnaliser le message qui sera affiché à l’utilisateur après l’envoi d’un formulaire valide.',
-       'editer_modifier_formulaire' => 'Modifier le formulaire',
-       'editer_nouveau' => 'Nouveau formulaire',
-       'editer_redirige_url' => 'Adresse de redirection après validation',
-       'editer_redirige_url_explication' => 'Laissez vide si vous souhaitez rester sur la même page',
-       'editer_resume_reponse' => 'Affichage résumé de la réponse',
-       'editer_resume_reponse_explication' => 'Cette chaîne sera utilisée pour afficher un résumé de chaque réponse dans les listes. Les champs comme <tt>@input_1@</tt> seront remplacés comme indiqué par l’aide mémoire ci-contre.',
-       'editer_titre' => 'Titre',
-       'editer_unicite_explication' => 'Enregistrer le formulaire seulement si un champ est unique',
-       'editer_unicite_label' => 'Vérifier l’unicité d’un champ',
-       'erreur_autorisation' => 'Vous n’avez pas le droit d’éditer les formulaires du site.',
-       'erreur_base' => 'Une erreur technique est survenue durant l’enregistrement.',
-       'erreur_deplacement_fichier' => 'Le fichier « @nom@ » n’a pas pu être stocké correctement par le système. Contactez le webmestre.',
-       'erreur_fichier_expire' => 'Le lien pour télécharger le fichier est trop ancien.',
-       'erreur_fichier_introuvable' => 'Le fichier demandé est introuvable.',
-       'erreur_generique' => 'Il y a des erreurs dans les champs ci-dessous, veuillez vérifier votre envoi.',
-       'erreur_identifiant' => 'Cet identifiant est déjà utilisé.',
-       'erreur_identifiant_format' => 'L’identifiant ne peut contenir que des chiffres, lettres latines non accentuées et le caractère "_"',
-       'erreur_importer_forms' => 'Erreur durant l’importation du formulaire Forms&Tables',
-       'erreur_importer_wcs' => 'Erreur durant l’importation du formulaire W.C.S',
-       'erreur_importer_yaml' => 'Erreur durant l’importation du fichier YAML',
-       'erreur_inexistant' => 'Le formulaire n’existe pas.',
-       'erreur_unicite' => 'Cette valeur est déjà utilisée',
-       'exporter_formulaire_date_debut_label' => 'À partir de',
-       'exporter_formulaire_date_erreur' => 'La date de début doit être antérieure à la date de fin',
-       'exporter_formulaire_date_fin_label' => 'Jusqu’au',
-       'exporter_formulaire_format_label' => 'Format du fichier',
-       'exporter_formulaire_statut_label' => 'Réponses',
-
-       // F
-       'formulaire_anonyme_explication' => 'Ce formulaire est anonyme, c’est à dire que l’identité de l’utilisateur n’est pas enregistrée.',
-       'formulaires_aucun' => 'Il n’y a pour l’instant aucun formulaire.',
-       'formulaires_aucun_champ' => 'Il n’y a pour l’instant aucun champ de saisie pour ce formulaire.',
-       'formulaires_corbeille_tous' => '@nb@ formulaires dans la corbeille',
-       'formulaires_corbeille_un' => 'Un formulaire dans la corbeille',
-       'formulaires_dupliquer' => 'Dupliquer le formulaire',
-       'formulaires_dupliquer_copie' => '(copie)',
-       'formulaires_introduction' => 'Créez et configurez ici les formulaires de votre site.',
-       'formulaires_nouveau' => 'Créer un nouveau formulaire',
-       'formulaires_reponses_corbeille_tous' => '@nb@ réponses de formulaire dans la corbeille',
-       'formulaires_reponses_corbeille_un' => 'Une réponse de formulaire dans la corbeille',
-       'formulaires_supprimer' => 'Supprimer le formulaire',
-       'formulaires_supprimer_confirmation' => 'Attention, cela supprimera aussi tous les résultats. Êtes-vous sûr de vouloir supprimer ce formulaire ?',
-       'formulaires_tous' => 'Tous les formulaires',
-
-       // H
-       'heures_minutes_secondes' => '@h@h @m@min @s@s',
-
-       // I
-       'id_formulaires_reponse' => 'Identifiant de la réponse',
-       'identification_par_cookie' => 'Par cookie',
-       'identification_par_id_auteur' => 'Par l’identifiant (id_auteur) de la personne authentifiée',
-       'importer_formulaire' => 'Importer un formulaire',
-       'importer_formulaire_fichier_label' => 'Fichier à importer',
-       'importer_formulaire_format_label' => 'Format du fichier',
-       'info_1_formulaire' => '1 formulaire',
-       'info_1_reponse' => '1 réponse',
-       'info_aucun_formulaire' => 'Aucun formulaire',
-       'info_aucune_reponse' => 'Aucune réponse',
-       'info_formulaire_refuse' => 'Archivé',
-       'info_formulaire_utilise_par' => 'Formulaire utilisé par :',
-       'info_nb_formulaires' => '@nb@ formulaires',
-       'info_nb_reponses' => '@nb@ réponses',
-       'info_reponse_proposee' => 'À modérer',
-       'info_reponse_proposees' => 'À modérer',
-       'info_reponse_publiee' => 'Validée',
-       'info_reponse_publiees' => 'Validées',
-       'info_reponse_refusee' => 'Refusée',
-       'info_reponse_refusees' => 'Refusées',
-       'info_reponse_supprimee' => 'À la corbeille',
-       'info_reponse_supprimees' => 'À la corbeille',
-       'info_reponse_toutes' => 'Toutes',
-       'info_utilise_1_formulaire' => 'Formulaire utilisé :',
-       'info_utilise_nb_formulaires' => 'Formulaires utilisés :',
-
-       // J
-       'jours_heures_minutes_secondes' => '@j@j @h@h @m@min @s@s',
-
-       // L
-       'lien_expire' => 'Lien expirant dans @delai@',
-       'liens_ajouter' => 'Ajouter un formulaire',
-       'liens_ajouter_lien' => 'Ajouter ce formulaire',
-       'liens_creer_associer' => 'Créer et associer un formulaire',
-       'liens_retirer_lien_formulaire' => 'Retirer ce formulaire',
-       'liens_retirer_tous_liens_formulaires' => 'Retirer tous les formulaires',
-
-       // M
-       'minutes_secondes' => '@m@min @s@s',
-       'modele_label_formulaire_formidable' => 'Quel formulaire ?',
-       'modele_nom_formulaire' => 'un formulaire',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => 'Afficher le titre du formulaire ?',
-       'noisette_label_identifiant' => 'Formulaire à afficher :',
-       'noisette_nom_noisette_formulaire' => 'Formulaire',
-
-       // P
-       'pas_analyse_fichiers' => 'Formidable ne propose pas (encore) d’analyse des fichiers envoyés',
-
-       // R
-       'reponse_aucune' => 'Aucune réponse',
-       'reponse_intro' => '@auteur@ a répondu au formulaire @formulaire@',
-       'reponse_maj' => 'Dernière modification',
-       'reponse_numero' => 'Réponse numéro :',
-       'reponse_statut' => 'Cette réponse est :',
-       'reponse_supprimer' => 'Supprimer cette réponse',
-       'reponse_supprimer_confirmation' => 'Êtes-vous sûr de vouloir supprimer cette réponse ?',
-       'reponse_une' => '1 réponse',
-       'reponses_analyse' => 'Analyse des réponses',
-       'reponses_anonyme' => 'Anonyme',
-       'reponses_auteur' => 'Utilisateur',
-       'reponses_exporter' => 'Exporter les réponses',
-       'reponses_exporter_format_csv' => 'Tableur .CSV',
-       'reponses_exporter_format_xls' => 'Excel .XLS',
-       'reponses_exporter_statut_publie' => 'Publiées',
-       'reponses_exporter_statut_tout' => 'Toutes',
-       'reponses_exporter_telecharger' => 'Télécharger',
-       'reponses_ip' => 'Adresse IP',
-       'reponses_liste' => 'Liste des réponses',
-       'reponses_liste_prop' => 'Réponses en attente de validation',
-       'reponses_liste_publie' => 'Toutes les réponses validées',
-       'reponses_nb' => '@nb@ réponses',
-       'reponses_supprimer' => 'Supprimer toutes les réponses',
-       'reponses_supprimer_confirmation' => 'Êtes-vous sûr de vouloir supprimer toutes les réponses à ce formulaire ?',
-       'reponses_voir_detail' => 'Voir la réponse',
-       'retour_aucun_traitement' => 'Votre réponse a bien été envoyée, mais aucun traitement n’a été défini pour ce formulaire. Il ne fait donc rien. :)',
-
-       // S
-       'sans_reponses' => 'Sans réponse',
-       'secondes' => '@s@s',
-
-       // T
-       'texte_statut_poubelle' => 'à la poubelle',
-       'texte_statut_propose_evaluation' => 'proposée',
-       'texte_statut_publie' => 'validée',
-       'texte_statut_refuse' => 'archivé',
-       'texte_statut_refusee' => 'refusée',
-       'titre_cadre_raccourcis' => 'Raccourcis',
-       'titre_formulaires_archives' => 'Archives',
-       'titre_reponses' => 'Réponses',
-       'traitements_actives' => 'Traitements activés',
-       'traitements_aide_memoire' => 'Aide mémoire :',
-       'traitements_avertissement_creation' => 'Les modifications sur les champs du formulaire ont été enregistrées avec succès. Vous pouvez maintenant définir quels traitements seront effectués lors de l’utilisation du formulaire.',
-       'traitements_avertissement_modification' => 'Les modifications sur les champs du formulaire ont été enregistrées avec succès. <strong>Certains traitements doivent peut-être être reconfigurés en conséquence.</strong>',
-       'traitements_champ_aucun' => 'Aucun',
-       'traiter_email_description' => 'Poster par courriel le résultat du formulaire  à une liste de destinataires.',
-       'traiter_email_horodatage' => 'Formulaire "@formulaire@" posté le @date@ à @heure@.',
-       'traiter_email_message_erreur' => 'Une erreur est survenue lors de l’envoi du courriel.',
-       'traiter_email_message_ok' => 'Votre message a bien été envoyé par courriel.',
-       'traiter_email_option_activer_accuse_label_case' => 'Envoyer aussi un courriel à l’adresse de l’envoyeur avec un message de confirmation.',
-       'traiter_email_option_activer_ip_label_case' => 'Envoyer l’adresse IP de l’envoyeur aux destinataires.',
-       'traiter_email_option_courriel_envoyeur_accuse_explication' => 'Précisez le courriel utilisé pour envoyer l’accusé de réception. À défaut, le destinataire sera l’expéditeur.',
-       'traiter_email_option_courriel_envoyeur_accuse_label' => 'Courriel de l’accusé de réception',
-       'traiter_email_option_destinataires_champ_form_explication' => 'Si un de vos champ est une adresse email et que vous souhaitez envoyer le formulaire à cette adresse, sélectionnez le champ.',
-       'traiter_email_option_destinataires_champ_form_label' => 'Destinaire présent dans un des champ des formulaires',
-       'traiter_email_option_destinataires_explication' => 'Choisissez le champ qui correspondra aux destinataires du message.',
-       'traiter_email_option_destinataires_label' => 'Destinataires',
-       'traiter_email_option_destinataires_plus_explication' => 'Une liste d’adresses séparées par des virgules.',
-       'traiter_email_option_destinataires_plus_label' => 'Destinataires supplémentaires',
-       'traiter_email_option_destinataires_selon_champ_explication' => 'Permet d’indiquer un ou plusieurs destinataires en fonction de la valeur d’un champ. 
-       Indiquer le champ, sa valeur, et le ou les courriels concernés (séparés par une virgule) suivant ce format, tel que : "@selection_1@/choix1 : mail@example.tld". Vous pouvez indiquer plusieurs tests, en revenant à la ligne entre chaque test.',
-       'traiter_email_option_destinataires_selon_champ_label' => 'Destinataires en fonction d’un champ',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Choisissez le champ qui contiendra le courriel de l’envoyeur.',
-       'traiter_email_option_envoyeur_courriel_label' => 'Courriel de l’envoyeur',
-       'traiter_email_option_envoyeur_nom_explication' => 'Construisez ce nom à l’aide des @raccourcis@ (cf. l’aide mémoire). Si vous ne mettez rien, ce sera le nom du site.',
-       'traiter_email_option_envoyeur_nom_label' => 'Nom de l’envoyeur',
-       'traiter_email_option_exclure_champs_email_explication' => 'Si vous souhaitez que certains champs ne s’affichent pas dans les emails envoyés (par exemple des champs cachés), il suffit de les définir ici, séparés par une virgule.',
-       'traiter_email_option_exclure_champs_email_label' => 'Champs à exclure du contenu du message',
-       'traiter_email_option_masquer_liens_label_case' => 'Masquer les liens d’administration dans le courriel.',
-       'traiter_email_option_nom_envoyeur_accuse_explication' => 'Précisez le nom de l’expéditeur utilisé pour envoyer l’accusé de réception. À défaut, le destinataire sera l’expéditeur.',
-       'traiter_email_option_nom_envoyeur_accuse_label' => 'Nom de l’expéditeur de l’accusé de réception',
-       'traiter_email_option_pj_explication' => 'Si les documents postés pèsent moins de _FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL Mio (constante modifiable par le·la webmestre).',
-       'traiter_email_option_pj_label' => 'Joindre les fichiers dans le courriel',
-       'traiter_email_option_sujet_accuse_label' => 'Sujet de l’accusé de réception',
-       'traiter_email_option_sujet_explication' => 'Construisez le sujet à l’aide des @raccourcis@. Si vous ne mettez rien, le sujet sera construit automatiquement.',
-       'traiter_email_option_sujet_label' => 'Sujet du message',
-       'traiter_email_option_vrai_envoyeur_explication' => 'Certains serveurs SMTP ne permettent pas d’utiliser un courriel arbitraire pour le champ "From". Pour cette raison Formidable insère par défaut le courriel de l’envoyeur dans le champ "Reply-To". Cocher ici pour insèrer le courriel dans le champ "From".',
-       'traiter_email_option_vrai_envoyeur_label' => 'Insérer le courriel de l’envoyeur dans le champ "From"',
-       'traiter_email_page' => '<a href="@url@">Depuis cette page</a>.',
-       'traiter_email_sujet' => '@nom@ vous a écrit.',
-       'traiter_email_sujet_accuse' => 'Merci de votre réponse.',
-       'traiter_email_titre' => 'Envoyer par courriel',
-       'traiter_email_url_enregistrement' => 'Vous pouvez gérer l’ensemble des réponses <a href="@url@">sur cette page</a>.',
-       'traiter_email_url_enregistrement_precis' => 'Vous pouvez voir cette réponse <a href="@url@">sur cette page</a>.',
-       'traiter_enregistrement_description' => 'Enregistrer les résultats du formulaire dans la base de données',
-       'traiter_enregistrement_erreur_base' => 'Une erreur technique est survenue durant l’enregistrement en base de données',
-       'traiter_enregistrement_erreur_deja_repondu' => 'Vous avez déjà répondu à ce formulaire.',
-       'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La réponse à éditer est introuvable.',
-       'traiter_enregistrement_message_ok' => 'Merci. Vos réponses ont bien été enregistrées.',
-       'traiter_enregistrement_option_anonymiser_explication' => 'Résultats anonymes (ne pas garder de traces de l’identifiant des personnes ayant répondu).',
-       'traiter_enregistrement_option_anonymiser_label' => 'Anonymiser le formulaire',
-       'traiter_enregistrement_option_anonymiser_variable_explication' => 'Quelle variable système utiliser pour calculer une valeur unique pour chaque auteur sans pour autant révéler son identité.',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Variable à partir de laquelle anonymiser le formulaire',
-       'traiter_enregistrement_option_auteur' => 'Utiliser les auteurs pour les formulaires',
-       'traiter_enregistrement_option_auteur_explication' => 'Attribuer un ou plusieurs auteurs à un formulaire. Si cette option est activée, seuls les auteurs d’un formulaire pourront accéder à leurs données.',
-       'traiter_enregistrement_option_choix_select_label' => 'Choisir une variable parmi celles proposées',
-       'traiter_enregistrement_option_effacement_delai_label' => 'Nombre de jours avant effacement',
-       'traiter_enregistrement_option_effacement_label' => 'Effacer régulièrement les résultats les plus anciens',
-       'traiter_enregistrement_option_identification_explication' => 'Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?',
-       'traiter_enregistrement_option_identification_label' => 'Identification',
-       'traiter_enregistrement_option_ip_label' => 'Enregistrer les IPs (masquées après un délai de garde)',
-       'traiter_enregistrement_option_moderation_label' => 'Modération',
-       'traiter_enregistrement_option_modifiable_explication' => 'Modifiable : Les visiteurs peuvent modifier leurs réponses après coup.',
-       'traiter_enregistrement_option_modifiable_label' => 'Réponses modifiables',
-       'traiter_enregistrement_option_multiple_explication' => 'Multiple : Une même personne peut répondre plusieurs fois.',
-       'traiter_enregistrement_option_multiple_label' => 'Réponses multiples',
-       'traiter_enregistrement_titre' => 'Enregistrer les résultats',
-
-       // V
-       'voir_exporter' => 'Exporter le formulaire',
-       'voir_numero' => 'Formulaire numéro :',
-       'voir_reponses' => 'Voir les réponses',
-       'voir_traitements' => 'Traitements'
-);
diff --git a/www/plugins/formidable/lang/formidable_it.php b/www/plugins/formidable/lang/formidable_it.php
deleted file mode 100644 (file)
index 476145f..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=it
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'analyse_avec_reponse' => 'Risposte non vuote',
-       'analyse_exporter' => 'Esporta l’analisi',
-       'analyse_longueur_moyenne' => 'Lunghezza media in numero di parole',
-       'analyse_sans_reponse' => 'Risposte vuote',
-
-       // B
-       'bouton_formulaires' => 'Moduli',
-
-       // C
-       'champs' => 'Campi',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_apres_choix_formulaire' => 'Il modulo, nuovamente',
-       'editer_apres_choix_redirige' => 'Redirigi verso un nuovo indirizzo',
-       'editer_apres_choix_rien' => 'Assolutamente niente',
-       'editer_apres_choix_valeurs' => 'I valori immessi',
-       'editer_apres_explication' => 'Dopo la validazione, mostra al posto del modulo:',
-       'editer_apres_label' => 'Mostra di seguito',
-       'editer_descriptif' => 'Descrizione',
-       'editer_descriptif_explication' => 'Una spiegazione del modulo destinata allo spazio redazionale.',
-       'editer_identifiant' => 'Identificativo',
-       'editer_identifiant_explication' => 'Fornisci un identificativo testuale unico che ti permetterà di richiamare più facilmente il modulo.', # MODIF
-       'editer_menu_champs' => 'Configura i campi',
-       'editer_menu_formulaire' => 'Configura il modulo',
-       'editer_menu_traitements' => 'Configura i trattamenti',
-       'editer_message_ok' => 'Messaggio di risposta',
-       'editer_message_ok_explication' => 'Puoi personalizzare il messaggio che sarà mostrato all’utente dopo l’invio di un modulo valido.',
-       'editer_modifier_formulaire' => 'Modifica il modulo',
-       'editer_nouveau' => 'Nuovo modulo',
-       'editer_redirige_url' => 'Indirizzo di redirezione dopo la validazione',
-       'editer_redirige_url_explication' => 'Lascia vuoto se desideri restare sulla stessa pagina',
-       'editer_titre' => 'Titolo',
-       'erreur_autorisation' => 'Non hai i permessi per la modifica dei moduli del sito.',
-       'erreur_base' => 'Un problema tecnico si è verificato rurante il salvataggio.',
-       'erreur_generique' => 'Ci sono degli errori nei campi di seguito, si prega di verificare i dati.',
-       'erreur_identifiant' => 'Questo identificativo è già utilizzato.',
-       'erreur_importer_forms' => 'Errore durante l’importazione del modulo Forms&Tables',
-       'erreur_importer_wcs' => 'Errore durante l’importazione del modulo W.C.S',
-       'erreur_importer_yaml' => 'Errore durante l’importazione del modulo YAML',
-       'erreur_inexistant' => 'Il modulo non esiste.',
-       'exporter_formulaire_format_label' => 'Formato del file',
-
-       // F
-       'formulaires_aucun' => 'Al momento non è presente alcun modulo.',
-       'formulaires_dupliquer' => 'Duplica il modulo',
-       'formulaires_dupliquer_copie' => '(copia)',
-       'formulaires_introduction' => 'Crea e configura qui i moduli del tuo sito.',
-       'formulaires_nouveau' => 'Crea un nuovo modulo',
-       'formulaires_supprimer' => 'Elimina il modulo',
-       'formulaires_supprimer_confirmation' => 'Attenzione, si sta per eliminare anche tutte le risposte. Sei sicuro di voler eliminare il modulo?',
-       'formulaires_tous' => 'Tutti i moduli',
-
-       // I
-       'identification_par_cookie' => 'Con i cookie',
-       'identification_par_id_auteur' => 'con l’identificativo (id_auteur) dell’utente autentificato',
-       'importer_formulaire' => 'Importa un modulo',
-       'importer_formulaire_fichier_label' => 'File da importare',
-       'importer_formulaire_format_label' => 'Formato del file',
-
-       // M
-       'modele_label_formulaire_formidable' => 'Quale modulo?',
-       'modele_nom_formulaire' => 'un modulo',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => 'Mostro il titolo del modulo?',
-       'noisette_label_identifiant' => 'Modulo da mostrare:',
-       'noisette_nom_noisette_formulaire' => 'Modulo',
-
-       // R
-       'reponse_intro' => '@auteur@ ha risposto al modulo @formulaire@',
-       'reponse_numero' => 'Risposta numero:',
-       'reponse_statut' => 'Questa risposta è:',
-       'reponse_supprimer' => 'Elimina questa risposta',
-       'reponse_supprimer_confirmation' => 'Sei sicuro di voler eliminare questa risposta?',
-       'reponses_analyse' => 'Analisi delle risposte',
-       'reponses_anonyme' => 'Anonimo',
-       'reponses_auteur' => 'Utente',
-       'reponses_exporter' => 'Esporta le risposte',
-       'reponses_ip' => 'Indirizzo IP',
-       'reponses_liste' => 'Elenco delle risposte',
-       'reponses_liste_prop' => 'Risposte in attesa di validazione',
-       'reponses_liste_publie' => 'Tutte le risposte valide',
-       'reponses_voir_detail' => 'Vedi la risposta',
-       'retour_aucun_traitement' => 'La risposta è stata correttamente inviata. Grazie :)',
-
-       // S
-       'sans_reponses' => 'Senza risposta',
-
-       // T
-       'traitements_aide_memoire' => 'Promemoria:',
-       'traitements_avertissement_creation' => 'Le modifiche ai campi del modulo sono state registrate con successo. Ora puoi definire quali trattamenti saranno effettuati all’atto dell’invio del modulo.',
-       'traitements_avertissement_modification' => 'La modifiche ai campi del modulo sono state registrate con successo. <strong>Alcuni trattamenti devono forse essere riconfigurati di conseguenza.</strong>',
-       'traitements_champ_aucun' => 'Nessuno',
-       'traiter_email_description' => 'Invia il risultato del modulo per posta a un elenco di destinatari.', # MODIF
-       'traiter_email_horodatage' => 'Modulo "@formulaire@" inviato il @date@ alle @heure@.',
-       'traiter_email_message_erreur' => 'Si è verificato un errore all’atto dell’invio dell’email.',
-       'traiter_email_message_ok' => 'Il tuo messaggio è stato inviato per posta elettronica.',
-       'traiter_email_option_activer_accuse_label_case' => 'Invia anche una email all’indirizzo del mittente con un messaggio di conferma.',
-       'traiter_email_option_destinataires_explication' => 'Scegli il campo che corrisponde al destinatario del messaggio.',
-       'traiter_email_option_destinataires_label' => 'Destinatari',
-       'traiter_email_option_destinataires_plus_explication' => 'Un elenco di indirizzi separati da virgole.',
-       'traiter_email_option_destinataires_plus_label' => 'Destinatari supplementari',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Scegli il campo che contiene l’indirizzo dell’utente.',
-       'traiter_email_option_envoyeur_courriel_label' => 'Indirizzo del mittente',
-       'traiter_email_option_envoyeur_nom_explication' => 'Costruisci questo nome grazie all’aiuto dei @segnaposto@ (vedi il promemoria). Se non inserisci nulla, verrà inserito il nome del sito.',
-       'traiter_email_option_envoyeur_nom_label' => 'Nome del mittente',
-       'traiter_email_option_sujet_accuse_label' => 'Oggetto della conferma di ricezione',
-       'traiter_email_option_sujet_explication' => 'Costruisci l’oggetto grazie all’aiuto dei @segnaposto@. Se non inserisci nulla, l’oggetto verrà generato automaticamente.',
-       'traiter_email_option_sujet_label' => 'Oggetto del messaggio',
-       'traiter_email_page' => '<a href="@url@">Da questa pagina</a>.',
-       'traiter_email_sujet' => '@nom@ ti ha scritto.',
-       'traiter_email_sujet_accuse' => 'Grazie per aver risposto.',
-       'traiter_email_titre' => 'Invia per posta',
-       'traiter_email_url_enregistrement' => 'Puoi gestire le risposte <a href="@url@">su questa pagina</a>.', # MODIF
-       'traiter_enregistrement_description' => 'Salva i risultati del modulo nella base dati', # MODIF
-       'traiter_enregistrement_erreur_base' => 'Si è verificato un errore tecnico durante il salvataggio in database',
-       'traiter_enregistrement_erreur_deja_repondu' => 'Hai già risposto a questo modulo.',
-       'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La risposta da modificare non esiste.',
-       'traiter_enregistrement_option_anonymiser_explication' => 'Fare i risultati di forma anonima (non conservare traccia di identificazione degli intervistati).', # MODIF
-       'traiter_enregistrement_option_anonymiser_label' => 'Modo anonimo',
-       'traiter_enregistrement_option_anonymiser_variable_explication' => 'Quale variabile di sistema utilizzato per calcolare un singolo valore per ogni autore, senza rivelare la propria identità.',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Variabile da cui la forma anonima',
-       'traiter_enregistrement_option_identification_explication' => 'Se le risposte sono modificabili, quale procedura si dovrà utilizzare in priorità per individuare la risposta da modificare?',
-       'traiter_enregistrement_option_identification_label' => 'Identificazione',
-       'traiter_enregistrement_option_moderation_label' => 'Moderazione',
-       'traiter_enregistrement_option_modifiable_explication' => 'Gli utenti possono modificare le loro risposte dopo aver inviato il modulo?', # MODIF
-       'traiter_enregistrement_option_modifiable_label' => 'Risposte modificabili',
-       'traiter_enregistrement_option_multiple_explication' => 'Un utente può risposndere più al modulo?', # MODIF
-       'traiter_enregistrement_option_multiple_label' => 'Risposte multiple',
-       'traiter_enregistrement_titre' => 'Registra i risultati',
-
-       // V
-       'voir_exporter' => 'Esporta il modulo',
-       'voir_numero' => 'Modulo numero:',
-       'voir_reponses' => 'Vedi le risposte',
-       'voir_traitements' => 'Trattamenti'
-);
diff --git a/www/plugins/formidable/lang/formidable_pt_br.php b/www/plugins/formidable/lang/formidable_pt_br.php
deleted file mode 100644 (file)
index b7558b1..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'activer_pages_explication' => 'Por padrão, as páginas públicas dos formulários não são autorizadas',
-       'activer_pages_label' => 'Autorizar a criação de páginas publicas para os formulários',
-       'admin_reponses_auteur' => 'Autorizar os autores dos formulários a alterar as respostas',
-       'admin_reponses_auteur_explication' => 'Apenas os administradores podem alterar as respostas enviadas por um formulário (Na lixeira, publicado, proposto para avaliação). Essa opção permite que o autor de um formulário modifique o status (com risco de distorcer eventuais dados estatísticos).',
-       'analyse_avec_reponse' => 'Respostas não vazias',
-       'analyse_exclure_champs_explication' => 'Liste os nomes de campos a serem excluídos da análise, separados por <code>|</code>. Não inserir <code>@</code>.',
-       'analyse_exclure_champs_label' => 'Campos a excluir',
-       'analyse_exporter' => 'Exportar análise',
-       'analyse_longueur_moyenne' => 'Comprimento médio em número de palavras',
-       'analyse_nb_reponses_total' => '@nb@ pessoas responderam a este formulário.',
-       'analyse_sans_reponse' => 'Deixados em branco',
-       'analyse_une_reponse_total' => 'Uma pessoa respondeu a este formulário.',
-       'analyse_zero_reponse_total' => 'Ninguém respondeu a este formulário.',
-       'aucun_traitement' => 'Nenhum tratamento',
-       'autoriser_admin_restreint' => 'Autorizar administradores restritos a criar e alterar os formulários',
-       'autoriser_admin_restreint_explication' => 'Por padrão, somente administradores têm acesso à criação e alteração dos formulários',
-
-       // B
-       'bouton_formulaires' => 'Formulários',
-       'bouton_revert_formulaire' => 'Reverter à última versão gravada',
-
-       // C
-       'cfg_analyse_classe_explication' => 'Você pode informar as classes CSS que serão adicionadas ao conteúdo de cada gráfico, como <code>gray</code>,<code>blue</code>,<code>orange</code>,<code>green</code> ou como preferir!', # MODIF
-       'cfg_analyse_classe_label' => 'Classe CSS da barra de progresso',
-       'cfg_objets_explication' => 'Escolher os conteúdos a que os formulários podem ser vinculados.',
-       'cfg_objets_label' => 'Vincular os formulários aos conteúdos',
-       'cfg_titre_page_configurer_formidable' => 'Configurar Formidable',
-       'cfg_titre_parametrages_analyse' => 'Parâmetros de análise das respostas',
-       'champs' => 'Campos',
-       'changer_statut' => 'Este formulário está:',
-       'creer_dossier_formulaire_erreur_impossible_creer' => 'Não foi possível criar a pasta @dossier@,  necessária para armazenar os arquivos. Verifique os direitos de acesso.',
-       'creer_dossier_formulaire_erreur_impossible_ecrire' => 'Não foi possível escrever na pasta  @dossier@, necessária para armazenar os arquivos. Verifique os direitos de acesso.',
-       'creer_dossier_formulaire_erreur_possible_lire_exterieur' => 'É possível acessar remotamente o conteúdo da pasta @dossier@. Isto é um problema, em termos de confidencialidade dos dados.',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_apres_choix_formulaire' => 'Retornar ao formulário',
-       'editer_apres_choix_redirige' => 'Redirecionar a outro endereço',
-       'editer_apres_choix_rien' => 'Nada',
-       'editer_apres_choix_stats' => 'Estatísticas de respostas',
-       'editer_apres_choix_valeurs' => 'Valores informados',
-       'editer_apres_explication' => 'Após validação, exibir no lugar do formulário:',
-       'editer_apres_label' => 'Exibir em seguida',
-       'editer_css' => 'Classes CSS',
-       'editer_descriptif' => 'Descrição',
-       'editer_descriptif_explication' => 'Explicação do formulário destinada ao espaço privado.',
-       'editer_identifiant' => 'Identificador',
-       'editer_identifiant_explication' => 'Insira um identificador textual único que lhe permitirá chamar mais facilmente o formulário. O identificador só pode conter números, letras não acentuadas e o caracter "_".',
-       'editer_menu_auteurs' => 'Configurar autores',
-       'editer_menu_champs' => 'Configurar campos',
-       'editer_menu_formulaire' => 'Configurar o formulário',
-       'editer_menu_traitements' => 'Configurar os tratamentos',
-       'editer_message_erreur_unicite_explication' => 'Se você deixar o campo em branco, a mensagem de erro padrão do Formidable será exibida',
-       'editer_message_erreur_unicite_label' => 'Mensagem de erro quando um campo não é único',
-       'editer_message_ok' => 'Mensagem de retorno',
-       'editer_message_ok_explication' => 'Personalize a mensagem que será exibida ao usuário após o envio de um formulário válido.',
-       'editer_modifier_formulaire' => 'Modificar formulário',
-       'editer_nouveau' => 'Novo formulário',
-       'editer_redirige_url' => 'Endereço de redirecionamento após validação',
-       'editer_redirige_url_explication' => 'Deixar em branco se quiser que fique na mesma página',
-       'editer_resume_reponse' => 'Exibição resumida da resposta',
-       'editer_resume_reponse_explication' => 'Esta cadeia será utilizada para exibir um resumo de cada resposta nas listas. Campos como <tt>@input_1@</tt> serão substituídos conforme indicado no lembrete  ao lado.',
-       'editer_titre' => 'Título',
-       'editer_unicite_explication' => 'Gravar o formulário apenas se um campo for único',
-       'editer_unicite_label' => 'Verificar a unicidade do campo',
-       'erreur_autorisation' => 'Você não tem permissão para editar os formulários do site.',
-       'erreur_base' => 'Aconteceu um erro técnico durante a gravação.',
-       'erreur_deplacement_fichier' => 'O arquivo « @nom@ » não pode ser armazenado corretamente pelo sistema. Contate o webmaster.',
-       'erreur_fichier_expire' => 'O link para a transferência do arquivo é muito antigo.',
-       'erreur_fichier_introuvable' => 'O arquivo solicitado não foi encontrado.',
-       'erreur_generique' => 'Há erro(s) no preenchimento do(s) campo(s) indicado(s) abaixo.',
-       'erreur_identifiant' => 'Esse identificador já está em uso.',
-       'erreur_identifiant_format' => 'O identificador só pode conter números, letras não acentuadas e o caracter "_"',
-       'erreur_importer_forms' => 'Erro na importação do formulário Forms&Tables',
-       'erreur_importer_wcs' => 'Erro na importação do formulário W.C.S',
-       'erreur_importer_yaml' => 'Erro na importação do arquivo YAML',
-       'erreur_inexistant' => 'Formulário inexistente.',
-       'erreur_unicite' => 'Este valor já está sendo usado',
-       'exporter_formulaire_format_label' => 'Formato do arquivo',
-       'exporter_formulaire_statut_label' => 'Respostas',
-
-       // F
-       'formulaire_anonyme_explication' => 'Este formulário é anônimo, ou seja, a identificação de usuário não será gravada.',
-       'formulaires_aucun' => 'Ainda não há nenhum formulário.',
-       'formulaires_aucun_champ' => 'Ainda não há nenhum campo de entrada para esse formulário.',
-       'formulaires_corbeille_tous' => '@nb@ formulários na lixeira',
-       'formulaires_corbeille_un' => 'Um formulário na lixeira',
-       'formulaires_dupliquer' => 'Duplicar formulário',
-       'formulaires_dupliquer_copie' => '(cópia)',
-       'formulaires_introduction' => 'Crie e configure aqui os formulários do site.',
-       'formulaires_nouveau' => 'Criar um novo formulário',
-       'formulaires_reponses_corbeille_tous' => '@nb@ respostas de formulário na lixeira',
-       'formulaires_reponses_corbeille_un' => 'Uma resposta de formulário na lixeira',
-       'formulaires_supprimer' => 'Apagar formulário',
-       'formulaires_supprimer_confirmation' => 'Atenção, isto apagará também todos os resultados. Você quer realmente excluir este formulário?',
-       'formulaires_tous' => 'Todos os formulários',
-
-       // H
-       'heures_minutes_secondes' => '@h@h @m@min @s@s',
-
-       // I
-       'id_formulaires_reponse' => 'Identificador da resposta',
-       'identification_par_cookie' => 'Por cookie',
-       'identification_par_id_auteur' => 'Por identificação (id_auteur) de usuário autenticado',
-       'importer_formulaire' => 'Importar um formulário',
-       'importer_formulaire_fichier_label' => 'Arquivo a importar',
-       'importer_formulaire_format_label' => 'Formato do arquivo',
-       'info_1_formulaire' => '1 formulário',
-       'info_1_reponse' => '1 resposta',
-       'info_aucun_formulaire' => 'Nenhum formulário',
-       'info_aucune_reponse' => 'Nenhuma resposta',
-       'info_formulaire_refuse' => 'Arquivado',
-       'info_formulaire_utilise_par' => 'Formulário utilizado por:',
-       'info_nb_formulaires' => '@nb@ formulários',
-       'info_nb_reponses' => '@nb@ respostas',
-       'info_reponse_proposee' => 'A moderar',
-       'info_reponse_proposees' => 'A moderar',
-       'info_reponse_publiee' => 'Validada',
-       'info_reponse_publiees' => 'Validadas',
-       'info_reponse_refusee' => 'Recusada',
-       'info_reponse_refusees' => 'Recusadas',
-       'info_reponse_supprimee' => 'Na lixeira',
-       'info_reponse_supprimees' => 'Na lixeira',
-       'info_reponse_toutes' => 'Todas',
-       'info_utilise_1_formulaire' => 'Formulário utilizado:',
-       'info_utilise_nb_formulaires' => 'Formulários utilizados:',
-
-       // J
-       'jours_heures_minutes_secondes' => '@j@d @h@h @m@min @s@s',
-
-       // L
-       'lien_expire' => 'Link vencendo em @delai@',
-       'liens_ajouter' => 'Incluir um formulário',
-       'liens_ajouter_lien' => 'Incluir este formulário',
-       'liens_creer_associer' => 'Criar e vincular um formulário',
-       'liens_retirer_lien_formulaire' => 'Aposentar este formulário',
-       'liens_retirer_tous_liens_formulaires' => 'Aposentar todos os formulários',
-
-       // M
-       'minutes_secondes' => '@m@min @s@s',
-       'modele_label_formulaire_formidable' => 'Qual formulário?',
-       'modele_nom_formulaire' => 'um formulário',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => 'Exibir título do formulário?',
-       'noisette_label_identifiant' => 'Formulário a exibir:',
-       'noisette_nom_noisette_formulaire' => 'Formulário',
-
-       // P
-       'pas_analyse_fichiers' => 'Formidable não propõe (ainda) a análise dos arquivos enviados',
-
-       // R
-       'reponse_aucune' => 'Nenhuma resposta',
-       'reponse_intro' => '@auteur@ respondeu ao formulário @formulaire@',
-       'reponse_maj' => 'Última alteração',
-       'reponse_numero' => 'Resposta número:',
-       'reponse_statut' => 'Esta resposta está:',
-       'reponse_supprimer' => 'Excluir esta resposta',
-       'reponse_supprimer_confirmation' => 'Você quer realmente excluir esta resposta?',
-       'reponse_une' => '1 resposta',
-       'reponses_analyse' => 'Análise das respostas',
-       'reponses_anonyme' => 'Anônimo',
-       'reponses_auteur' => 'Usuário',
-       'reponses_exporter' => 'Exportar as respostas',
-       'reponses_exporter_format_csv' => 'Arquivo .CSV',
-       'reponses_exporter_format_xls' => 'Excel .XLS',
-       'reponses_exporter_statut_publie' => 'Publicados',
-       'reponses_exporter_statut_tout' => 'Todos',
-       'reponses_exporter_telecharger' => 'Transferir',
-       'reponses_ip' => 'Endereço IP',
-       'reponses_liste' => 'Lista de respostas',
-       'reponses_liste_prop' => 'Respostas propostas para aprovação',
-       'reponses_liste_publie' => 'Todas as respostas validadas',
-       'reponses_nb' => '@nb@ respostas',
-       'reponses_supprimer' => 'Excluir todas as respostas',
-       'reponses_supprimer_confirmation' => 'Você quer realmente excluir todas as respostas a este formulário?',
-       'reponses_voir_detail' => 'Ver a resposta',
-       'retour_aucun_traitement' => 'A sua resposta foi enviada corretamente, mas nenhum processamento foi definido para este formulário.',
-
-       // S
-       'sans_reponses' => 'Sem resposta',
-       'secondes' => '@s@s',
-
-       // T
-       'texte_statut_poubelle' => 'na lixeira',
-       'texte_statut_propose_evaluation' => 'proposto',
-       'texte_statut_publie' => 'validado',
-       'texte_statut_refuse' => 'arquivado',
-       'texte_statut_refusee' => 'recusado',
-       'titre_cadre_raccourcis' => 'Atalhos',
-       'titre_formulaires_archives' => 'Arquivos',
-       'titre_reponses' => 'Respostas',
-       'traitements_actives' => 'Tratamentos ativados',
-       'traitements_aide_memoire' => 'Atalhos:',
-       'traitements_avertissement_creation' => 'As alterações nos campos do formulário foram gravadas com sucesso. Defina agora quais tratamentos serão efetuados na submissão do formulário.',
-       'traitements_avertissement_modification' => 'As alterações nos campos do formulário foram gravadas com sucesso. <strong>Alguns tratamentos podem ter que ser reconfigurados consequentemente.</strong>',
-       'traitements_champ_aucun' => 'Nenhum',
-       'traiter_email_description' => 'Postar o resultado do formulário por e-mail para uma lista de destinatários.',
-       'traiter_email_horodatage' => 'Formulário "@formulaire@" postado em @date@ às @heure@.',
-       'traiter_email_message_erreur' => 'Aconteceu um erro ao enviar o e-mail.',
-       'traiter_email_message_ok' => 'Sua mensagem foi enviada corretamente por e-mail.',
-       'traiter_email_option_activer_accuse_label_case' => 'Enviar também um e-mail para o remetente com uma mensagem de confirmação.',
-       'traiter_email_option_activer_ip_label_case' => 'Enviar o endereço IP do remetente aos destinatários.',
-       'traiter_email_option_courriel_envoyeur_accuse_explication' => 'Indique o e-mail utilizado para enviar o aviso de recebimento. Por padrão, o destinatário será o remetente.',
-       'traiter_email_option_courriel_envoyeur_accuse_label' => 'E-mail de aviso de recebimento',
-       'traiter_email_option_destinataires_champ_form_explication' => 'Se um dos campos é um endereço de email ao qual você queira enviar o formulário, selecione o campo.',
-       'traiter_email_option_destinataires_champ_form_label' => 'Destinatário presente em um dos campos dos formulários',
-       'traiter_email_option_destinataires_explication' => 'Escolha o campo que corresponderá aos destinatários da mensagem.',
-       'traiter_email_option_destinataires_label' => 'Destinatários',
-       'traiter_email_option_destinataires_plus_explication' => 'Uma lista de e-mails separados por vírgulas.',
-       'traiter_email_option_destinataires_plus_label' => 'Destinatários suplementares',
-       'traiter_email_option_destinataires_selon_champ_explication' => 'Permite indicar um ou mais destinatários em função do valor de um campo. Indique o campo, o seu valor, e o(s) respectivo(s) endereço(s) de e-mail (separados por uma vírgula), de acordo com o formato a seguir: "@selection_1@/choix1 : mail@exemplo.tld". Você pode indicar diversos testes, um por linha.', # MODIF
-       'traiter_email_option_destinataires_selon_champ_label' => 'Destinatários em função de um campo',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Escolha o campo que conterá o e-mail do remetente.',
-       'traiter_email_option_envoyeur_courriel_label' => 'E-mail do remetente',
-       'traiter_email_option_envoyeur_nom_explication' => 'Construa o nome com ajuda dos @raccourcis@ (ver atalhos). Se for deixado em branco, será o nome do site.',
-       'traiter_email_option_envoyeur_nom_label' => 'Nome do remetente',
-       'traiter_email_option_masquer_liens_label_case' => 'Ocultar os links de administração na mensagem.',
-       'traiter_email_option_nom_envoyeur_accuse_explication' => 'Indique o nome do remetente utilizado para enviar o aviso de recebimento. Por padrão, o destinatário será o remetente.',
-       'traiter_email_option_nom_envoyeur_accuse_label' => 'Nome do remetente do aviso de recebimento',
-       'traiter_email_option_sujet_accuse_label' => 'Assunto do aviso de recebimento',
-       'traiter_email_option_sujet_explication' => 'Construa o assunto com ajuda de @raccourcis@. Se for deixando em branco, o assunto será construído automaticamente.',
-       'traiter_email_option_sujet_label' => 'Assunto da mensagem',
-       'traiter_email_option_vrai_envoyeur_explication' => 'Alguns servidores SMTP não permitem a utilização de um e-mail arbitrário para o campo "From". Por isso, Formidable insere por padrão o e-mail do remetente no campo "Reply-To". Marce esta opção para inserir o e-mail no campo "From".',
-       'traiter_email_option_vrai_envoyeur_label' => 'Inserir o e-mail do remetente no campo "From"',
-       'traiter_email_page' => '<a href="@url@">A partir desta página</a>.',
-       'traiter_email_sujet' => '@nom@  enviou uma mensagem',
-       'traiter_email_sujet_accuse' => 'Obrigado pela sua resposta.',
-       'traiter_email_titre' => 'Enviar por e-mail',
-       'traiter_email_url_enregistrement' => 'Você pode gerenciar as respostas <a href="@url@">nesta página</a>.',
-       'traiter_email_url_enregistrement_precis' => 'Você pode visualizar estar resposta <a href="@url@">nesta página</a>.',
-       'traiter_enregistrement_description' => 'Gravar os resultados do formulário na base de dados',
-       'traiter_enregistrement_erreur_base' => 'Aconteceu um erro técnico durante a gravação na base de dados',
-       'traiter_enregistrement_erreur_deja_repondu' => 'Você já respondeu a este formulário.',
-       'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'A resposta a ser editada não foi encontrada.',
-       'traiter_enregistrement_message_ok' => 'Obrigado. Suas respostas foram registradas corretamente',
-       'traiter_enregistrement_option_anonymiser_explication' => 'Resultados anônimos (não guardar traços de identificação das pessoas que responderam).',
-       'traiter_enregistrement_option_anonymiser_label' => 'Tornar o formulário anônimo',
-       'traiter_enregistrement_option_anonymiser_variable_explication' => 'Que variável do sistema usar para calcular um valor único para cada autor sem revelar sua identidade.',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Variável a usar para tornar o formulário anônimo',
-       'traiter_enregistrement_option_auteur' => 'Utilizar autores para os formulários',
-       'traiter_enregistrement_option_auteur_explication' => 'Atribuir um ou vários autores a um formulário. Se esta opção estiver ativada, somente os autores do formulário podem acessar esses dados.',
-       'traiter_enregistrement_option_choix_select_label' => 'Escolher uma variável entre as opções oferecidas',
-       'traiter_enregistrement_option_effacement_delai_label' => 'Número de dias antes de apagar',
-       'traiter_enregistrement_option_effacement_label' => 'Excluir regularmente os resultados mais antigos',
-       'traiter_enregistrement_option_identification_explication' => 'Se as respostas são alteráveis, que procedimento usar preferencialmente para identificar a resposta a ser alterada?',
-       'traiter_enregistrement_option_identification_label' => 'Identificação',
-       'traiter_enregistrement_option_ip_label' => 'Gravar os IPs (mascarados após um intervalo de segurança)',
-       'traiter_enregistrement_option_moderation_label' => 'Moderação',
-       'traiter_enregistrement_option_modifiable_explication' => 'Alterável: os visitantes podem modificar as suas respostas posteriormente.',
-       'traiter_enregistrement_option_modifiable_label' => 'Respostas alteráveis',
-       'traiter_enregistrement_option_multiple_explication' => 'Múltiplas: Uma mesma pessoa pode responder várias vezes.',
-       'traiter_enregistrement_option_multiple_label' => 'Respostas múltiplas',
-       'traiter_enregistrement_titre' => 'Gravar os resultados',
-
-       // V
-       'voir_exporter' => 'Exportar o formulário',
-       'voir_numero' => 'Formulário número:',
-       'voir_reponses' => 'Ver as respostas',
-       'voir_traitements' => 'Tratamentos'
-);
diff --git a/www/plugins/formidable/lang/formidable_ru.php b/www/plugins/formidable/lang/formidable_ru.php
deleted file mode 100644 (file)
index efcee19..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'analyse_avec_reponse' => 'Ответили',
-       'analyse_exclure_champs_explication' => 'Укажите названия полей, которіе необходимо выводить в статистике ответов. Используйте разделитель <code>|</code>. Не надо использовать символ <code>@</code>.',
-       'analyse_exclure_champs_label' => 'Исключить поля',
-       'analyse_exporter' => 'Экспортировать',
-       'analyse_longueur_moyenne' => 'Средняя длина в словах',
-       'analyse_nb_reponses_total' => '@nb@ человек(а) заполнило форму.',
-       'analyse_sans_reponse' => 'Не ответили',
-       'analyse_une_reponse_total' => 'Человек заполнил форму.',
-       'analyse_zero_reponse_total' => 'Никто еще не заполнял форму.',
-       'aucun_traitement' => 'Нет обраточиков',
-
-       // B
-       'bouton_formulaires' => 'Формы',
-       'bouton_revert_formulaire' => 'Вернуться к последней сохраненной версии',
-
-       // C
-       'cfg_titre_page_configurer_formidable' => 'Настройки Formidable',
-       'cfg_titre_parametrages_analyse' => 'Настройки просмотра ответов',
-       'champs' => 'Поля',
-       'changer_statut' => 'Статус формы:',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_apres_choix_formulaire' => 'Очистить значения и вывести форму заново',
-       'editer_apres_choix_redirige' => 'Перенаправить на  другую страницу',
-       'editer_apres_choix_rien' => 'Ничего не делать',
-       'editer_apres_choix_stats' => 'Показать статистику ответов',
-       'editer_apres_choix_valeurs' => 'Показать введенные значения',
-       'editer_apres_explication' => 'После обработки, показывать на месте формы:',
-       'editer_apres_label' => 'Действие после обработки:',
-       'editer_descriptif' => 'Описание',
-       'editer_descriptif_explication' => 'Описание формы а административной части.',
-       'editer_identifiant' => 'ID',
-       'editer_identifiant_explication' => 'Укажите текстовый ID, который позволяет быстро вызывать форму.', # MODIF
-       'editer_menu_auteurs' => 'Настроить авторов',
-       'editer_menu_champs' => 'Настройка полей',
-       'editer_menu_formulaire' => 'Настройка формы',
-       'editer_menu_traitements' => 'Настройка обработчиков',
-       'editer_message_erreur_unicite_explication' => 'Если оставить поле пустым, будет использовано сообщение об ошибке по умолчанию.',
-       'editer_message_erreur_unicite_label' => 'Сообщение об ошибке, если значение поля неуникально',
-       'editer_message_ok' => 'Сообщение после заполнения формы:',
-       'editer_message_ok_explication' => 'Вы можете настроить сообщение которое будет выводиться пользователю после отправки данной формы.',
-       'editer_modifier_formulaire' => 'Изменить форму',
-       'editer_nouveau' => 'Новая форма',
-       'editer_redirige_url' => 'Адрес переадресации после обработки формы',
-       'editer_redirige_url_explication' => 'Оставьте пустым, если хотите остаться на той же странице',
-       'editer_resume_reponse' => 'Показать сводную информацию по ответам',
-       'editer_titre' => 'Название',
-       'editer_unicite_explication' => 'Сохранять ответ только если значение поля уникально ( не встречалось в других ответах).',
-       'editer_unicite_label' => 'Проверять уникальность значения для поля',
-       'erreur_autorisation' => 'У Вас нет прав на редактирование форм сайта.',
-       'erreur_base' => 'Произошла техническая ошибка при сохранении.',
-       'erreur_generique' => 'Вы не заполнили все обязательные поля. (*) - обязательные поля!',
-       'erreur_identifiant' => 'Этот ID уже используется.',
-       'erreur_importer_forms' => 'Ошибка при импорте формы Forms&Tables',
-       'erreur_importer_wcs' => 'Ошибка при импорте формы W.C.S',
-       'erreur_importer_yaml' => 'Ошибка при импорте формы YAML',
-       'erreur_inexistant' => 'Такая форма не существует.',
-       'erreur_unicite' => 'Это значение уже используется',
-       'exporter_formulaire_format_label' => 'Формат файла',
-       'exporter_formulaire_statut_label' => 'Ответы',
-
-       // F
-       'formulaires_aucun' => 'Пока нет ни одной формы.',
-       'formulaires_aucun_champ' => 'У формы нет полей для ввода информации.',
-       'formulaires_dupliquer' => 'Дублировать форму',
-       'formulaires_dupliquer_copie' => '(копия)',
-       'formulaires_introduction' => 'Создание и настройка форм сайта.',
-       'formulaires_nouveau' => 'Создать новую форму',
-       'formulaires_supprimer' => 'Удалить форму',
-       'formulaires_supprimer_confirmation' => 'Внимание, это приведет к удалению всех результатов. Вы уверены, что хотите удалить эту форму ?',
-       'formulaires_tous' => 'Все формы',
-
-       // I
-       'identification_par_cookie' => 'Через cookie',
-       'identification_par_id_auteur' => 'Через идентификатор (id_auteur) авторизированного пользователя',
-       'importer_formulaire' => 'Импортировать форму',
-       'importer_formulaire_fichier_label' => 'Файл для импорта',
-       'importer_formulaire_format_label' => 'Формат файла',
-       'info_1_formulaire' => '1 форма',
-       'info_1_reponse' => '1 ответ',
-       'info_aucun_formulaire' => 'Форм нет',
-       'info_aucune_reponse' => 'Нет ответов',
-       'info_formulaire_refuse' => 'Архив',
-       'info_formulaire_utilise_par' => 'Форма используется:',
-       'info_nb_formulaires' => '@nb@ форм(ы)',
-       'info_nb_reponses' => '@nb@ ответов',
-       'info_reponse_proposee' => 'На проверке',
-       'info_reponse_proposees' => 'На проверке',
-       'info_reponse_publiee' => 'Опубликованные',
-       'info_reponse_publiees' => 'Опубликованные',
-       'info_reponse_supprimee' => 'Удаленные', # MODIF
-       'info_reponse_supprimees' => 'Удаленные', # MODIF
-       'info_reponse_toutes' => 'Все',
-       'info_utilise_1_formulaire' => 'Форма использует:',
-       'info_utilise_nb_formulaires' => 'Формы используют:',
-
-       // M
-       'modele_label_formulaire_formidable' => 'Какая форма ?',
-       'modele_nom_formulaire' => 'форма',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => 'Показывать название формы?',
-       'noisette_label_identifiant' => 'Форма для отображения:', # RELIRE
-       'noisette_nom_noisette_formulaire' => 'Форма',
-
-       // R
-       'reponse_aucune' => 'Нет ответов',
-       'reponse_intro' => '@auteur@ ответил на форму @formulaire@',
-       'reponse_numero' => 'Ответ номер:',
-       'reponse_statut' => 'Статус ответа:',
-       'reponse_supprimer' => 'Удалить ответ',
-       'reponse_supprimer_confirmation' => 'Вы действительно хотите удалить этот ответ ?',
-       'reponse_une' => '1 ответ',
-       'reponses_analyse' => 'Статистика ответов',
-       'reponses_anonyme' => 'Анонимный',
-       'reponses_auteur' => 'Пользователь',
-       'reponses_exporter' => 'Экспортировать',
-       'reponses_exporter_format_csv' => 'Файл .CSV',
-       'reponses_exporter_format_xls' => 'Excel .XLS',
-       'reponses_exporter_statut_publie' => 'Опубликованные',
-       'reponses_exporter_statut_tout' => 'Все',
-       'reponses_exporter_telecharger' => 'Скачать',
-       'reponses_ip' => 'IP адрес',
-       'reponses_liste' => 'Список ответов',
-       'reponses_liste_prop' => 'Ответы ожидающие проверки',
-       'reponses_liste_publie' => 'Все проверенные ответы',
-       'reponses_nb' => '@nb@ ответа(ов)',
-       'reponses_supprimer' => 'Удалить все ответы',
-       'reponses_supprimer_confirmation' => 'Вы уверенны, что хотите удалить ВСЕ ответы этой формы ?',
-       'reponses_voir_detail' => 'Посмотреть ответ',
-       'retour_aucun_traitement' => 'Ваш ответ был отправолен на обработку, но ни один обработчик не был выбран для этой формы. Эта форма попросту ничего не делает :)',
-
-       // S
-       'sans_reponses' => 'Без ответа',
-
-       // T
-       'texte_statut_poubelle' => 'удалить', # MODIF
-       'texte_statut_propose_evaluation' => 'на проверку',
-       'texte_statut_publie' => 'опубликовать',
-       'texte_statut_refuse' => 'архивировать',
-       'titre_cadre_raccourcis' => 'Ярлыки',
-       'titre_formulaires_archives' => 'Архив',
-       'titre_reponses' => 'Ответы',
-       'traitements_actives' => 'Активные обработчики',
-       'traitements_aide_memoire' => 'Памятка помощи :',
-       'traitements_avertissement_creation' => 'Изменения, внесенные в поля формы были записаны успешно. Теперь вы можете определить, какие обработчики будут выполняться при использовании формы.',
-       'traitements_avertissement_modification' => 'Изменения, внесенные в поля формы были записаны успешно. <strong>Некоторые обработчики, возможно, придется обновить соответственно.</strong>',
-       'traitements_champ_aucun' => 'Нет',
-       'traiter_email_description' => 'Отправлять сообщение по электронной почте списку получателей.', # MODIF
-       'traiter_email_horodatage' => 'Форма "@formulaire@" отправлена @date@ @heure@.',
-       'traiter_email_message_erreur' => 'Произошла ошибка при отправке электронной почты.',
-       'traiter_email_message_ok' => 'Ваше сообщение было отправлено.',
-       'traiter_email_option_activer_accuse_label_case' => 'Кроме указанных получателей, отправить отправителю сообщение с подтверждением.',
-       'traiter_email_option_courriel_envoyeur_accuse_label' => 'Уведомление электронной почтой',
-       'traiter_email_option_destinataires_champ_form_label' => 'Емейл получатель указывается в одном из полей формы',
-       'traiter_email_option_destinataires_explication' => 'Выберите поле, которое соответствует получателям сообщения.',
-       'traiter_email_option_destinataires_label' => 'Получатели',
-       'traiter_email_option_destinataires_plus_explication' => 'Список адресов, разделенных запятыми.',
-       'traiter_email_option_destinataires_plus_label' => 'Дополнительные получатели',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Выберите поле, которое будет содержать электронный адрес отправителя.',
-       'traiter_email_option_envoyeur_courriel_label' => 'Адрес отправителя',
-       'traiter_email_option_envoyeur_nom_explication' => 'Можно создать имя отправителя с использованием @ярлыков@ (см. памятку помощи). Если оставить пустым, это будет название сайта.',
-       'traiter_email_option_envoyeur_nom_label' => 'Имя отправителя',
-       'traiter_email_option_sujet_accuse_label' => 'Тема подтверждающего сообщения',
-       'traiter_email_option_sujet_explication' => 'Можно создать тему с использованием @ярлыков@. Если оставить пустым, тема будет создана автоматически.',
-       'traiter_email_option_sujet_label' => 'Тема сообщения',
-       'traiter_email_option_vrai_envoyeur_label' => 'Использовать емейл отправителя для поля "From"',
-       'traiter_email_page' => '<a href="@url@">На этой странице</a>.',
-       'traiter_email_sujet' => '@nom@ вы написали.',
-       'traiter_email_sujet_accuse' => 'Спасибо за ваш ответ.',
-       'traiter_email_titre' => 'Отправлять данные формы электронной почтой',
-       'traiter_email_url_enregistrement' => 'Вы можете управлять ответами <a href="@url@">на этой странице</a>.', # MODIF
-       'traiter_enregistrement_description' => 'Сохранять заполненные формы в базе данных', # MODIF
-       'traiter_enregistrement_erreur_base' => 'Техническая ошибка при работе с базой данных.',
-       'traiter_enregistrement_erreur_deja_repondu' => 'Вы уже заполнили эту форму',
-       'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'Ответ для редактирования не найден.', # RELIRE
-       'traiter_enregistrement_message_ok' => 'Спасибо. Ваш ответ был сохранен', # MODIF
-       'traiter_enregistrement_option_anonymiser_explication' => 'Анонимные ответы (не сохранять идентифицирующую пользователя информацию)',
-       'traiter_enregistrement_option_anonymiser_label' => 'Анонимизировать форму',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Переменные, при помощи которых анонимизируется ответ',
-       'traiter_enregistrement_option_auteur' => 'Использовать авторов в форме',
-       'traiter_enregistrement_option_auteur_explication' => 'Назначить одного или нескольких авторов форме. Если эта настройка включена, то только назначенные автора будут иметь к ней доступ',
-       'traiter_enregistrement_option_choix_select_label' => 'Выберите значение из предложенных вариантов',
-       'traiter_enregistrement_option_identification_explication' => 'Если можно изменять ответы, выберите метод аутентификации пользователя',
-       'traiter_enregistrement_option_identification_label' => 'ID',
-       'traiter_enregistrement_option_ip_label' => 'Сохранять IP ',
-       'traiter_enregistrement_option_moderation_label' => 'Модерация',
-       'traiter_enregistrement_option_modifiable_explication' => 'Посетители могут изменять свои ответы после заполнения формы',
-       'traiter_enregistrement_option_modifiable_label' => 'Ответы можно изменить',
-       'traiter_enregistrement_option_multiple_explication' => 'Пользователь может ответить (заполнить) форму несколько раз.',
-       'traiter_enregistrement_option_multiple_label' => 'Несколько ответов',
-       'traiter_enregistrement_titre' => 'Сохранять результаты',
-
-       // V
-       'voir_exporter' => 'Экспорт формы',
-       'voir_numero' => 'Номер формы:',
-       'voir_reponses' => 'Просмотр ответов',
-       'voir_traitements' => 'Обработчики'
-);
diff --git a/www/plugins/formidable/lang/formidable_sk.php b/www/plugins/formidable/lang/formidable_sk.php
deleted file mode 100644 (file)
index f1e6c73..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formidable?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'analyse_avec_reponse' => 'Neprázdne odpovede',
-       'analyse_exporter' => 'Exportovať analýzu',
-       'analyse_longueur_moyenne' => 'Priemerná dĺžka vyjadrená počtom slov',
-       'analyse_nb_reponses_total' => '@nb@ ľudia odpovedali na tento formulár.',
-       'analyse_sans_reponse' => 'Nevyplnené',
-       'analyse_une_reponse_total' => 'Na tento formulár odpovedal jeden človek.',
-       'analyse_zero_reponse_total' => 'Na tento formulár neodpovedal žiaden človek.',
-       'aucun_traitement' => 'Žiadne spracovanie',
-
-       // B
-       'bouton_formulaires' => 'Formuláre',
-
-       // C
-       'cfg_analyse_classe_explication' => 'Môžete zadať triedy CSS, ktoré budú pridané 
-               na každý graf ako <code>sivý,</code> <code>modrý,</code>
-               <code>oranžový,</code> <code>zelený</code> alebo akýkoľvek iný stĺpec!', # MODIF
-       'cfg_analyse_classe_label' => 'Trieda CSS stĺpca dokončenia úkonu',
-       'cfg_titre_page_configurer_formidable' => 'Nastaviť Formidable',
-       'cfg_titre_parametrages_analyse' => 'Nastavenia analýzy odpovedí',
-       'champs' => 'Pol’a',
-
-       // E
-       'echanger_formulaire_forms_importer' => 'formuláre Forms & Tables (.xml)',
-       'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
-       'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
-       'editer_apres_choix_formulaire' => 'Formulár, znova',
-       'editer_apres_choix_redirige' => 'Presmerovať na novú adresu',
-       'editer_apres_choix_rien' => 'Vôbec nič',
-       'editer_apres_choix_stats' => 'Štatistiky odpovedí',
-       'editer_apres_choix_valeurs' => 'Zadané hodnoty',
-       'editer_apres_explication' => 'Po potvrdení namiesto formulára zobraziť:',
-       'editer_apres_label' => 'Zobraziť potom',
-       'editer_descriptif' => 'Opis',
-       'editer_descriptif_explication' => 'Vysvetlivka formulára pre súkromnú zónu.',
-       'editer_identifiant' => 'Identifikátor',
-       'editer_identifiant_explication' => 'Zadajte jedinečný textový identifikátor, ktorý vám umožní rýchlo vyvolať formulár.', # MODIF
-       'editer_menu_auteurs' => 'Nastaviť autorov',
-       'editer_menu_champs' => 'Nastaviť polia',
-       'editer_menu_formulaire' => 'Nastaviť formulár',
-       'editer_menu_traitements' => 'Nastaviť funkcie',
-       'editer_message_ok' => 'Správa spätnej väzby',
-       'editer_message_ok_explication' => 'Môžete upraviť správu, ktorá sa používateľovi zobrazí po odoslaní platného formulára.',
-       'editer_modifier_formulaire' => 'Upraviť formulár',
-       'editer_nouveau' => 'Nový formulár',
-       'editer_redirige_url' => 'Adresa presmerovania po potvrdení',
-       'editer_redirige_url_explication' => 'Nevypĺňajte, ak chcete zostať na rovnakej stránke',
-       'editer_titre' => 'Názov',
-       'erreur_autorisation' => 'Na úpravu formulárov na tejto stránke nemáte dostatočné práva.',
-       'erreur_base' => 'Počas ukladania sa vyskytla technická chyba.',
-       'erreur_generique' => 'V týchto poliach sú chyby, prosím, skontrolujte ich pred odoslaním.',
-       'erreur_identifiant' => 'Tento identifikátor sa už používa.',
-       'erreur_importer_forms' => 'Chyba počas nahrávania formulára Forms&Tables',
-       'erreur_importer_wcs' => 'Chyba počas nahrávania formulára W.C.S',
-       'erreur_importer_yaml' => 'Chyba počas nahrávania súboru YAML',
-       'erreur_inexistant' => 'Formulár neexistuje.',
-       'exporter_formulaire_format_label' => 'Formát súboru',
-
-       // F
-       'formulaire_anonyme_explication' => 'Tento formulár je anonymný, tzn., že záznamy o identite používateľov sa neukladajú.',
-       'formulaires_aucun' => 'Momentálne tu nie je žiaden formulár.',
-       'formulaires_dupliquer' => 'Skopírovať formulár',
-       'formulaires_dupliquer_copie' => '(kópia)',
-       'formulaires_introduction' => 'Tu vytvoríte a nastavíte formuláre pre svoju stránku.',
-       'formulaires_nouveau' => 'Vytvoriť nový formulár',
-       'formulaires_supprimer' => 'Odstrániť formulár',
-       'formulaires_supprimer_confirmation' => 'Pozor, takto vymažete všetky výsledky. Určite chcete odstrániť tento formulár?',
-       'formulaires_tous' => 'Všetky formuláre',
-
-       // I
-       'identification_par_cookie' => 'Podľa cookie',
-       'identification_par_id_auteur' => 'Podľa identifikátora (id_auteur) prihláseného človeka',
-       'importer_formulaire' => 'Nahrať formulár',
-       'importer_formulaire_fichier_label' => 'Súbor, ktorý sa má nahrať',
-       'importer_formulaire_format_label' => 'Formát súboru',
-
-       // M
-       'modele_label_formulaire_formidable' => 'Aký formulár?',
-       'modele_nom_formulaire' => 'jeden formulár',
-
-       // N
-       'noisette_label_afficher_titre_formulaire' => 'Zobraziť nadpis formulára?',
-       'noisette_label_identifiant' => 'Formulár, ktorý sa má zobraziť:',
-       'noisette_nom_noisette_formulaire' => 'Formulár',
-
-       // R
-       'reponse_aucune' => 'Žiadna odpoveď',
-       'reponse_intro' => '@auteur@ vyplnil(a) formulár @formulaire@',
-       'reponse_numero' => 'Odpoveď číslo:',
-       'reponse_statut' => 'Táto odpoveď je:',
-       'reponse_supprimer' => 'Odstrániť túto odpoveď',
-       'reponse_supprimer_confirmation' => 'Určite chcete vymazať túto odpoveď?',
-       'reponse_une' => '1 odpoveď',
-       'reponses_analyse' => 'Analýza odpovedí',
-       'reponses_anonyme' => 'Anonym',
-       'reponses_auteur' => 'Používateľ',
-       'reponses_exporter' => 'Exportovať odpovede',
-       'reponses_ip' => 'IP adresa',
-       'reponses_liste' => 'Zoznam odpovedí',
-       'reponses_liste_prop' => 'Odpovede čakajúce na potvrdenie',
-       'reponses_liste_publie' => 'Všetky platné odpovede',
-       'reponses_nb' => '@nb@ odpovedí',
-       'reponses_voir_detail' => 'Zobraziť odpoveď',
-       'retour_aucun_traitement' => 'Vaša odpoveď bola odoslaná, ale k tomuto formuláru nebola definovaná žiadna funkcia. Nič neurobí. :-)',
-
-       // S
-       'sans_reponses' => 'Neriešiteľný',
-
-       // T
-       'titre_cadre_raccourcis' => 'Skratky',
-       'traitements_actives' => 'Aktívne spracovanie',
-       'traitements_aide_memoire' => 'Pomocná pamäť:',
-       'traitements_avertissement_creation' => 'Zmeny polí formulára boli úspešne uložené. Teraz môžete určiť, aké funkcie sa použijú pri spracúvaní formulára.',
-       'traitements_avertissement_modification' => 'Zmeny v poliach formulára boli úspešne uložené. <strong>Niektoré funkcie možno budú musieť byť kvôli ním prestavené.</strong>',
-       'traitements_champ_aucun' => 'Žiadne',
-       'traiter_email_description' => 'Výstup z formulára odošle na e-mailové adresy príjemcov.', # MODIF
-       'traiter_email_horodatage' => 'Formulár "@formulaire@" odoslaný @date@ o @heure@.',
-       'traiter_email_message_erreur' => 'Pri odosielaní e-mailu sa vyskytla chyba.',
-       'traiter_email_message_ok' => 'Vaša správa bola odoslaná.',
-       'traiter_email_option_activer_accuse_label_case' => 'Poslať e-mail aj na adresu odosielateľa so žiadosťou o potvrdenie.',
-       'traiter_email_option_destinataires_explication' => 'Vyberte si pole, v ktorom budú príjemcovia správy.',
-       'traiter_email_option_destinataires_label' => 'Príjemcovia',
-       'traiter_email_option_destinataires_plus_explication' => 'Zoznam adries oddelený čiarkami.',
-       'traiter_email_option_destinataires_plus_label' => 'Ďalší príjemcovia',
-       'traiter_email_option_envoyeur_courriel_explication' => 'Vyberte si pole, ktoré bude obsahovať e-mailovú adresu odosielateľa.',
-       'traiter_email_option_envoyeur_courriel_label' => 'E-mail odosielateľa',
-       'traiter_email_option_envoyeur_nom_explication' => 'Vytvorte názov pomocou @raccourcis@ (prečítajte si pomocníka). Ak neurobíte nič, bude tým názvom názov stránky.',
-       'traiter_email_option_envoyeur_nom_label' => 'Meno odosielateľa',
-       'traiter_email_option_sujet_accuse_label' => 'Predmet potvrdenia o prijatí',
-       'traiter_email_option_sujet_explication' => 'Vytvorte predmet pomocou @raccourcis@. Ak neurobíte nič, predmet bude vytvorený automaticky.',
-       'traiter_email_option_sujet_label' => 'Predmet správy',
-       'traiter_email_option_vrai_envoyeur_explication' => 'Niektoré servery SMTP neumožňujú používať ľubovoľný e-mail pre pole "From" (Od koho). Z tohto dôvodu Formidable podľa predvolených nastavení vkladá e-mail odosielateľa do poľa "Reply-To". Ak chcete, aby bol vložený do poľa "From", zaškrtnite túto možnosť tu.',
-       'traiter_email_option_vrai_envoyeur_label' => 'Vložiť e-mail odosielateľa do poľa "From" (= "Od koho")',
-       'traiter_email_page' => '<a href="@url@">Z tejto stránky.</a>',
-       'traiter_email_sujet' => '@nom@ vám napísal(a).',
-       'traiter_email_sujet_accuse' => 'Ďakujeme vám za odpoveď.',
-       'traiter_email_titre' => 'Poslať e-mailom',
-       'traiter_email_url_enregistrement' => 'Riadiť odpovede môžete <a href="@url@">na tejto stránke.</a>', # MODIF
-       'traiter_enregistrement_description' => 'Uloží výsledky z formulára do databázy', # MODIF
-       'traiter_enregistrement_erreur_base' => 'Počas ukladania do databázy sa vyskytla technická chyba',
-       'traiter_enregistrement_erreur_deja_repondu' => 'Tento formulár ste už vyplnili.',
-       'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'Odpoveď, ktorú chcete upraviť, sa nedá nájsť.',
-       'traiter_enregistrement_option_anonymiser_explication' => 'Vypísať výsledky anonymného formulára(nenechávať si záznamy identifikujúce respondentov).', # MODIF
-       'traiter_enregistrement_option_anonymiser_label' => 'Anonymizované podobe',
-       'traiter_enregistrement_option_anonymiser_variable_explication' => 'Čo systémová premenná slúži na výpočet jednej hodnoty pre každého autora, bez toho, aby odhalil svoju identitu.',
-       'traiter_enregistrement_option_anonymiser_variable_label' => 'Premenná, z ktorých anonymizujú formulár',
-       'traiter_enregistrement_option_auteur' => 'Použiť mená autorov vo formulároch',
-       'traiter_enregistrement_option_auteur_explication' => 'K formuláru priradiť jedného autora alebo viacerých. Ak aktivujete túto možnosť, k údajom formulára budú mať prístup len autori formulára.',
-       'traiter_enregistrement_option_choix_select_label' => 'Vyberte premennú, ktorá z dostupnej',
-       'traiter_enregistrement_option_identification_explication' => 'Ak sa odpovede dajú upraviť, aký spôsob sa použije ako prvý, aby sa zistilo, či sa odpoveď menila?',
-       'traiter_enregistrement_option_identification_label' => 'Identifikácia',
-       'traiter_enregistrement_option_moderation_label' => 'Kontrola',
-       'traiter_enregistrement_option_modifiable_explication' => 'Môžu návštevníci potom upraviť svoje odpovede?', # MODIF
-       'traiter_enregistrement_option_modifiable_label' => 'Odpovede, ktoré sa dajú upraviť',
-       'traiter_enregistrement_option_multiple_explication' => 'Môže ten istý človek odpovedať na formulár viackrát?', # MODIF
-       'traiter_enregistrement_option_multiple_label' => 'Duplicitné odpovede',
-       'traiter_enregistrement_titre' => 'Uložiť výsledky',
-
-       // V
-       'voir_exporter' => 'Exportovať formulár',
-       'voir_numero' => 'Formulár číslo:',
-       'voir_reponses' => 'Zobraziť odpovede',
-       'voir_traitements' => 'Funkcie'
-);
diff --git a/www/plugins/formidable/lang/formulaire.xml b/www/plugins/formidable/lang/formulaire.xml
deleted file mode 100644 (file)
index 78acfbc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<traduction module="formulaire" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/" reference="fr">
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/formulaire?lang_cible=fr" total="5" traduits="5" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/formulaire?lang_cible=pt_br" total="5" traduits="5" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/formulaire?lang_cible=ru" total="5" traduits="5" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-</traduction>
diff --git a/www/plugins/formidable/lang/formulaire_fr.php b/www/plugins/formidable/lang/formulaire_fr.php
deleted file mode 100644 (file)
index 857b445..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // I
-       'icone_creer_formulaire' => 'Créer un nouveau formulaire',
-
-       // M
-       'modifier_formulaire' => 'Modifier ce formulaire',
-
-       // T
-       'titre_formulaire' => 'Formulaire',
-       'titre_formulaires' => 'Formulaires',
-       'titre_logo_formulaire' => 'Logo de ce formulaire'
-);
diff --git a/www/plugins/formidable/lang/formulaire_pt_br.php b/www/plugins/formidable/lang/formulaire_pt_br.php
deleted file mode 100644 (file)
index 6c63169..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formulaire?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // I
-       'icone_creer_formulaire' => 'Criar um novo formulário',
-
-       // M
-       'modifier_formulaire' => 'Alterar este formulário',
-
-       // T
-       'titre_formulaire' => 'Formulário',
-       'titre_formulaires' => 'Formulários',
-       'titre_logo_formulaire' => 'Logo deste formulário'
-);
diff --git a/www/plugins/formidable/lang/formulaire_ru.php b/www/plugins/formidable/lang/formulaire_ru.php
deleted file mode 100644 (file)
index 3df61f9..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formulaire?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // I
-       'icone_creer_formulaire' => 'Создать новую форму',
-
-       // M
-       'modifier_formulaire' => 'Изменить форму',
-
-       // T
-       'titre_formulaire' => 'Форма',
-       'titre_formulaires' => 'Формы',
-       'titre_logo_formulaire' => 'Логотип формы'
-);
diff --git a/www/plugins/formidable/lang/formulaires_reponse.xml b/www/plugins/formidable/lang/formulaires_reponse.xml
deleted file mode 100644 (file)
index c05f372..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<traduction module="formulaires_reponse" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/" reference="fr">
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/formulaires_reponse?lang_cible=fr" total="8" traduits="8" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/formulaires_reponse?lang_cible=pt_br" total="8" traduits="8" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-</traduction>
diff --git a/www/plugins/formidable/lang/formulaires_reponse_fr.php b/www/plugins/formidable/lang/formulaires_reponse_fr.php
deleted file mode 100644 (file)
index b381384..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'changer_statut' => 'Cette réponse de formulaire est :',
-
-       // F
-       'formulaires_reponse_numero' => 'Réponse de formulaire n°@nb@',
-
-       // I
-       'icone_creer_formulaire' => 'Créer une nouvelle réponse de formulaire',
-
-       // M
-       'modifier_formulaire' => 'Modifier cette réponse de formulaire',
-
-       // R
-       'reponses_donnees' => 'Réponses données :',
-
-       // T
-       'titre_formulaires_reponse' => 'Réponse de formulaire',
-       'titre_formulaires_reponses' => 'Réponses de formulaire',
-       'titre_logo_formulaires_reponse' => 'Logo de cette réponse de formulaire'
-);
diff --git a/www/plugins/formidable/lang/formulaires_reponse_pt_br.php b/www/plugins/formidable/lang/formulaires_reponse_pt_br.php
deleted file mode 100644 (file)
index 6c7d8f7..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/formulaires_reponse?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // C
-       'changer_statut' => 'Esta resposta de formulário está:',
-
-       // F
-       'formulaires_reponse_numero' => 'Resposta de formulário n°@nb@',
-
-       // I
-       'icone_creer_formulaire' => 'Criar uma nova resposta de formulário',
-
-       // M
-       'modifier_formulaire' => 'Alterar esta resposta de formulário',
-
-       // R
-       'reponses_donnees' => 'Respostas dadas:',
-
-       // T
-       'titre_formulaires_reponse' => 'Resposta de formulário',
-       'titre_formulaires_reponses' => 'Respostas de formulário',
-       'titre_logo_formulaires_reponse' => 'Logo desta resposta de formulário'
-);
diff --git a/www/plugins/formidable/lang/paquet-formidable.xml b/www/plugins/formidable/lang/paquet-formidable.xml
deleted file mode 100644 (file)
index 115d1a8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<traduction module="paquet-formidable" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/" reference="fr">
-       <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-formidable?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Gilles" lien="https://trad.spip.net/auteur/gilles" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-formidable?lang_cible=es" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="severo" lien="https://trad.spip.net/auteur/severo" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-formidable?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-formidable?lang_cible=pt_br" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-</traduction>
diff --git a/www/plugins/formidable/lang/paquet-formidable_en.php b/www/plugins/formidable/lang/paquet-formidable_en.php
deleted file mode 100644 (file)
index a9fd6c4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-formidable?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'formidable_description' => 'Create forms within a graphical interface and configure the associated treatments (send email, record responses, etc.).',
-       'formidable_slogan' => 'Forms generator'
-);
diff --git a/www/plugins/formidable/lang/paquet-formidable_es.php b/www/plugins/formidable/lang/paquet-formidable_es.php
deleted file mode 100644 (file)
index 9463cf5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-formidable?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'formidable_description' => 'Creación de formularios con una interfaz gráfica y configuración de los procesamientos asociados (enviar por correo electrónico, grabar las respuestas, etc.)',
-       'formidable_slogan' => 'Generador de formularios'
-);
diff --git a/www/plugins/formidable/lang/paquet-formidable_fr.php b/www/plugins/formidable/lang/paquet-formidable_fr.php
deleted file mode 100644 (file)
index 7c3243f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'formidable_description' => 'Création de formulaires avec une interface graphique et configuration des traitements associés (envoyer par courriel, enregistrer les réponses, etc).',
-       'formidable_slogan' => 'Générateur de formulaires'
-);
diff --git a/www/plugins/formidable/lang/paquet-formidable_pt_br.php b/www/plugins/formidable/lang/paquet-formidable_pt_br.php
deleted file mode 100644 (file)
index c58bbb3..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-formidable?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // F
-       'formidable_description' => 'Criação de formulários com uma interface gráfica e configuração dos tratamentos associados (enviar por e-mail, gravar as respostas etc.).',
-       'formidable_slogan' => 'Gerador de formulários'
-);
diff --git a/www/plugins/formidable/modeles/form.html b/www/plugins/formidable/modeles/form.html
deleted file mode 100644 (file)
index 85917df..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<BOUCLE_fet(FORMS?){id_form}{si #PLUGIN{forms}}>#FORMS</BOUCLE_fet>
-<BOUCLE_f(FORMULAIRES){identifiant=form#ENV{id,#ENV{id_form}}}{0,1}>#SET{titre,#TITRE}[(#REM|test_espace_prive|oui)
-#FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE,#ARRAY{_titre,#TITRE}}
-]</BOUCLE_f>
-<div><?php
-/* une fonction qui produit du php qui ne sera execute qu'au service final de la page */
-echo executer_balise_dynamique('FORMULAIRE_FORMIDABLE',[(#LISTE{form#ENV{id,#ENV{id_form}},#ARRAY{_titre,#GET{titre}}}|var_export{true})],array('','','','','[(#ENV{lang}|texte_script)]'));
-?></div>
-<//B_f>
-<//B_fet>
\ No newline at end of file
diff --git a/www/plugins/formidable/modeles/formidable.html b/www/plugins/formidable/modeles/formidable.html
deleted file mode 100644 (file)
index 7de83ad..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<BOUCLE_f(FORMULAIRES){id_formulaire=#ID}{si #REM|test_espace_prive}>
-#FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE}
-</BOUCLE_f>
-<div><?php
-/* une fonction qui produit du php qui ne sera execute qu'au service final de la page */
-echo executer_balise_dynamique('FORMULAIRE_FORMIDABLE',[(#LISTE{#ENV{id}}|array_merge{#ENV{args}}|var_export{true})],array('','','','','[(#ENV{lang}|texte_script)]'));
-?></div>
-<//B_f>
\ No newline at end of file
diff --git a/www/plugins/formidable/modeles/formulaire_aide_memoire.html b/www/plugins/formidable/modeles/formulaire_aide_memoire.html
deleted file mode 100644 (file)
index 3c6077a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-       <strong><:formidable:traitements_aide_memoire:></strong>
-       <dl>
-               <dt>@nom_site_spip@</dt>
-               <dd><:info_nom_site:></dd>
-       </dl>
-       
-       <BOUCLE_champs(POUR){tableau #SAISIES*|unserialize|saisies_lister_par_nom{0}}>
-       [(#SET{label, [(#VALEUR|table_valeur{options}|table_valeur{label})]})]
-       [(#SET{label_case, [(#VALEUR|table_valeur{options}|table_valeur{label_case})]})]
-       
-       <dl>
-               <dt>@#CLE@</dt>
-               [<dd>(#GET{label}|sinon{#GET{label_case}})</dd>]
-       </dl>
-       </BOUCLE_champs>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/modeles/formulaire_analyse.html b/www/plugins/formidable/modeles/formulaire_analyse.html
deleted file mode 100644 (file)
index 95c9390..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
-#SET{exclure_champs,#TRAITEMENTS|unserialize|table_valeur{enregistrement}|table_valeur{analyse_exclure_champs}|explode{|}}
-<div class='formidable_analyse'>
-[(#REM) On fait un tableau qui contient toutes les réponses, classées par champ, sauf pour les champs qui sont à ne pas prendre en compte ]
-#SET{valeurs,#ARRAY}
-#SET{reponses_total,0}
-<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
-<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}{nom ?= #ENV{nom}}{!nom IN #GET{exclure_champs}}>
-#SET_MERGE{liste_valeurs, #GET{valeurs}|table_valeur{#NOM}|sinon{#ARRAY}, #ARRAY{0,#VALEUR|tenter_unserialize}}
-#SET_MERGE{valeurs, #ARRAY{#NOM,#GET{liste_valeurs}}}
-</BOUCLE_champs>
-</BOUCLE_reponses>
-#SET{reponses_total,#TOTAL_BOUCLE}
-<strong class='nombre_reponse'>
-       [(#TOTAL_BOUCLE|singulier_ou_pluriel{formidable:reponse_une,formidable:reponses_nb})]
-</strong>
-</B_reponses>
-       <strong class='nombre_reponse'><:formidable:reponse_aucune:></strong>
-<//B_reponses>
-
-<BOUCLE_saisies(POUR){tableau #SAISIES|unserialize|saisies_lister_par_nom}>
-[(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
-  [(#CLE|=={#ENV{nom,#CLE}}|oui)
-       [(#CLE|in_array{#GET{exclure_champs}}|non)
-        [(#VALEUR|formidable_analyser_saisie{#GET{valeurs}, #GET{reponses_total}})]
-    ]
-  ]
-]
-</BOUCLE_saisies>
-
-</div><!-- formidable_analyse -->
-<script type='text/javascript'>
-(function($){
-$(document).ready(function(){
-       /* Récupérer tous les tableaux d'analyse non décorés */
-       $('.formidable_analyse table:not(.stat_done)').each(function() {
-               $(this).addClass('stat_done');
-               /* Le tableau contient le nombre total d'élément. On parcours chaque valeur */
-               $nbtotal = $(this).data('nombre');
-               $(this).find('td.stat').each(function(){
-                       $val = $(this).html();
-                       /* Certaines valeurs sont a ignorer (les moyennes) */
-                       $ignore = $(this).is('.ignore');
-                       if (!$ignore) {
-                               /* Calcul du pourcentage */
-                               $taux = Math.round($val/$nbtotal*100);
-                               /* On affiche le nombre de réponses */
-                               $reponses = $(this).attr('title');
-                               if (!parseInt($val) || ($reponses === undefined)) {
-                                       $reponses = '';
-                               } else {
-                                       $reponses = "<small> - " + $reponses + "</small>";
-                               }
-                               $text = "\
-                               <div class='[(#CONFIG{formidable/analyse/classe}) ]progress-bar'>\
-                                       <span></span><strong>" + $taux + "%" + $reponses + "</strong>\
-                               </div>";
-                               $(this).html($text).find('span').width($taux + '%');
-                       }
-               });
-       });
-});
-})(jQuery);
-</script>
-<style type='text/css'>
-<INCLURE{fond=css/formidable_analyse.css} />
-</style>
-</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/www/plugins/formidable/modeles/formulaire_formidable.yaml b/www/plugins/formidable/modeles/formulaire_formidable.yaml
deleted file mode 100644 (file)
index 79dc4e9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-nom: '<:formidable:modele_nom_formulaire:>'
-logo: 'images/formulaire-24.png'
-icone_barre: 'formulaire.png'
-parametres:
-  -
-    saisie: 'hidden'
-    options:
-      nom: 'modele'
-      defaut: 'formulaire'
-  -
-    saisie: 'hidden'
-    options:
-      nom: 'variante'
-      defaut: 'formidable'
-  -
-    saisie: 'formulaire_formidable'
-    options:
-      nom: 'id'
-      label: '<:formidable:modele_label_formulaire_formidable:>'
-      cacher_option_intro: 'oui'
\ No newline at end of file
diff --git a/www/plugins/formidable/modeles/formulaires_reponse.html b/www/plugins/formidable/modeles/formulaires_reponse.html
deleted file mode 100644 (file)
index 494af6e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<BOUCLE_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
-
-<BOUCLE_formulaire(FORMULAIRES){tout}{id_formulaire}>
-#SET{saisies,#SAISIES|unserialize}
-</BOUCLE_formulaire>
-#SET{valeurs,#ARRAY}
-<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
-#SET_MERGE{valeurs,#ARRAY{#NOM,#VALEUR|tenter_unserialize|formidable_ajouter_action_recuperer_fichier{#NOM,#GET{saisies},#ID_FORMULAIRE,#ID_FORMULAIRES_REPONSE}}
-</BOUCLE_champs>
-
-#VOIR_SAISIES{#GET{saisies}, #GET{valeurs}}
-
-</BOUCLE_reponse>
diff --git a/www/plugins/formidable/noisettes/formulaire_formidable.html b/www/plugins/formidable/noisettes/formulaire_formidable.html
deleted file mode 100644 (file)
index 95f7a4c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){identifiant}{0,1}>[(#ENV{afficher_titre_formulaire}|oui)[<h2 class="h2">(#TITRE|typo)</h2>]]</BOUCLE_formulaire>\r
-<div class="ajax">#FORMULAIRE_FORMIDABLE{#ENV{identifiant}}</div>
\ No newline at end of file
diff --git a/www/plugins/formidable/noisettes/formulaire_formidable.yaml b/www/plugins/formidable/noisettes/formulaire_formidable.yaml
deleted file mode 100644 (file)
index dd6679c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-nom: '<:formidable:noisette_nom_noisette_formulaire:>'\r
-icon: 'images/formulaire-24.png'\r
-parametres:\r
-  -\r
-    saisie: 'formulaire_formidable'\r
-    options:\r
-      nom: 'identifiant'\r
-      label: '<:formidable:noisette_label_identifiant:>'\r
-      cacher_option_intro: 'oui'\r
-  -\r
-    saisie: 'oui_non'\r
-    options:\r
-      nom: 'afficher_titre_formulaire'\r
-      label: '<:formidable:noisette_label_afficher_titre_formulaire:>'\r
-      defaut: ''
\ No newline at end of file
diff --git a/www/plugins/formidable/notifications/formulaire_accuse.html b/www/plugins/formidable/notifications/formulaire_accuse.html
deleted file mode 100644 (file)
index b78a781..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-[(#ENV*{message_retour}|propre)]
-
-#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}
-
-<p>---- <br />
-<:envoi_via_le_site:> <a href="#URL_SITE_SPIP">#NOM_SITE_SPIP</a></p>
diff --git a/www/plugins/formidable/notifications/formulaire_email.html b/www/plugins/formidable/notifications/formulaire_email.html
deleted file mode 100644 (file)
index 4bf5745..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-<p>
-       #SET{date, #VAL{d/m/Y}|date}
-       #SET{heure, #VAL{H:i:s}|date}
-       <:formidable:traiter_email_horodatage{formulaire=#ENV*{titre}, date=#GET{date}, heure=#GET{heure}}:>
-       <br/>
-       #SET{url, #SELF{&,true}|url_absolue}
-       <:formidable:traiter_email_page{url=#GET{url}}:>
-</p>
-#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}
-
-<p>
----- <br />
-<:envoi_via_le_site:> <a href="#URL_SITE_SPIP">#NOM_SITE_SPIP</a>[ / IP&nbsp;: (#ENV{ip})]<br />
-[(#ENV*{masquer_liens}|=={on}|non)
-       [(#ENV*{traitements}|table_valeur{enregistrement}|oui)
-       [(#ENV{id_formulaires_reponse}|oui)
-               #SET{url, #URL_ECRIRE{formulaires_reponse}|parametre_url{id_formulaires_reponse,#ENV{id_formulaires_reponse}}|url_absolue}
-               <:formidable:traiter_email_url_enregistrement_precis{url=#GET{url}}:>
-               <br />
-       ]
-       #SET{url, #URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire, #ENV{id_formulaire}}|url_absolue}
-       <:formidable:traiter_email_url_enregistrement{url=#GET{url}}:>
-       ]
-]</p>
diff --git a/www/plugins/formidable/paquet.xml b/www/plugins/formidable/paquet.xml
deleted file mode 100644 (file)
index 61df13f..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<paquet
-       prefix="formidable"
-       categorie="communication"
-       version="3.5.6"
-       etat="stable"
-       compatibilite="[3.0.0;3.2.*]"
-       logo="images/formidable-64.png"
-       schema="0.7.0"
-       documentation="https://contrib.spip.net/Formidable-le-generateur-de-formulaires"
->
-       <nom>Formidable</nom>
-       <!-- Générateur de formulaires -->
-
-       <auteur>RastaPopoulos</auteur>
-       <auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
-       <auteur>Maïeul</auteur>
-
-       <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
-
-       <pipeline nom="formidable_affiche_resume_reponse" action="" />
-       <pipeline nom="formidable_exporter_formulaire_reponses_titres" action="" />
-       <pipeline nom="formidable_exporter_formulaire_reponses_reponse" action="" />
-       <pipeline nom="formidable_traitements" inclure="formidable_pipelines.php" />
-
-       <pipeline nom="autoriser" inclure="formidable_autorisations.php" />
-       <pipeline nom="declarer_tables_objets_sql" inclure="base/formidable_tables.php" />
-       <pipeline nom="declarer_tables_principales" inclure="base/formidable_tables.php" />
-       <pipeline nom="declarer_tables_auxiliaires" inclure="base/formidable_tables.php" />
-       <pipeline nom="declarer_tables_interfaces" inclure="base/formidable_tables.php" />
-
-       <pipeline nom="nospam_lister_formulaires" inclure="formidable_pipelines.php" />
-       <pipeline nom="affiche_droite" inclure="formidable_pipelines.php" />
-       <pipeline nom="affiche_milieu" inclure="formidable_pipelines.php" />
-       <pipeline nom="post_edition" inclure="formidable_pipelines.php" />
-       <pipeline nom="optimiser_base_disparus" inclure="formidable_pipelines.php" />
-       <pipeline nom="taches_generales_cron" inclure="formidable_pipelines.php" />
-
-       <pipeline nom="corbeille_table_infos" inclure="formidable_pipelines.php" />
-       <necessite nom="spip_bonux" compatibilite="[3.3.8;[" />
-       <necessite nom="saisies" compatibilite="[2.18.10;[" />
-       <necessite nom="verifier" compatibilite="[1.6.2;[" />
-       <necessite nom="yaml" compatibilite="[1.5.2;[" />
-       <necessite nom="facteur" compatibilite="[3.4.7;[" />
-
-       <utilise nom="collectionjson" compatibilite="[1.5.0;[" />
-       <utilise nom="cvtupload" compatibilite="[1.11.0;[" />
-       <utilise nom="corbeille" compatibilite="[3.1.0;[" />
-
-       <menu nom="formulaires" titre="formidable:bouton_formulaires" parent="menu_edition" icone="images/formulaire-16.png" />
-</paquet>
diff --git a/www/plugins/formidable/prive/listes/corbeille_formulaires.html b/www/plugins/formidable/prive/listes/corbeille_formulaires.html
deleted file mode 100644 (file)
index 659cf62..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<B_formulaires>
-<div class="liste corbeille-formulaires">
-[<h3 class="titrem">(#GRAND_TOTAL|singulier_ou_pluriel{formidable:formulaires_corbeille_un,formidable:formulaires_corbeille_tous})</h3>]
-[<p class='pagination'>(#PAGINATION)</p>]
-<ul class='liste-items checkables'>
-<BOUCLE_formulaires(FORMULAIRES){statut}{pagination 5}{!par date}{recherche ?}>
-<li class='item'>
-<label for='formulaire-#ID_FORMULAIRE'><:corbeille:selectionner:></label>
-<input type='checkbox' name='elements[]' id="formulaire-#ID_FORMULAIRE" value='#ID_FORMULAIRE'[ (#ID_FORMULAIRE|in_any{#ENV{elements}}|oui)checked='checked']/>
-<h4>[##ID_FORMULAIRE - (#TITRE|sinon{<:info_sans_titre:>})]</h4>
-<small>[(#DATE|affdate)][ (#DATE|heures)]:[(#DATE|minutes)]</small>
-<p class='actions'><a href='#URL_ECRIRE{formulaire,id_formulaire=#ID_FORMULAIRE}'><:corbeille:voir_detail:></a></p>
-</li>
-</BOUCLE_formulaires>
-</ul>
-[<p class='pagination'>(#PAGINATION{prive})</p>]
-</div>
-</B_formulaires>
diff --git a/www/plugins/formidable/prive/listes/corbeille_formulaires_reponses.html b/www/plugins/formidable/prive/listes/corbeille_formulaires_reponses.html
deleted file mode 100644 (file)
index a3780f0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<B_formulaires_reponses>
-<div class="liste corbeille-formulaires_reponses">
-[<h3 class="titrem">(#GRAND_TOTAL|singulier_ou_pluriel{formidable:formulaires_reponses_corbeille_un,formidable:formulaires_reponses_corbeille_tous})</h3>]
-[<p class='pagination'>(#PAGINATION)</p>]
-<ul class='liste-items checkables'>
-<BOUCLE_formulaires_reponses(FORMULAIRES_REPONSES){statut}{pagination 5}{!par date}{recherche ?}>
-<li class='item'>
-<label for='formulaire-#ID_FORMULAIRES_REPONSE'><:corbeille:selectionner:></label>
-<input type='checkbox' name='elements[]' id="formulaire-#ID_FORMULAIRES_REPONSE" value='#ID_FORMULAIRES_REPONSE'[ (#ID_FORMULAIRES_REPONSE|in_any{#ENV{elements}}|oui)checked='checked']/>
-<h4>##ID_FORMULAIRES_REPONSE</h4>
-<small>[(#DATE|affdate)][ (#DATE|heures)]:[(#DATE|minutes)]</small>
-<p class='actions'><a href='#URL_ECRIRE{formulaires_reponse,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}'><:corbeille:voir_detail:></a></p>
-</li>
-</BOUCLE_formulaires_reponses>
-</ul>
-[<p class='pagination'>(#PAGINATION{prive})</p>]
-</div>
-</B_formulaires_reponses>
diff --git a/www/plugins/formidable/prive/objets/contenu/formulaire.html b/www/plugins/formidable/prive/objets/contenu/formulaire.html
deleted file mode 100644 (file)
index 52facde..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-<div class="champ contenu_descriptif[ (#DESCRIPTIF*|strlen|?{'',vide})]">
-       <div class='label'><:info_descriptif:></div>
-       <div dir='#LANG_DIR' class='#EDIT{descriptif} descriptif'>[(#DESCRIPTIF|image_reduire{500,0})]</div>
-</div>
-<div class="champ contenu_message_retour[ (#MESSAGE_RETOUR*|strlen|?{'',vide})]">
-       <div class='label'><:formidable:editer_message_ok:></div>
-       <div dir='#LANG_DIR' class='#EDIT{message_retour} message_retour'>[(#MESSAGE_RETOUR|image_reduire{500,0})]</div>
-</div>
-<div class="champ contenu_apres[ (#APRES*|strlen|?{'',vide})]">
-       <div class='label'><:formidable:editer_apres_label:></div>
-       <div dir='#LANG_DIR' class='#EDIT{apres} apres'>[(#VAL{formidable:editer_apres_choix_}|concat{#APRES}|_T)]</div>
-</div>
-<div class="champ contenu_url_redirect[ (#URL_REDIRECT*|strlen|?{'',vide})]">
-       <div class='label'><:formidable:editer_redirige_url:></div>
-       <div dir='#LANG_DIR' class='#EDIT{url_redirect} url_redirect'>#URL_REDIRECT</div>
-</div>
-
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/objets/contenu/formulaires_reponse.html b/www/plugins/formidable/prive/objets/contenu/formulaires_reponse.html
deleted file mode 100644 (file)
index bfbb1a3..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
-<div class="champ contenu_auteur[ (#ID_AUTEUR*|strlen|?{'',vide})]">
-       <div class='label'><:auteur:></div>
-       <div dir='#LANG_DIR'>
-               [(#ID_AUTEUR|>{0}|oui)
-                       <a href="[(#INFO_URL{auteur,#ID_AUTEUR})]">[(#INFO_TITRE{auteur,#ID_AUTEUR})]</a>
-               ]
-               [(#ID_AUTEUR|>{0}|non)
-                       <:formidable:reponses_anonyme:>
-               ]
-       </div>
-</div>
-<div class="champ contenu_formulaire[ (#ID_FORMULAIRE*|strlen|?{'',vide})]">
-       <div class='label'><:formulaire:titre_formulaire:></div>
-       <div dir='#LANG_DIR'>
-               <a href="[(#URL_ECRIRE{formulaire,id_formulaire=#ID_FORMULAIRE})]">
-                       [(#INFO_TITRE{formulaire,#ID_FORMULAIRE})]
-               </a>
-       </div>
-</div>
-<div class="champ contenu_date[ (#DATE*|strlen|?{'',vide})]">
-       <div class='label'><:date:></div>
-       <div dir='#LANG_DIR'>
-               [(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})]
-       </div>
-</div>
-<div class="champ contenu_maj[ (#MAJ*|strlen|?{'',vide})]">
-       <div class='label'><:formidable:reponse_maj:></div>
-       <div dir='#LANG_DIR'>
-               [(#MAJ|affdate_jourcourt|concat{#MAJ|affdate{", H:i"}})]
-       </div>
-</div>
-</BOUCLE_formulaires_reponse>
diff --git a/www/plugins/formidable/prive/objets/infos/formulaire.html b/www/plugins/formidable/prive/objets/infos/formulaire.html
deleted file mode 100644 (file)
index 474ce7b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}{statut?}>
-<div class='infos'>
-<div class='numero'><:formidable:voir_numero:><p>#ID_FORMULAIRE</p></div>
-
-[(#FORMULAIRE_INSTITUER_OBJET{formulaire,#ID_FORMULAIRE})]
-
-</div>
-</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/www/plugins/formidable/prive/objets/infos/formulaires_reponse.html b/www/plugins/formidable/prive/objets/infos/formulaires_reponse.html
deleted file mode 100644 (file)
index e085931..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){id_formulaires_reponse=#ENV{id}}{statut?}>
-<div class='infos'>
-<div class='numero'><:formidable:reponse_numero:><p>#ID_FORMULAIRES_REPONSE</p></div>
-
-[(#FORMULAIRE_INSTITUER_OBJET{formulaires_reponse,#ID_FORMULAIRES_REPONSE})]
-
-</div>
-</BOUCLE_formulaires_reponse>
\ No newline at end of file
diff --git a/www/plugins/formidable/prive/objets/liste/formulaires.html b/www/plugins/formidable/prive/objets/liste/formulaires.html
deleted file mode 100644 (file)
index c37de66..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-[(#SET{defaut_tri,#ARRAY{
-       date,-1,
-       titre,1,
-       id_formulaire,-1
-}})
-]<B_formulaires>
-#ANCRE_PAGINATION
-<div class="liste-objets formulaires">
-<table class="spip liste">
-[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{formidable:info_1_formulaire,formidable:info_nb_formulaires}})</strong></caption>]
-       <thead>
-               <tr class="first_row">
-                       <th class="statut" scope='col'></th>
-                       <th class="titre" scope='col'>[(#TRI{titre,<:formidable:editer_titre:>,ajax})]</th>
-                       <th class="identifiant" scope='col'>[(#TRI{identifiant,<:formidable:editer_identifiant:>,ajax})]</th>
-                       <th class="reponses" scope='col'>[(#TRI{compteur_formulaires_reponses,<:formidable:titre_reponses:>,ajax})]</th>
-                       <th class="id_formulaire id" scope='col'>[(#TRI{id_formulaire,<:info_numero_abbreviation:>,ajax})]</th>
-               </tr>
-       </thead>
-       <tbody>
-       <BOUCLE_formulaires(FORMULAIRES){id_formulaire?}{statut?}{compteur_left formulaires_reponses}{tri #ENV{par,compteur_formulaires_reponses},#GET{defaut_tri}}{recherche?}{pagination #ENV{nb,10}}>
-               <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][ (#EXPOSE|unique)]">
-                       <td class="statut">[(#STATUT|puce_statut{formulaire,#ID_FORMULAIRE})]</td>
-                       <td class="titre"><a href="[(#ID_FORMULAIRE|generer_url_entite{formulaire})]">#TITRE</a></td>
-                       <td class="identifiant">#IDENTIFIANT</td>
-                       <td class="reponses">[<a href="#URL_ECRIRE{formulaires_reponses,id_formulaire=#ID_FORMULAIRE}">(#COMPTEUR{formulaires_reponses}|?{#COMPTEUR{formulaires_reponses},''})</a>]
-                       <BOUCLE_pub(FORMULAIRES_REPONSES){id_formulaire}{statut=publie}/>[<span class="small"><br />(#TOTAL_BOUCLE|!={#COMPTEUR{formulaires_reponses}}|et{#COMPTEUR{formulaires_reponses}}|?{#TOTAL_BOUCLE})&nbsp;[(#TOTAL_BOUCLE|>{1}|?{<:formidable:info_reponse_publiees:>,<:formidable:info_reponse_publiee:>})]</span>]<//B_pub>
-                       </td>
-                       <td class="id_formulaire id">[(#AUTORISER{modifier,formulaire,#ID_FORMULAIRE}|?{
-                                                       <a href="[(#URL_ECRIRE{formulaire_edit,id_formulaire=#ID_FORMULAIRE})]">#ID_FORMULAIRE</a>,
-                                                       #ID_FORMULAIRE
-                                               })]</td>
-               </tr>
-       </BOUCLE_formulaires>
-       </tbody>
-</table>
-[<p class="pagination">(#PAGINATION{prive})</p>]
-</div>
-</B_formulaires>[
-<div class="liste-objets formulaires"><strong class="caption">(#ENV*{sinon,''})</strong></div>
-]<//B_formulaires>
diff --git a/www/plugins/formidable/prive/objets/liste/formulaires_associer.html b/www/plugins/formidable/prive/objets/liste/formulaires_associer.html
deleted file mode 100644 (file)
index f198a83..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-[(#SET{defaut_tri,#ARRAY{
-       multi titre,1,
-       date_naissance,-1, 
-       id_formulaire,1
-}})
-]
-#SET{exclus,#ENV**{exclus,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}}
-#SET{debut,#ENV{debutgeoa,#EVAL{_request("debutgeoa");}}}
-<B_liste_formulaires>
-[(#REM) En cas de pagination indirecte @32, il faut refaire le set car la boucle
-a mis a jour la valeur avec la page reelle]
-#SET{debut,#ENV{debutgeoa,#EVAL{_request("debutgeoa");}}}
-#SET{afficher_lettres,#TRI|=={'multi titre'}|oui}
-#ANCRE_PAGINATION
-<div class="liste-objets liste-objets-associer formulaires">
-<table class="spip liste">
-[<caption><span class="caption"><strong>(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{formidable:info_1_formulaire,formidable:info_nb_formulaires}})</strong>
-<span class="recherche">
-       <label for="recherche-#ENV{id}"><:info_rechercher_02:></label>
-       <input type="text" class="recherche" name="recherche" id="recherche-#ENV{id}" value="#ENV{recherche}" />
-       <input type="submit" class="tout_voir" name="tout_voir" value="<:info_tout_afficher:>" />
-</span>
-</span>
-</caption>]
-       <thead>
-               #SET{p,''}
-               <BOUCLE_lettre(FORMULAIRES){tout}{!id_formulaire IN #GET{exclus}}{where?}{recherche?}{statut?}
-                       {tri #ENV{par,multi titre},#GET{defaut_tri}}{id_formulaire==#GET{afficher_lettres}|?{'.*','A'}}>[
-               (#TITRE**|extraire_multi|initiale|unique|oui)
-               [(#SET{p,#GET{p}|concat{
-               #SELF|parametre_url{debutgeoa,@#ID_FORMULAIRE}|ancre_url{paginationgeoa}|afficher_initiale{#TITRE**|extraire_multi|initiale{},#COMPTEUR_BOUCLE,#GET{debut},#ENV{nb,10}}
-               }})]
-               ]#SAUTER{#ENV{nb,10}|moins{#COMPTEUR_BOUCLE|=={1}|?{2,1}}}</BOUCLE_lettre>[
-               (#SET{p,
-                       #GET{p}|concat{
-                               #REM|afficher_initiale{#REM,#TOTAL_BOUCLE,#GET{debut},#ENV{nb,10}}
-                       }
-               })]</B_lettre>
-               [<tr><td colspan="3"><p class="pagination">(#GET{p})</p></td></tr>]
-       
-               <tr class="first_row">
-                       <th class="statut" scope="col">[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th> 
-                       <th class="titre" scope="col">[(#TRI{multi titre,<:formidable:editer_titre:>,ajax})]</th>
-                       <th class="action" scope="col"></th>
-               </tr>
-       </thead>
-       <tbody>
-       <BOUCLE_liste_formulaires(FORMULAIRES){!id_formulaire IN #GET{exclus}}{where?}{recherche?}{statut?}
-               {tri #ENV{par,multi titre},#GET{defaut_tri}}{pagination #ENV{nb,10} forma}>
-               <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][ (#EXPOSE|unique)][ (#TITRE**|extraire_multi|initiale|=={#ENV{i}}|?{on}|unique)]">
-                       <td class="statut">[(#STATUT|puce_statut{formulaire})]</td> 
-                       <td class="titre">[(#LOGO_FORMULAIRE|image_reduire{20,20})]<a href="[(#ID_FORMULAIRE|generer_url_entite{formulaire})]">#TITRE</a></td>
-                       <td class="action">
-                               <button type="submit" class="button link add" name="ajouter_lien\[formulaire-#ID_FORMULAIRE-#OBJET-#ID_OBJET\]" value="+"><:formidable:liens_ajouter_lien:> [(#CHEMIN_IMAGE{ajouter-12.png}|balise_img{'+'})]</button>
-                       </td>
-               </tr>
-       </BOUCLE_liste_formulaires>
-       </tbody>
-</table>
-[<p class="pagination">(#PAGINATION{prive})</p>]
-</div>
-</B_liste_formulaires>[(#ENV{recherche}|oui)
-<div class="liste-objets liste-objets-associer formulaires caption-wrap">
-<span class="caption"><strong>[(#VAL{info_recherche_auteur_zero}|_T{#ARRAY{cherche_auteur,#ENV{recherche}}})]</strong>
-<span class="recherche">
-       <label for="recherche-#ENV{id}"><:info_rechercher_02:></label>
-       <input type="text" class="recherche" name="recherche" id="recherche-#ENV{id}" value="#ENV{recherche}" />
-       <input type="submit" class="tout_voir" name="tout_voir" value="<:info_tout_afficher:>" />
-</span>
-</span>
-</div>
-]<//B_liste_formulaires>
diff --git a/www/plugins/formidable/prive/objets/liste/formulaires_associer_fonctions.php b/www/plugins/formidable/prive/objets/liste/formulaires_associer_fonctions.php
deleted file mode 100644 (file)
index 12885a6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-/**
- * Fonctions du squelette associé
- *
- * @plugin     GéoCulture : noyau fonctionnel
- * @copyright  2016
- * @author     Les Développements Durables
- * @licence    GNU/GPL
- * @package    SPIP\Geoculture_core\Fonctions
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-
-// pour initiale et afficher_initiale
-include_spip('prive/objets/liste/auteurs_fonctions');
diff --git a/www/plugins/formidable/prive/objets/liste/formulaires_lies.html b/www/plugins/formidable/prive/objets/liste/formulaires_lies.html
deleted file mode 100644 (file)
index 777d964..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-[(#SET{defaut_tri,#ARRAY{
-       multi titre,1,
-       id_formulaire,1
-}})
-]
-#SET{selection,#ENV**{selection,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}}
-#SET{debut,#ENV{debutgeol,#EVAL{_request("debutgeol");}}}
-<B_liste_formulaires>
-[(#REM) En cas de pagination indirecte @32, il faut refaire le set car la boucle
-a mis a jour la valeur avec la page reelle]
-#SET{debut,#ENV{debutgeol,#EVAL{_request("debutgeol");}}}
-#SET{afficher_lettres,#TRI|=={'multi titre'}|oui}
-#ANCRE_PAGINATION
-<div class="liste-objets liste-objets-lies formulaires">
-<table class="spip liste">
-[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{formidable:info_1_formulaire,formidable:info_nb_formulaires}})</strong></caption>]
-       <thead>
-               #SET{p,''}
-               <BOUCLE_lettre(FORMULAIRES){tout}{id_formulaire IN #GET{selection}}{where?}{statut?}
-                       {tri #ENV{par,multi titre},#GET{defaut_tri}}{id_formulaire==#GET{afficher_lettres}|?{'.*','A'}}>[
-               (#TITRE**|extraire_multi|initiale|unique|oui)
-               [(#SET{p,#GET{p}|concat{
-               #SELF|parametre_url{debutgeol,@#ID_FORMULAIRE}|ancre_url{paginationgeol}|afficher_initiale{#TITRE**|extraire_multi|initiale{},#COMPTEUR_BOUCLE,#GET{debut},#ENV{nb,10}}
-               }})]
-               ]#SAUTER{#ENV{nb,10}|moins{#COMPTEUR_BOUCLE|=={1}|?{2,1}}}</BOUCLE_lettre>[
-               (#SET{p,
-                       #GET{p}|concat{
-                               #REM|afficher_initiale{#REM,#TOTAL_BOUCLE,#GET{debut},#ENV{nb,10}}
-                       }
-               })]</B_lettre>
-               [<tr><td colspan="4"><p class="pagination">(#GET{p})</p></td></tr>]
-
-               <tr class="first_row">
-                       <th class="statut" scope="col">[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th> 
-                       <th class="titre" scope="col">[(#TRI{multi titre,<:formidable:editer_titre:>,ajax})]</th>
-                       <th class="action" scope="col"></th>
-               </tr>
-       </thead>
-       <tbody>
-       <BOUCLE_liste_formulaires(FORMULAIRES){id_formulaire IN #GET{selection}}{statut?}
-               {tri #ENV{par,multi titre},#GET{defaut_tri}}{pagination #ENV{nb,10} forml}>
-               <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][ (#EXPOSE|unique)][ (#TITRE**|extraire_multi|initiale|=={#ENV{i}}|?{on}|unique)][(#ID_FORMULAIRE|=={#ENV{id_lien_ajoute}}|oui)append]">
-                       <td class="statut">[(#STATUT|puce_statut{formulaire})]</td> 
-                       <td class="titre">[(#LOGO_FORMULAIRE|image_reduire{20,20})]<a href="[(#ID_FORMULAIRE|generer_url_entite{formulaire})]">#TITRE</a></td>
-
-                       <td class="action">
-                               [(#ENV{editable}|oui)
-                                       <button type="submit" class="button link delete" name="supprimer_lien\[formulaire-#ID_FORMULAIRE-#OBJET-#ID_OBJET\]" value="X"><:formidable:liens_retirer_lien_formulaire:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})]</button>
-                               ]
-                       </td>
-               </tr>
-       </BOUCLE_liste_formulaires>
-       </tbody>
-</table>
-[<p class="pagination">(#PAGINATION{prive})</p>]
-[(#GRAND_TOTAL|>{3}|oui)<div class="action"><button type="submit" class="button link" name="supprimer_lien\[formulaire-*-#OBJET-#ID_OBJET\]" value="X"><:formidable:liens_retirer_tous_liens_formulaires:> [(#CHEMIN_IMAGE{supprimer-8.png}|balise_img{'X'})]</button></div>]
-</div>
-</B_liste_formulaires>
-<div class="liste-objets liste-objets-lies formulaires caption-wrap">
-       <strong class="caption">[(#ENV*{titre,<:formidable:formulaires_aucun:>})]</strong>
-</div>
-<//B_liste_formulaires>
diff --git a/www/plugins/formidable/prive/objets/liste/formulaires_lies_fonctions.php b/www/plugins/formidable/prive/objets/liste/formulaires_lies_fonctions.php
deleted file mode 100644 (file)
index 6a97b1d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Fonctions du squelette associé
- *
- * @plugin     GéoCulture : noyau fonctionnel
- * @copyright  2016
- * @author     Les Développements Durables
- * @licence    GNU/GPL
- * @package    SPIP\Geoculture_core\Fonctions
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// pour initiale et afficher_initiale
-include_spip('prive/objets/liste/auteurs_fonctions');
diff --git a/www/plugins/formidable/prive/objets/liste/formulaires_reponses.html b/www/plugins/formidable/prive/objets/liste/formulaires_reponses.html
deleted file mode 100644 (file)
index cba23de..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-[(#SET{defaut_tri,#ARRAY{
-       date,-1,
-       titre,1,
-       id_formulaires_reponse,1
-}})
-]<B_reponses>
-#ANCRE_PAGINATION
-<div class="liste-objets formulaires_reponses">
-<table class="liste spip">
-[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{formidable:info_1_reponse,formidable:info_nb_reponses}})</strong></caption>]
-       <thead>
-               <tr class="first_row">
-                       <th class="statut" scope='col'>[(#TRI{statut,<span>#</span>,ajax})]</th>
-                       <th class="date" scope='col'>[(#TRI{date,<:date:>,ajax})]</th>
-                       <th class="resume" scope='col'></th>
-                       <th class="auteur" scope='col'>[(#TRI{id_auteur,<:formidable:reponses_auteur:>,ajax})]</th>
-                       <th class="id" scope='col'>[(#TRI{id_formulaires_reponse,<:info_numero_abbreviation:>,ajax})]</th>
-               </tr>
-       </thead>
-       <tbody>
-       <BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire?}{id_formulaires_reponse?}{id_auteur?}{statut?}{recherche?}{tri #ENV{par,date},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
-               <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
-                       <td class="statut">[(#ID_FORMULAIRES_REPONSE|puce_changement_statut{#STATUT, #ID_FORMULAIRE, formulaires_reponse})]</td>
-                       <td class="date">[(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})]</td>
-                       <td class="resume">[(#ID_FORMULAIRES_REPONSE|affiche_resume_reponse{#ID_FORMULAIRE}|sinon{[<a href="(#URL_ECRIRE{formulaires_reponse,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE})"><:formidable:reponses_voir_detail:></a>]})]</td>
-                       <td class="auteur">
-                               <BOUCLE_auteur(AUTEURS){id_auteur}{tout}>
-                               <a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a>
-                               </BOUCLE_auteur>
-                               [(#IP|match{\W}|?{#IP,#IP|couper{8}})]
-                               <//B_auteur>
-                       </td>
-                       <td class="id_formulaire id">
-                               <a href="[(#URL_ECRIRE{formulaires_reponse,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE})]">#ID_FORMULAIRES_REPONSE</a>
-                       </td>
-               </tr>
-       </BOUCLE_reponses>
-       </tbody>
-</table>
-[<p class="pagination">(#PAGINATION{prive})</p>]
-</div>
-</B_reponses>[
-<div class="liste-objets formulaires_reponses"><strong class="caption">(#ENV*{sinon,''})</strong></div>
-]<//B_reponses>
diff --git a/www/plugins/formidable/prive/squelettes/contenu/configurer_formidable.html b/www/plugins/formidable/prive/squelettes/contenu/configurer_formidable.html
deleted file mode 100644 (file)
index df8aa01..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-[(#AUTORISER{configurer,_fsondage}|sinon_interdire_acces)]
-
-<h1 class="grostitre"><:formidable:cfg_titre_page_configurer_formidable:></h1>
-
-<div class="ajax">
-       #FORMULAIRE_CONFIGURER_FORMIDABLE_ANALYSE
-</div>
diff --git a/www/plugins/formidable/prive/squelettes/contenu/formulaire.html b/www/plugins/formidable/prive/squelettes/contenu/formulaire.html
deleted file mode 100644 (file)
index b61b10b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>\r
-[(#BOITE_OUVRIR{\r
-       [(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)\r
-               [(#URL_ECRIRE{formulaire_edit,id_formulaire=#ID_FORMULAIRE}\r
-                       |icone_verticale{<:formidable:editer_modifier_formulaire:>,formulaire,formulaire-editer-24,right})]\r
-       ]\r
-       [<h1>(#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{formulaire-24.png}|balise_img{formulaire,cadre-icone})]</h1>]\r
-       [<strong class="soustitre">(#IDENTIFIANT)</strong>]\r
-,simple fiche_objet})]\r
-\r
-\r
-       <!--affiche_milieu-->\r
-\r
-       <div id="wysiwyg">\r
-       <INCLURE{fond=prive/objets/contenu/formulaire,id=#ID_FORMULAIRE,id_formulaire=#ID_FORMULAIRE,virtuel=oui,ajax=wysiwyg,wysiwyg=1}>\r
-       </div>\r
-\r
-       #SET{traitements_disponibles, #VAL|traitements_lister_disponibles}\r
-       [(#BOITE_OUVRIR{#CHEMIN_IMAGE{formulaire-config-traitements-24.png}\r
-               |balise_img{'',cadre-icone}\r
-               |concat{<:formidable:traitements_actives:>},'simple traitements'})]\r
-       <B_traitements>\r
-               <ul class='spip'>\r
-                       <BOUCLE_traitements(POUR){tableau #TRAITEMENTS|unserialize|sinon{#ARRAY}}>\r
-                               <li>[(#GET{traitements_disponibles}|table_valeur{#CLE}|table_valeur{titre})]</li>\r
-                       </BOUCLE_traitements>\r
-               </ul>\r
-       </B_traitements>\r
-               <p><:formidable:aucun_traitement:></p>\r
-       <//B_traitements>\r
-       #BOITE_FERMER\r
-\r
-       #FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE}\r
-\r
-       #PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,formulaire,id,#ID_FORMULAIRE},data,'<div class="nettoyeur"></div>'}}\r
-\r
-#BOITE_FERMER\r
-\r
-#SET{enfants,''}\r
-[(#VAL{formulaire}|concat{-enfants}|trouver_fond{prive/objets/contenu/}|oui)\r
-       [(#SET{enfants,[(#INCLURE{fond=prive/objets/contenu/formulaire-enfants,id_objet,env})]})]\r
-]\r
-[(#PIPELINE{affiche_enfants,[(#ARRAY{args,#ARRAY{exec,formulaire,objet,formulaire,id_objet,#ID_FORMULAIRE},data,#GET{enfants}})]})]\r
-\r
-</BOUCLE_formulaire>\r
diff --git a/www/plugins/formidable/prive/squelettes/contenu/formulaire_edit.html b/www/plugins/formidable/prive/squelettes/contenu/formulaire_edit.html
deleted file mode 100644 (file)
index 2594009..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#SET{objet,formulaire}
-#SET{id_objet,#VAL{id_formulaire}|_request|intval}
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{editer, formulaire, #GET{id_objet}}}>
-#SET{redirect,#ENV{redirect}|sinon{#ENV{lier_trad,#GET{id_objet}}|?{#ENV{lier_trad,#GET{id_objet}}|generer_url_entite{#GET{objet}},#GET{id_rubrique}|?{#GET{id_rubrique}|generer_url_entite{rubrique},#URL_ECRIRE{rubriques}}}}}
-       
-<script type="text/javascript">/*<![CDATA[*/
-if (window.jQuery){
-function debloquer_prive(){ jQuery('input[required], textarea[required], select[required]').removeAttr('required'); }
-jQuery('document').ready(debloquer_prive);
-onAjaxLoad(debloquer_prive);
-}
-/*]]>*/</script>
-<div class='cadre-formulaire-editer'>
-<div class="entete-formulaire">
-       [(#GET{id_objet}|oui)
-       [(#GET{redirect}|icone_verticale{[(#GET{objet}|objet_info{texte_retour}|_T)],#GET{objet}|objet_info{icone_objet},'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})]
-       ]
-       [
-               [(#GET{objet}|objet_info{#GET{id_objet}|?{texte_modifier,texte_creer}}|_T)]
-               <h1>(#ENV{titre,#INFO_TITRE{#GET{objet},#GET{id_objet}}|sinon{#ENV{nouveau}|=={oui}|?{<:formidable:editer_nouveau:>,#VAL{id_menu}|_request}}})</h1>
-       ]
-</div>
-       #SET{configurer,formulaire}
-       <BOUCLE_formulaire(FORMULAIRES){id_formulaire=#GET{id_objet}}{tout}>
-               #SET{configurer,#ENV{configurer}|in_array{#LISTE{formulaire,champs,traitements,auteurs}}|?{#ENV{configurer},champs}}
-       </BOUCLE_formulaire>
-       
-       [(#GET{configurer}|=={formulaire}|oui)
-               #FORMULAIRE_EDITER_FORMULAIRE{#GET{id_objet}, #VAL{nouveau}|_request|sinon{''}}
-       ]
-       [(#GET{configurer}|=={auteurs}|oui)
-               #FORMULAIRE_EDITER_LIENS{formulaires,#GET{id_objet},auteurs}
-       ]
-       [(#GET{configurer}|=={champs}|oui)
-               #FORMULAIRE_EDITER_FORMULAIRE_CHAMPS{#ENV{id_formulaire}}
-       ]
-       [(#GET{configurer}|=={traitements}|oui)
-               #FORMULAIRE_EDITER_FORMULAIRE_TRAITEMENTS{#ENV{id_formulaire}}
-       ]
-</div>
-</BOUCLE_autoriser>
diff --git a/www/plugins/formidable/prive/squelettes/contenu/formulaires.html b/www/plugins/formidable/prive/squelettes/contenu/formulaires.html
deleted file mode 100644 (file)
index 8381bc1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#FORMULAIRE_RECHERCHE_ECRIRE{#SELF,ajax}
-<h1 class="grostitre"><:formidable:bouton_formulaires:></h1>
-
-<INCLURE{fond=prive/objets/liste/formulaires,nb=#ENV{nb,25},statut=#LISTE{prop,publie},env,ajax,sinon=<:formidable:formulaires_aucun:>} />
-
-[(#AUTORISER{editer, formulaire}|oui)
-[(#URL_ECRIRE{formulaire_edit}
-       |parametre_url{nouveau,oui}
-       |icone_verticale{<:formulaire:icone_creer_formulaire:>,formulaire,formulaire-nouveau-48,right})]
-]
-
-[<div class="nettoyeur"></div>
-<h3><:formidable:titre_formulaires_archives:></h3>
-(#INCLURE{fond=prive/objets/liste/formulaires,nb=#ENV{nb,10},statut=refuse,par=id_formulaire,env,ajax})]
\ No newline at end of file
diff --git a/www/plugins/formidable/prive/squelettes/contenu/formulaires_analyse.html b/www/plugins/formidable/prive/squelettes/contenu/formulaires_analyse.html
deleted file mode 100644 (file)
index fa7bb7a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulairesreponse, #ID_FORMULAIRE}}>
-[(#BOITE_OUVRIR{'','simple'})]
-        [(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
-
-       [<h4><:formidable:reponses_analyse:></h4>
-       <h1>(#TITRE|sinon{<:info_sans_titre:>})</h1>]
-
-       [(#BOITE_OUVRIR{'','simple'})]  
-       <BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
-       </BOUCLE_reponses>
-       <strong>[(#_reponses:TOTAL_BOUCLE
-               |singulier_ou_pluriel{formidable:analyse_une_reponse_total,formidable:analyse_nb_reponses_total})]</strong>
-       </B_reponses>
-       <strong><:formidable:analyse_zero_reponse_total:></strong>
-       <//B_reponses>
-       #BOITE_FERMER
-#BOITE_FERMER
-
-[(#BOITE_OUVRIR{'','simple'})]
-#INCLURE{fond=modeles/formulaire_analyse,id_formulaire}
-#BOITE_FERMER
-</BOUCLE_autoriser>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/contenu/formulaires_reponse.html b/www/plugins/formidable/prive/squelettes/contenu/formulaires_reponse.html
deleted file mode 100644 (file)
index 13b6227..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulairesreponse, #ID_FORMULAIRE}}>
-[(#BOITE_OUVRIR{
-       <h1><:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:></h1>
-,simple fiche_objet})]
-
-
-<!--affiche_milieu-->
-
-<div id="wysiwyg">
-<INCLURE{fond=prive/objets/contenu/formulaires_reponse,
-       id=#ID_FORMULAIRES_REPONSE,
-       id_formulaires_reponse=#ID_FORMULAIRES_REPONSE,
-       virtuel=oui,ajax=wysiwyg,wysiwyg=1} />
-</div>
-
-<div class='nettoyeur'></div>
-[(#BOITE_OUVRIR{<h3><:formulaires_reponse:reponses_donnees:></h3>,reponses})]
-#INCLURE{fond=modeles/formulaires_reponse,id_formulaires_reponse}
-#BOITE_FERMER
-
-#PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,formulaires_reponse,id,#ID_FORMULAIRES_REPONSE},data,'<div class="nettoyeur"></div>'}}
-
-#BOITE_FERMER
-
-#SET{enfants,''}
-[(#VAL{formulaires_reponse}|concat{-enfants}|trouver_fond{prive/objets/contenu/}|oui)
-       [(#SET{enfants,[(#INCLURE{fond=prive/objets/contenu/formulaires_reponse-enfants,id_objet,env})]})]
-]
-[(#PIPELINE{affiche_enfants,[(#ARRAY{args,#ARRAY{exec,formulaires_reponse,objet,formulaires_reponse,id_objet,#ID_FORMULAIRES_REPONSE},data,#GET{enfants}})]})]
-
-</BOUCLE_autoriser>
-</BOUCLE_formulaires_reponse>
diff --git a/www/plugins/formidable/prive/squelettes/contenu/formulaires_reponses.html b/www/plugins/formidable/prive/squelettes/contenu/formulaires_reponses.html
deleted file mode 100644 (file)
index 30c06fe..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulairesreponse, #ID_FORMULAIRE}}>
-[(#BOITE_OUVRIR{'','simple'})]
-       [(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
-       
-       <h4><:formidable:voir_reponses:></h4>
-       <h1>#TITRE</h1>
-#BOITE_FERMER
-
-#FORMULAIRE_RECHERCHE_ECRIRE{#SELF,ajax}
-<h2><:formidable:reponses_liste:></h2>
-<INCLURE{fond=prive/squelettes/inclure/formulaires_reponses-filtres,env,ajax} />
-
-</BOUCLE_autoriser>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/extra/formulaire.html b/www/plugins/formidable/prive/squelettes/extra/formulaire.html
deleted file mode 100644 (file)
index c760353..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-<!--#extra-->
-[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'raccourcis'})]
-       [(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
-       [(#URL_ACTION_AUTEUR{dupliquer_formulaire, #ID_FORMULAIRE}|icone_horizontale{<:formidable:formulaires_dupliquer:>,formulaire-dupliquer-24})]
-       ]
-       <BOUCLE_exports(POUR){tableau #VAL|echanges_formulaire_lister_disponibles|table_valeur{exporter}}>
-       [(#URL_ACTION_AUTEUR{exporter_formulaire,#ID_FORMULAIRE-#CLE}|icone_horizontale{[<:formidable:voir_exporter:> ((#CLE))],formulaire-exporter-24})]
-       </BOUCLE_exports>
-#BOITE_FERMER
-
-
-<B_liens>
-[(#BOITE_OUVRIR{<:formidable:info_formulaire_utilise_par:>,'simple formidable_liens'})]
-<ul class="liste-items">
-<BOUCLE_liens(formulaires_liens){id_formulaire}>[
-       <li class="item"><a href="[(#ID_OBJET|generer_url_entite{#OBJET})]">[(#CHEMIN_IMAGE{[(#OBJET|objet_info{icone_objet})-16]}|balise_img{[(#OBJET|objet_info{texte_objet}|_T)],'icone-objet'})](#INFO_TITRE{#OBJET,#ID_OBJET})</a></li>
-]</BOUCLE_liens>
-</ul>
-#BOITE_FERMER
-</B_liens>
-
-<!--/#extra-->
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/extra/formulaire_edit.html b/www/plugins/formidable/prive/squelettes/extra/formulaire_edit.html
deleted file mode 100644 (file)
index ac6dc57..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES) {id_formulaire}{tout}>
-#SET{configurer,#ENV{configurer}|in_array{#LISTE{formulaire,champs,traitements,auteurs}}|?{#ENV{configurer},champs}}
-
-<!--#extra-->
-[(#GET{configurer}|in_array{#LISTE{formulaire,traitements,champs}}|oui)
-#BOITE_OUVRIR{'','info'}
-       #INCLURE{fond=modeles/formulaire_aide_memoire, id_formulaire=#ID_FORMULAIRE}
-#BOITE_FERMER
-]
-<!--/#extra-->
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/extra/formulaires_analyse.html b/www/plugins/formidable/prive/squelettes/extra/formulaires_analyse.html
deleted file mode 100755 (executable)
index f8fd58a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-[(#AUTORISER{voir, formulaires_analyse, #ID_FORMULAIRE}|oui)
-#FORMULAIRE_EXPORTER_FORMULAIRE_ANALYSE{#ID_FORMULAIRE}
-]
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/extra/formulaires_reponses.html b/www/plugins/formidable/prive/squelettes/extra/formulaires_reponses.html
deleted file mode 100644 (file)
index 4f0316f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-[(#AUTORISER{voir, formulairesreponse, #ID_FORMULAIRE}|oui)
-       #FORMULAIRE_EXPORTER_FORMULAIRE_REPONSES{#ID_FORMULAIRE}
-]
-</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/www/plugins/formidable/prive/squelettes/hierarchie/formulaire.html b/www/plugins/formidable/prive/squelettes/hierarchie/formulaire.html
deleted file mode 100644 (file)
index a89f8d8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- hierarchie -->
-<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
-<strong class="on">[(#INFO_TITRE{formulaire,#ID_FORMULAIRE}|sinon{<:formidable:editer_nouveau:>})]</strong>
diff --git a/www/plugins/formidable/prive/squelettes/hierarchie/formulaire_edit.html b/www/plugins/formidable/prive/squelettes/hierarchie/formulaire_edit.html
deleted file mode 100644 (file)
index a89f8d8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- hierarchie -->
-<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
-<strong class="on">[(#INFO_TITRE{formulaire,#ID_FORMULAIRE}|sinon{<:formidable:editer_nouveau:>})]</strong>
diff --git a/www/plugins/formidable/prive/squelettes/hierarchie/formulaires.html b/www/plugins/formidable/prive/squelettes/hierarchie/formulaires.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/www/plugins/formidable/prive/squelettes/hierarchie/formulaires_analyse.html b/www/plugins/formidable/prive/squelettes/hierarchie/formulaires_analyse.html
deleted file mode 100644 (file)
index adba147..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{statut?}>
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulairesreponse,#ID_FORMULAIRE}}>
-<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
-<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> &gt;
-<strong class="on"><:formidable:reponses_analyse:></strong>
-</BOUCLE_autoriser>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/hierarchie/formulaires_reponse.html b/www/plugins/formidable/prive/squelettes/hierarchie/formulaires_reponse.html
deleted file mode 100644 (file)
index 391c4aa..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES_REPONSES){id_formulaires_reponse}{statut?}>
-<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
-<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> &gt;
-<a class="on" href="[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE})]"><:formidable:voir_reponses:></a> &gt;
-<strong class="on"><:formulaires_reponse:titre_formulaires_reponse:></strong>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/hierarchie/formulaires_reponses.html b/www/plugins/formidable/prive/squelettes/hierarchie/formulaires_reponses.html
deleted file mode 100644 (file)
index f6c093e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{statut?}>
-<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
-<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> &gt;
-<strong class="on"><:formidable:voir_reponses:></strong>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/inclure/formulaires_lies.html b/www/plugins/formidable/prive/squelettes/inclure/formulaires_lies.html
deleted file mode 100644 (file)
index d153a66..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<B_liens>
-[(#BOITE_OUVRIR{[(#TOTAL_BOUCLE|singulier_ou_pluriel{formidable:info_utilise_1_formulaire,formidable:info_utilise_nb_formulaires})],'simple formidable_liens'})]
-<ul class="liste-items">
-<BOUCLE_liens(formulaires_liens){id_objet}{objet}>[
-       <li class="item"><a href="[(#ID_FORMULAIRE|generer_url_entite{formulaire})]">[(#CHEMIN_IMAGE{[(#VAL{formulaire}|objet_info{icone_objet})-16]}|balise_img{[(#VAL{formulaire}|objet_info{texte_objet}|_T)],'icone-objet'})](#INFO_TITRE{formulaire,#ID_FORMULAIRE})</a></li>
-]</BOUCLE_liens>
-</ul>
-#BOITE_FERMER
-</B_liens>
\ No newline at end of file
diff --git a/www/plugins/formidable/prive/squelettes/inclure/formulaires_reponses-filtres.html b/www/plugins/formidable/prive/squelettes/inclure/formulaires_reponses-filtres.html
deleted file mode 100644 (file)
index 00ffa8a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<div class='onglets_simple clearfix'>
-       <ul>
-               <li>[(#SELF|parametre_url{statut|id_formulaires_reponse,'XXX'}|replace{XXX,''}|lien_ou_expose{<:formidable:info_reponse_toutes:>,[(#ENV{statut}|non|et{#ENV{id_formulaires_reponse,''}|non})],ajax})]</li>
-               <BOUCLE_repprop(FORMULAIRES_REPONSES){id_formulaire}{statut=prop} />
-               <li>[(#SELF|parametre_url{statut,'prop'}|lien_ou_expose{<:formidable:info_reponse_proposees:>[ \((#TOTAL_BOUCLE|>{0}|?{#TOTAL_BOUCLE})\)],#ENV{statut}|=={prop},ajax})]</li>
-               <//B_repprop><BOUCLE_reppub(FORMULAIRES_REPONSES){id_formulaire}{statut=publie} />
-               <li>[(#SELF|parametre_url{statut,'publie'}|lien_ou_expose{<:formidable:info_reponse_publiees:>[ \((#TOTAL_BOUCLE|>{0}|?{#TOTAL_BOUCLE})\)],#ENV{statut}|=={publie},ajax})]</li>
-               <//B_reppub><BOUCLE_repref(FORMULAIRES_REPONSES){id_formulaire}{statut=refuse} />
-               <li>[(#SELF|parametre_url{statut,'refuse'}|lien_ou_expose{<:formidable:info_reponse_refusees:>[ \((#TOTAL_BOUCLE|>{0}|?{#TOTAL_BOUCLE})\)],#ENV{statut}|=={refuse},ajax})]</li>
-               <//B_repref><BOUCLE_reppoub(FORMULAIRES_REPONSES){id_formulaire}{statut=poubelle} />
-               <li>[(#SELF|parametre_url{statut,'poubelle'}|lien_ou_expose{<:formidable:info_reponse_supprimees:>[ \((#TOTAL_BOUCLE|>{0}|?{#TOTAL_BOUCLE})\)],#ENV{statut}|=={poubelle},ajax})]</li>
-               <//B_reppoub>
-       </ul>
-</div>
-<INCLURE{fond=prive/objets/liste/formulaires_reponses, env, ajax, nb=#ENV{nb,30}, sinon=<:formidable:info_aucune_reponse:>} />
-
-<BOUCLE_repall(FORMULAIRES_REPONSES){id_formulaire}{statut!=refuse}/>
-[(#ENV{statut}|non
-       |et{#ENV{id_formulaires_reponse,''}|non}
-       |et{#TOTAL_BOUCLE|>{10}}
-       |et{#AUTORISER{instituer,formulairesreponse,#ID_FORMULAIRE}})
-
-       [(#URL_ACTION_AUTEUR{vider_formulaire,#ID_FORMULAIRE}
-               |icone_verticale{<:formidable:reponses_supprimer:>,formulaire,formulaire-reponses-supprimer-24,'right danger',onclick="return confirm('<:formidable:reponses_supprimer_confirmation:>');"})]
-]
-<//B_repall>
diff --git a/www/plugins/formidable/prive/squelettes/navigation/formulaire.html b/www/plugins/formidable/prive/squelettes/navigation/formulaire.html
deleted file mode 100644 (file)
index 0247320..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-#BOITE_OUVRIR{'','info'}
-#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
-
-
-[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
-
-       [(#URL_ECRIRE{formulaire_edit}
-               |parametre_url{id_formulaire, #ID_FORMULAIRE}
-               |parametre_url{configurer,formulaire}
-               |parametre_url{avertissement,''}
-               |icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire-editer-24})]
-
-       [(#CONFIG{formidable/analyse/auteur}|=={on}|oui)
-               [(#URL_ECRIRE{formulaire_edit}
-                       |parametre_url{id_formulaire, #ID_FORMULAIRE}
-                       |parametre_url{configurer,auteurs}
-                       |parametre_url{avertissement,''}
-                       |icone_horizontale{<:formidable:editer_menu_auteurs:>,formulaire-config-auteurs-24})]
-       ]
-
-       [(#URL_ECRIRE{formulaire_edit}
-               |parametre_url{id_formulaire, #ID_FORMULAIRE}
-               |parametre_url{configurer,champs}
-               |parametre_url{avertissement,''}
-               |icone_horizontale{<:formidable:editer_menu_champs:>,formulaire-config-champs-24})]
-
-       [(#URL_ECRIRE{formulaire_edit}
-               |parametre_url{id_formulaire, #ID_FORMULAIRE}
-               |parametre_url{configurer,traitements}
-               |parametre_url{avertissement,''}
-               |icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire-config-traitements-24})]
-
-]
-
-
-<BOUCLE_resultats(FORMULAIRES_REPONSES){id_formulaire}{statut==.*}/>
-       <BOUCLE_si(CONDITION){si #_resultats:TOTAL_BOUCLE|et{#AUTORISER{voir,formulairesreponse,#ID_FORMULAIRE}}}>
-               <div class='navigation_resultats'>
-                       [(#URL_ECRIRE{formulaires_reponses}
-                               |parametre_url{id_formulaire, #ID_FORMULAIRE}
-                               |icone_horizontale{#_resultats:TOTAL_BOUCLE|singulier_ou_pluriel{formidable:info_1_reponse,formidable:info_nb_reponses},formulaire-reponses-24})
-                       ]
-                       <BOUCLE_publies(FORMULAIRES_REPONSES){id_formulaire}{statut=publie}{0,1}>
-                       [(#URL_ECRIRE{formulaires_analyse}
-                               |parametre_url{id_formulaire, #ID_FORMULAIRE}
-                               |icone_horizontale{<:formidable:reponses_analyse:>,formulaire-analyse-24})
-                       ]
-                       </BOUCLE_publies>
-               </div>
-       </BOUCLE_si>
-<//B_resultats>
-
-#BOITE_FERMER
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/navigation/formulaire_edit.html b/www/plugins/formidable/prive/squelettes/navigation/formulaire_edit.html
deleted file mode 100644 (file)
index de4ee77..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-#BOITE_OUVRIR{'','info'}
-#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
-
-[(#SELF
-       |parametre_url{configurer,formulaire}
-       |parametre_url{avertissement,''}
-       |icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire-editer-24})]
-
-[(#CONFIG{formidable/analyse/auteur}|=={on}|oui)[(#SELF
-       |parametre_url{configurer,auteurs}
-       |parametre_url{avertissement,''}
-       |icone_horizontale{<:formidable:editer_menu_auteurs:>,formulaire-config-auteurs-24})]
-]
-
-[(#SELF
-       |parametre_url{configurer,champs}
-       |parametre_url{avertissement,''}
-       |icone_horizontale{<:formidable:editer_menu_champs:>,formulaire-config-champs-24})]
-
-[(#SELF
-       |parametre_url{configurer,traitements}
-       |parametre_url{avertissement,''}
-       |icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire-config-traitements-24})]
-
-#BOITE_FERMER
-
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/navigation/formulaires.html b/www/plugins/formidable/prive/squelettes/navigation/formulaires.html
deleted file mode 100644 (file)
index 890cfd3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#BOITE_OUVRIR{'',info}
-<:formidable:formulaires_introduction:>
-#BOITE_FERMER
-[(#AUTORISER{editer, formulaire}|oui)
-       #FORMULAIRE_IMPORTER_FORMULAIRE
-]
diff --git a/www/plugins/formidable/prive/squelettes/navigation/formulaires_analyse.html b/www/plugins/formidable/prive/squelettes/navigation/formulaires_analyse.html
deleted file mode 100644 (file)
index eff9d35..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulairesreponse, #ENV{id_formulaire}}}>
-#BOITE_OUVRIR{'','info'}
-#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
-
-[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_liste:>,formulaire-reponses-24})]
-       
-#BOITE_FERMER
-</BOUCLE_autoriser>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/squelettes/navigation/formulaires_reponse.html b/www/plugins/formidable/prive/squelettes/navigation/formulaires_reponse.html
deleted file mode 100644 (file)
index 8c9a6f9..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulairesreponse, #ID_FORMULAIRE}}>
-[(#BOITE_OUVRIR{'','info'})]
-
-       [(#PIPELINE{boite_infos,#ARRAY{data,'',
-               args,#ARRAY{'type','formulaires_reponse','id',#ENV{id_formulaires_reponse}}}})]
-
-       [(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_liste:>,formulaire-reponses-24})]
-
-       <BOUCLE_publies(FORMULAIRES_REPONSES){id_formulaire}{statut=publie}{0,1}>
-       [(#URL_ECRIRE{formulaires_analyse}
-               |parametre_url{id_formulaire,#ID_FORMULAIRE}
-               |icone_horizontale{<:formidable:reponses_analyse:>,formulaire-analyse-24})]
-       </BOUCLE_publies>
-
-#BOITE_FERMER
-
-</BOUCLE_autoriser>
-</BOUCLE_formulaires_reponse>
diff --git a/www/plugins/formidable/prive/squelettes/navigation/formulaires_reponses.html b/www/plugins/formidable/prive/squelettes/navigation/formulaires_reponses.html
deleted file mode 100644 (file)
index 76e213d..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){id_formulaire}{tout}>
-<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulairesreponse, #ID_FORMULAIRE}}>
-#BOITE_OUVRIR{'','info'}
-#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
-
-       <BOUCLE_publies(FORMULAIRES_REPONSES){id_formulaire}{statut=publie}{0,1}>
-       [(#URL_ECRIRE{formulaires_analyse}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_analyse:>,formulaire-analyse-24})]
-       </BOUCLE_publies>
-
-
-#BOITE_FERMER
-</BOUCLE_autoriser>
-</BOUCLE_formulaire>
diff --git a/www/plugins/formidable/prive/style_prive_plugin_formidable.html b/www/plugins/formidable/prive/style_prive_plugin_formidable.html
deleted file mode 100644 (file)
index cc4e9a4..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-[(#REM)<style>]
-#SET{claire,#ENV{couleur_claire,edf3fe}}
-#SET{foncee,#ENV{couleur_foncee,3874b0}}
-
-body .formidable_analyse .progress-bar span {
-       background-color: ##GET{claire};
-         background-image: -webkit-gradient(linear, left top, left bottom, from(##GET{claire}), to(##GET{foncee}));
-         background-image: -webkit-linear-gradient(top, ##GET{claire}, ##GET{foncee});
-         background-image: -moz-linear-gradient(top, ##GET{claire}, ##GET{foncee});
-         background-image: -ms-linear-gradient(top, ##GET{claire}, ##GET{foncee});
-         background-image: -o-linear-gradient(top, ##GET{claire}, ##GET{foncee});
-         background-image: linear-gradient(top, ##GET{claire}, ##GET{foncee}); 
-}
-
-#navigation .navigation_resultats {
-       margin-top:1em;
-       padding-top:1em;
-       border-top:1px solid #eee;
-}
-
-#contenu .box.traitements ul.spip {margin-bottom:0;}
-
-#contenu .liste-objets.formulaires_reponses tr > .date {width:auto;}
-#contenu .liste-objets.formulaires_reponses tr > .auteur {width:auto;}
-
-.formulaire #wysiwyg .contenu_message_retour .label { display: block;}
-.formulaire #wysiwyg .contenu_apres .label { display: inline;}
-.formulaire #wysiwyg .contenu_url_redirect .label { display: inline;}
-.formulaire #wysiwyg .contenu_apres .apres { display: inline;}
-.formulaire #wysiwyg .contenu_url_redirect .url_redirect { display: inline;}
-
-.formulaire_edit .formulaire_editer_formulaire_champs .editer.saisies_disponibles {border-top:1px solid #ccc;padding-top:15px;margin-top: 15px;}
-.formulaire_edit .formulaire_editer_formulaire_champs .submit.revert {float: left;color: #8A1F11;opacity: 0.9;}
-
-.formulaires_reponse #contenu #wysiwyg {margin-top:1em;}
-.formulaires_reponse #contenu #wysiwyg .label {
-       width:140px; float:left; display:block;
-}
-.formulaires_reponse #contenu .fiche_objet .reponses .inner { border:none; }
-.formulaires_reponse #contenu .fiche_objet .reponses .hd {
-    padding-bottom: 3px; margin-bottom:10px; border-bottom:1px solid #ccc;
-}
-
-.formidable_liens .liste-items {margin: 0}
-.formidable_liens .liste-items .item {padding:2px 0;}
-.formidable_liens .liste-items .icone-objet {float:#ENV{left};margin-#ENV{right}:5px;}
\ No newline at end of file
diff --git a/www/plugins/formidable/prive/themes/basic/images/formulaire-16.png b/www/plugins/formidable/prive/themes/basic/images/formulaire-16.png
deleted file mode 100644 (file)
index 4a9e915..0000000
Binary files a/www/plugins/formidable/prive/themes/basic/images/formulaire-16.png and /dev/null differ
diff --git a/www/plugins/formidable/prive/themes/spip/images/formulaire-16.png b/www/plugins/formidable/prive/themes/spip/images/formulaire-16.png
deleted file mode 100644 (file)
index 4a9e915..0000000
Binary files a/www/plugins/formidable/prive/themes/spip/images/formulaire-16.png and /dev/null differ
diff --git a/www/plugins/formidable/prive/themes/spip/images/formulaire-24.png b/www/plugins/formidable/prive/themes/spip/images/formulaire-24.png
deleted file mode 100644 (file)
index 3c6a1b4..0000000
Binary files a/www/plugins/formidable/prive/themes/spip/images/formulaire-24.png and /dev/null differ
diff --git a/www/plugins/formidable/prive/themes/spip/images/formulaires_reponse-24.png b/www/plugins/formidable/prive/themes/spip/images/formulaires_reponse-24.png
deleted file mode 100644 (file)
index 26d2247..0000000
Binary files a/www/plugins/formidable/prive/themes/spip/images/formulaires_reponse-24.png and /dev/null differ
diff --git a/www/plugins/formidable/public/formidable_criteres.php b/www/plugins/formidable/public/formidable_criteres.php
deleted file mode 100644 (file)
index 1754344..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-       // {tri_donnee champ}
-/**
- * Depuis la boucle FORMULAIRES_REPONSES, trier les résulats en fonction d'un champ
- * de la table FORMULAIRES_REPONSES_CHAMPS
- * {tri_selon_donnee}
- *
- * @global array $exceptions_des_tables
- * @param string $idb
- * @param array $boucles
- * @param <type> $crit
- *
- * Auteurs :
- * Antoine Pitrou
- * Cedric Morin
- * Renato
- * @ 2005,2006 - Distribue sous licence GNU/GPL
- */
-
-function critere_tri_selon_donnee_dist($idb, &$boucles, $crit) {
-       // Garder cette fontion pour compatibilité
-       critere_tri_selon_reponse_dist($idb, $boucles, $crit) ;
-}
-function critere_tri_selon_reponse_dist($idb, &$boucles, $crit) {
-
-       $boucle = &$boucles[$idb];
-       $t = $boucle->id_table;
-
-       if ($t=='formulaires_reponses') {
-               $not = $crit->not;
-               $_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
-               $k = count($boucle->join)+1;
-               $boucle->join[$k]= array($t,'id_formulaires_reponse');
-               $boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
-               $op = array("'='", "'L$k.nom'", "sql_quote(".$_quoi.")");
-               $boucle->where[]= array("'?'","!in_array($_quoi,array('date','id_formulaires_reponse'))",$op,"''");
-               $boucle->order[]= "(in_array($_quoi,array('date','id_formulaires_reponse'))?'$t.'.$_quoi:(strncmp($_quoi,'date_',5)==0?'STR_TO_DATE(L$k.valeur,\'%d/%m/%Y\')':'L$k.valeur'))".($not?".' DESC'":"");
-       }
-}
-
-// {recherche_donnee} ou {recherche_donnee susan}
-// Intégralement pompé et adapté de Forms&Tables
-function critere_recherche_reponse_dist($idb, &$boucles, $crit) {
-       global $table_des_tables;
-       $boucle = &$boucles[$idb];
-       $t = $boucle->id_table;
-       if ($t=='formulaires_reponses') {
-               if (isset($crit->param[0])) {
-                       $_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
-               } else {
-                       $_quoi = '@$Pile[0]["recherche"]';
-               }
-
-               $k = count($boucle->join)+1;
-               $boucle->join[$k]= array($t,'id_formulaires_reponse');
-               $boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
-               $op = array("'LIKE'","'L$k.valeur'","sql_quote(strpos($_quoi,'%')===false?'%'.".$_quoi.".'%':$_quoi)");
-               $boucle->where[]= array("'?'",$_quoi,$op,"''");
-       }
-}
diff --git a/www/plugins/formidable/puce_statut/formulaires_reponse.php b/www/plugins/formidable/puce_statut/formulaires_reponse.php
deleted file mode 100644 (file)
index 48fabd5..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/**
- * Gestion des puces d'action rapide de formulaires
- *
- * @package SPIP\Formidable\Puce_statut
-**/
-
-/**
- * Gestion des puces statuts des formulaires
- *
- * Retourne le contenu d'une puce avec changement de statut possible
- * si on en a l'autorisation, sinon simplement l'image de la puce
- *
- * @param int $id
- *     Identifiant de l'objet
- * @param string $statut
- *     Statut actuel de l'objet
- * @param int $id_parent
- *     Identifiant du parent, un formulaire
- * @param string $type
- *     Type d'objet
- * @param bool $ajax
- *     Indique s'il ne faut renvoyer que le coeur du menu car on est
- *     dans une requete ajax suite à un post de changement rapide
- * @param bool $menu_rapide
- *     Indique si l'on peut changer le statut, ou si on l'affiche simplement
- * @return string
- *     Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent)
-**/
-function puce_statut_formulaires_reponse_dist($id, $statut, $id_parent, $type = 'article', $ajax = false, $menu_rapide = _ACTIVER_PUCE_RAPIDE) {
-
-       $src = statut_image($type, $statut);
-       if (!$src) {
-               return $src;
-       }
-
-       if (!$id
-               or !_SPIP_AJAX
-               or !$menu_rapide
-               or !autoriser('instituer', $type, $id)) {
-               $ajax_node ='';
-       } else {
-               $ajax_node = " class='imgstatut$type$id'";
-       }
-
-       $inser_puce = http_img_pack($src, statut_titre($type, $statut), $ajax_node);
-
-       if (!$ajax_node) {
-               return $inser_puce;
-       }
-
-       $table = table_objet_sql($type);
-       $desc = lister_tables_objets_sql($table);
-       if (!isset($desc['statut_textes_instituer'])) {
-               return $inser_puce;
-       }
-
-       $coord = array_flip(array_keys($desc['statut_textes_instituer']));
-       if (!isset($coord[$statut])) {
-               return $inser_puce;
-       }
-
-       $unit = 8/*widh de img*/+4/*padding*/;
-       $margin = 4; /* marge a gauche + droite */
-       $zero = 1 /*border*/ + $margin/2 + 2 /*padding*/;
-       $clip = $zero+ ($unit*$coord[$statut]);
-       if ($ajax) {
-               $width = $unit*count($desc['statut_textes_instituer'])+$margin;
-               $out = "<span class='puce_objet_fixe $type'>"
-               . $inser_puce
-               . '</span>'
-               . "<span class='puce_objet_popup $type statutdecal$type$id' style='width:{$width}px;margin-left:-{$clip}px;'>";
-               $i=0;
-               foreach ($desc['statut_textes_instituer'] as $s => $t) {
-                       $out .= afficher_script_statut($id, $type, -$zero-$i++*$unit, statut_image($type, $s), $s, _T($t));
-               }
-               $out .= '</span>';
-               return $out;
-       } else {
-               $nom = 'puce_statut_';
-               $action = generer_url_ecrire('puce_statut_formulaires', '', true);
-               $action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut(this, '$nom', '$type', '$id', '$action'); }";
-               $over = " onmouseover=\"$action\"";
-
-               $lang_dir = lang_dir(isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : '');
-               return  "<span class='puce_objet $type' id='$nom$type$id' dir='$lang_dir'$over>"
-               . $inser_puce
-               . '</span>';
-       }
-}
diff --git a/www/plugins/formidable/saisies-analyses/_base.html b/www/plugins/formidable/saisies-analyses/_base.html
deleted file mode 100644 (file)
index 7c9a8ab..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<div class="cadre cadre-liste analyser analyser_#ENV{nom} saisie_#ENV{type_saisie}">
-<table class="liste" cellspacing="0" cellpadding="2" border="0" style="width:100%;" data-nombre="#ENV{reponses_total}">
-[<caption class="titrem"><strong class="caption">(#ENV{label_case,#ENV{label,#ENV{nom}}})</strong></caption>]
-       <tbody>
-       [(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|oui)
-               #INCLURE{fond=saisies-analyses/#ENV{type_saisie},env}
-       ]
-       [(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|non)
-               #SET{plein,#ENV{valeurs}|array_filter}
-               #SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
-               [(#GET{plein}|count|>{0}|oui)
-                       #SET{moyenne,#VAL{str_word_count}|array_map{#GET{plein}}|array_sum|div{#GET{plein}|count}}
-               ]
-               [(#GET{plein}|count|>{0}|non)
-                       #SET{moyenne,0}
-               ]
-               <tr class="tr_liste row_odd vide">
-                       <td class="choix"><:formidable:analyse_sans_reponse:></td>
-                       <td class="stat"[ title="(#GET{vide}|count|titre_nb_reponses|attribut_html)"]>[(#GET{vide}|count)]</td>
-               </tr>
-               <tr class="tr_liste row_even plein">
-                       <td class="choix"><:formidable:analyse_avec_reponse:></td>
-                       <td class="stat"[ title="(#GET{plein}|count|titre_nb_reponses|attribut_html)"]>[(#GET{plein}|count)]</td>
-               </tr>
-               <tr class="tr_liste row_odd moyenne">
-                       <td class="choix"><:formidable:analyse_longueur_moyenne:></td>
-                       <td class="stat ignore">#GET{moyenne}</td>
-               </tr>
-       ]
-       </tbody>
-</table>
-</div>
diff --git a/www/plugins/formidable/saisies-analyses/auteurs.html b/www/plugins/formidable/saisies-analyses/auteurs.html
deleted file mode 100644 (file)
index 11bf59d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#SET{auteurs,#ARRAY}
-<BOUCLE_reponses(DATA){source table,#ENV{valeurs}}>
-       [(#VALEUR|in_array{#GET{auteurs}|array_keys}|oui)
-               #SET{auteur_valeur,#GET{auteurs}|table_valeur{auteur-#VALEUR}|plus{1}}
-               #SET{auteur,#ARRAY{#VALEUR,#GET{auteur_valeur}|plus{1}}}
-               #SET{auteurs,#GET{auteurs}|array_merge{#GET{auteur}}}
-       ]
-       [(#VALEUR|in_array{#GET{auteurs}|array_keys}|non)
-               #SET{auteur,#ARRAY{auteur-#VALEUR,1}}
-               #SET{auteurs,#GET{auteurs}|array_merge{#GET{auteur}}}
-       ]
-</BOUCLE_reponses>
-#SET{total, #TOTAL_BOUCLE}
-</B_reponses>
-
-<BOUCLE_auteurs(DATA){source table,#GET{auteurs}}>
-#SET{id_auteur, #CLE|replace{'auteur-', ''}}
-<tr class="tr_liste">
-       <td class="choix"><a href="#INFO_URL{auteur, #GET{id_auteur}}">#INFO_TITRE{auteur, #GET{id_auteur}}</a></td>
-       <td class="stat"[ title="(#VALEUR|titre_nb_reponses|attribut_html)"]>[(#VALEUR|div{#GET{total}}|mult{100})]</td>
-</tr>
-</BOUCLE_auteurs>
\ No newline at end of file
diff --git a/www/plugins/formidable/saisies-analyses/case.html b/www/plugins/formidable/saisies-analyses/case.html
deleted file mode 100644 (file)
index 51a9faf..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#SET{oui,0}
-#SET{non,0}
-<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
-       [(#VALEUR|oui)
-               #SET{oui,#GET{oui}|plus{1}}
-       ]
-       [(#VALEUR|non)
-               #SET{non,#GET{non}|plus{1}}
-       ]
-</BOUCLE_reponses>
-
-<tr class="tr_liste">
-       <td class="choix"><:item_oui:></td>
-       <td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
-</tr>
-<tr class="tr_liste">
-       <td class="choix"><:item_non:></td>
-       <td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
-</tr>
-
-#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
-[(#GET{diff}|>{0}|oui)
-<tr class="tr_liste">
-       <td class="choix"><:saisies:vue_sans_reponse:></td>
-       <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
-</tr>
-]
diff --git a/www/plugins/formidable/saisies-analyses/checkbox.html b/www/plugins/formidable/saisies-analyses/checkbox.html
deleted file mode 100644 (file)
index ad682ae..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#SET{stats,#ARRAY}
-<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
-       <BOUCLE_choix(POUR){tableau #VALEUR}>
-       #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
-       </BOUCLE_choix>
-</BOUCLE_reponses>
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV*{datas}}
-#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
-
-<BOUCLE_datas(POUR){tableau #GET{datas}}>
-[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
-<tr class="tr_liste">
-       <td class="choix">#VALEUR</td>
-       <td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
-</tr>
-</BOUCLE_datas>
-
-#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
-[(#GET{diff}|>{0}|oui)
-<tr class="tr_liste">
-       <td class="choix"><:saisies:vue_sans_reponse:></td>
-       <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
-</tr>
-]
diff --git a/www/plugins/formidable/saisies-analyses/destinataires.html b/www/plugins/formidable/saisies-analyses/destinataires.html
deleted file mode 100644 (file)
index 9692d03..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#SET{stats,#ARRAY}
-<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
-       <BOUCLE_choix(POUR){tableau #VALEUR}>
-       #SET_MERGE{stats, #ARRAY{auteur-#VALEUR, #GET{stats}|table_valeur{auteur-#VALEUR}|sinon{0}|plus{1}}}
-       </BOUCLE_choix>
-</BOUCLE_reponses>
-
-<BOUCLE_stats(POUR){tableau #GET{stats}}>
-#SET{id_auteur, #CLE|replace{'auteur-', ''}}
-<tr class="tr_liste">
-       <td class="choix"><a href="#INFO_URL{auteur, #GET{id_auteur}}">#INFO_TITRE{auteur, #GET{id_auteur}}</a></td>
-       <td class="stat"[ title="(#VALEUR|titre_nb_reponses|attribut_html)"]>#VALEUR</td>
-</tr>
-</BOUCLE_stats>
diff --git a/www/plugins/formidable/saisies-analyses/explication.html b/www/plugins/formidable/saisies-analyses/explication.html
deleted file mode 100644 (file)
index b97cd65..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr class="tr_liste">
-       <td class='choix' colspan='2'>[<div class='explication'>(#ENV{texte}|propre)</div>]</td>
-</tr>
-
diff --git a/www/plugins/formidable/saisies-analyses/fichiers.html b/www/plugins/formidable/saisies-analyses/fichiers.html
deleted file mode 100644 (file)
index 811f02d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr class="tr_liste row_odd">
-       <td colspan="2"><:formidable:pas_analyse_fichiers:></td>
-</tr>
diff --git a/www/plugins/formidable/saisies-analyses/fieldset.html b/www/plugins/formidable/saisies-analyses/fieldset.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/www/plugins/formidable/saisies-analyses/oui_non.html b/www/plugins/formidable/saisies-analyses/oui_non.html
deleted file mode 100644 (file)
index 51a9faf..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#SET{oui,0}
-#SET{non,0}
-<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
-       [(#VALEUR|oui)
-               #SET{oui,#GET{oui}|plus{1}}
-       ]
-       [(#VALEUR|non)
-               #SET{non,#GET{non}|plus{1}}
-       ]
-</BOUCLE_reponses>
-
-<tr class="tr_liste">
-       <td class="choix"><:item_oui:></td>
-       <td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
-</tr>
-<tr class="tr_liste">
-       <td class="choix"><:item_non:></td>
-       <td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
-</tr>
-
-#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
-[(#GET{diff}|>{0}|oui)
-<tr class="tr_liste">
-       <td class="choix"><:saisies:vue_sans_reponse:></td>
-       <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
-</tr>
-]
diff --git a/www/plugins/formidable/saisies-analyses/radio.html b/www/plugins/formidable/saisies-analyses/radio.html
deleted file mode 100644 (file)
index 88627d0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#SET{stats,#ARRAY}
-<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
-       [(#VALEUR|oui)
-               #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
-       ]
-</BOUCLE_reponses>
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV*{datas}}
-#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
-
-<BOUCLE_datas(POUR){tableau #GET{datas}}>
-[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
-<tr class="tr_liste">
-       <td class="choix">#VALEUR</td>
-       <td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
-</tr>
-</BOUCLE_datas>
-
-#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
-[(#GET{diff}|>{0}|oui)
-<tr class="tr_liste">
-       <td class="choix"><:saisies:vue_sans_reponse:></td>
-       <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
-</tr>
-]
diff --git a/www/plugins/formidable/saisies-analyses/selecteur_article.html b/www/plugins/formidable/saisies-analyses/selecteur_article.html
deleted file mode 100644 (file)
index 35f08b4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-[(#REM) Attention, saisie multiple non testee ]\r
-\r
-#SET{plein,#ENV{valeurs}|array_filter}\r
-#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}\r
-\r
-<tr class="tr_liste row_odd vide">\r
-   <td class="choix"><:formidable:analyse_sans_reponse:></td>\r
-   <td class="stat">[(#GET{vide}|count)]</td>\r
-</tr>\r
-<tr class="tr_liste row_even plein">\r
-   <td class="choix"><:formidable:analyse_avec_reponse:></td>\r
-   <td class="stat">[(#GET{plein}|count)]</td>\r
-</tr>\r
diff --git a/www/plugins/formidable/saisies-analyses/selecteur_rubrique.html b/www/plugins/formidable/saisies-analyses/selecteur_rubrique.html
deleted file mode 100644 (file)
index 35f08b4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-[(#REM) Attention, saisie multiple non testee ]\r
-\r
-#SET{plein,#ENV{valeurs}|array_filter}\r
-#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}\r
-\r
-<tr class="tr_liste row_odd vide">\r
-   <td class="choix"><:formidable:analyse_sans_reponse:></td>\r
-   <td class="stat">[(#GET{vide}|count)]</td>\r
-</tr>\r
-<tr class="tr_liste row_even plein">\r
-   <td class="choix"><:formidable:analyse_avec_reponse:></td>\r
-   <td class="stat">[(#GET{plein}|count)]</td>\r
-</tr>\r
diff --git a/www/plugins/formidable/saisies-analyses/selecteur_rubrique_article.html b/www/plugins/formidable/saisies-analyses/selecteur_rubrique_article.html
deleted file mode 100644 (file)
index a8ef6ae..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-[(#REM) Peut etre ameliore en comptant par exemple le nombre d'article / rubriques \r
-Attention, saisie multiple non testee ]\r
-\r
-#SET{plein,#ENV{valeurs}|array_filter}\r
-#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}\r
-\r
-<tr class="tr_liste row_odd vide">\r
-   <td class="choix"><:formidable:analyse_sans_reponse:></td>\r
-   <td class="stat">[(#GET{vide}|count)]</td>\r
-</tr>\r
-<tr class="tr_liste row_even plein">\r
-   <td class="choix"><:formidable:analyse_avec_reponse:></td>\r
-   <td class="stat">[(#GET{plein}|count)]</td>\r
-</tr>\r
diff --git a/www/plugins/formidable/saisies-analyses/selection.html b/www/plugins/formidable/saisies-analyses/selection.html
deleted file mode 100644 (file)
index 61d20d8..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#SET{stats,#ARRAY}
-<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
-       [(#VALEUR|oui)
-               #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
-       ]
-</BOUCLE_reponses>
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV{datas}}
-#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_aplatir_chaine|saisies_chaine2tableau), #GET{datas}}}
-
-<BOUCLE_datas(POUR){tableau #GET{datas}}>
-<tr class="tr_liste">
-       <td class="choix">#VALEUR</td>
-       <td class="stat"[ title="(#GET{stats}|table_valeur{choix-#CLE}|sinon{0}|titre_nb_reponses|attribut_html)"]>[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
-</tr>
-</BOUCLE_datas>
-
-#SET{diff, #ENV{valeurs}|count|moins{#GET{stats}|array_sum}}
-[(#GET{diff}|>{0}|oui)
-<tr class="tr_liste">
-       <td class="choix"><:saisies:vue_sans_reponse:></td>
-       <td class="stat"[ title="(#GET{stats}|table_valeur{choix-#CLE}|sinon{0}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
-</tr>
-]
diff --git a/www/plugins/formidable/saisies-analyses/selection_multiple.html b/www/plugins/formidable/saisies-analyses/selection_multiple.html
deleted file mode 100644 (file)
index 0f1212a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#SET{stats,#ARRAY}
-<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
-       <BOUCLE_choix(POUR){tableau #VALEUR}>
-       #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
-       </BOUCLE_choix>
-</BOUCLE_reponses>
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV{datas}}
-#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
-
-<BOUCLE_datas(POUR){tableau #GET{datas}}>
-<tr class="tr_liste">
-       <td class="choix">#VALEUR</td>
-       <td class="stat">[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
-</tr>
-</BOUCLE_datas>
-
-#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
-[(#GET{diff}|>{0}|oui)
-<tr class="tr_liste">
-       <td class="choix"><:saisies:vue_sans_reponse:></td>
-       <td class="stat">#GET{diff}</td>
-</tr>
-]
diff --git a/www/plugins/formidable/saisies-vues/formulaire_formidable.html b/www/plugins/formidable/saisies-vues/formulaire_formidable.html
deleted file mode 100644 (file)
index a9692f8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<BOUCLE_formulaire(FORMULAIRES){identifiant=#ENV{valeur}}>
-<p>[(#TITRE|typo)] (#IDENTIFIANT)</p>
-</BOUCLE_formulaire>
-<p><:saisies:vue_sans_reponse:></p>
-<//B_formulaire>
\ No newline at end of file
diff --git a/www/plugins/formidable/saisies-vues/formulaire_formidable_multiple.html b/www/plugins/formidable/saisies-vues/formulaire_formidable_multiple.html
deleted file mode 100644 (file)
index 9b75a57..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<B_formulaire>
-<ul>
-       <BOUCLE_formulaire(FORMULAIRES){identifiant IN #ENV**{valeur}}>
-       <li class="choix">[(#TITRE|typo)] (#IDENTIFIANT)</li>
-       </BOUCLE_formulaire>
-</ul>
-</B_formulaire>
-<p><:saisies:vue_sans_reponse:></p>
-<//B_formulaire>
\ No newline at end of file
diff --git a/www/plugins/formidable/saisies/champ.html b/www/plugins/formidable/saisies/champ.html
deleted file mode 100644 (file)
index d2ad8d8..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-<select name="#ENV{nom}" id="champ_#ENV{nom}">
-       <option value=""><:formidable:traitements_champ_aucun:></option>
-       [(#ENV{forcer_type}|non)
-               #SET{tab,#ENV{formulaire}}
-       ]
-       [(#ENV{forcer_type}|oui)
-               [(#SET{tab,[(#ENV{formulaire}|saisies_lister_par_nom{0})]})]
-       ]
-       #SET{padding,0}
-       <BOUCLE_parcours(POUR){tableau #GET{tab}}>
-               #SET{saisie,#VALEUR}
-               <BOUCLE_test_enfants(CONDITION){si #GET{saisie}|table_valeur{saisies}|is_array}>
-               <optgroup style="padding-left:#GET{padding}px" label="[(#GET{saisie}|table_valeur{options}|table_valeur{label}|sinon{#GET{saisie}|table_valeur{options}|table_valeur{nom}})]">
-                               #SET{tab,#GET{saisie}|table_valeur{saisies}}
-                               #SET{padding,#GET{padding}|plus{20}}
-                               <BOUCLE_parcours_recursif(BOUCLE_parcours)/>
-                               #SET{padding,#GET{padding}|moins{20}}
-               </optgroup>
-               </BOUCLE_test_enfants>
-                       <BOUCLE_test_type(CONDITION){si #ENV{forcer_type}|non|ou{#GET{saisie}|table_valeur{saisie}|in_array{#ENV{forcer_type}}}}>
-                       <option value="[(#GET{saisie}|table_valeur{options}|table_valeur{nom})]" style="padding-left:#GET{padding}px" [(#ENV{valeur,#ENV{saisie_a_positionner}}|=={#GET{saisie}|table_valeur{options}|table_valeur{nom}}|oui)selected="selected"]>
-                               [(#GET{saisie}|table_valeur{options}|table_valeur{label}|sinon{#GET{saisie}|table_valeur{options}|table_valeur{nom}})]
-                       </option>
-                       </BOUCLE_test_type>
-               <//B_test_enfants>
-       </BOUCLE_parcours>
-</select>
diff --git a/www/plugins/formidable/saisies/formulaire_formidable.html b/www/plugins/formidable/saisies/formulaire_formidable.html
deleted file mode 100644 (file)
index e8d8bb4..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-[(#REM) 
-  Saisie permettant de sélectionner un formulaire par son identifiant
-  
-  ### /!\ boucle POUR (spip Bonux) ###
-       
-  Parametres :
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - class : classe(s) css ajoutes au select
-  
-  Exemple d'appel :
-       [(#SAISIE{formulaire_formidable,nom,
-               label=<:plugin:label:>,
-       })] 
-]
-
-<select name="#ENV{nom}" id="champ_#ENV{nom}"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"]>
-[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_selection(FORMULAIRES){par titre}>
-       <option value="#IDENTIFIANT" [(#IDENTIFIANT|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>[(#TITRE|typo)] (#IDENTIFIANT)</option>
-</BOUCLE_selection>
-</select>
diff --git a/www/plugins/formidable/saisies/formulaire_formidable_multiple.html b/www/plugins/formidable/saisies/formulaire_formidable_multiple.html
deleted file mode 100644 (file)
index b8ef7aa..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-[(#REM) 
-  Saisie permettant de sélectionner plusieurs formulaires par leur identifiant
-  
-  ### /!\ boucle POUR (spip Bonux) ###
-       
-  Parametres :
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - class : classe(s) css ajoutes au select
-  
-  Exemple d'appel :
-       [(#SAISIE{formulaire_formidable_multiple,nom,
-               label=<:plugin:label:>,
-       })] 
-]
-
-[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
-#SET{defaut, #ENV{defaut}}
-#SET{defaut, #GET{defaut}|is_string|?{(#GET{defaut}|saisies_chaine2tableau), (#GET{defaut}|sinon{#ARRAY})}}
-
-<select name="#ENV{nom}[]" id="champ_#ENV{nom}" multiple="multiple"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"]>
-[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_selection(FORMULAIRES){par titre}>
-       <option value="#IDENTIFIANT" [(#IDENTIFIANT|in_array{#ENV{valeur,#GET{defaut}}}|oui) selected="selected"]>[(#TITRE|typo)] (#IDENTIFIANT)</option>
-</BOUCLE_selection>
-</select>
diff --git a/www/plugins/formidable/svn.revision b/www/plugins/formidable/svn.revision
deleted file mode 100644 (file)
index cf2e3a1..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk
-Revision: 108094
-Dernier commit: 2017-12-18 05:37:49 +0100 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk</origine>
-<revision>108094</revision>
-<commit>2017-12-18 05:37:49 +0100 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/formidable/todo.txt b/www/plugins/formidable/todo.txt
deleted file mode 100644 (file)
index 4092e6d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-À faire :
----------
-+ Ajouter des liens "réponse précédente/suivante" dans la visualisation d'une réponse
-+ Afficher une boite listant les formulaires disponibles dans l'édition d'un article
-+ Utiliser le plugin CVT multi-pages de Cédric
-+ Afficher des pages suivant des conditions (scénarios)
-+ Pouvoir attacher des fichiers (et donc les envoyer par mail et les enregistrer en base comme document)
-+ Déplacer les saisies en drag-n-drop
-+ Ajouter une saisie directement au bon endroit en drag-n-drop
-+ Améliorer le texte brut généré à partir du HTML
-
-Idées :
--------
-+ Permettre des messages différents lors de la réédition d'un formulaire (avant et après modification)
-+ Permettre de prévisualiser avant soumission le formulaire
-+ Premettre d'afficher un formulaire en fonction du statut du visiteur
-+ Avoir lors de l'édition des champs du formulaire un bouton «Enregistrer et continuer d'éditer»
diff --git a/www/plugins/formidable/traiter/email.php b/www/plugins/formidable/traiter/email.php
deleted file mode 100644 (file)
index f1223c2..0000000
+++ /dev/null
@@ -1,550 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-include_spip('inc/utils');
-include_spip('inc/formidable_fichiers');
-
-function traiter_email_dist($args, $retours) {
-       if (!isset($retours['fichiers'])) {
-               $retours['fichiers'] = array();
-               $ajouter_fichier = true;
-       } else {
-               $ajouter_fichier = false;
-       }
-       $timestamp = time();
-       $retours['timestamp'] = $timestamp;
-       $formulaire = $args['formulaire'];
-       $options = $args['options'];
-       $saisies = unserialize($formulaire['saisies']);
-       $traitements = unserialize($formulaire['traitements']);
-       $champs = saisies_lister_champs($saisies);
-       $destinataires = array();
-       $taille_fichiers = 0; //taille des fichiers en email
-       $fichiers_facteur = array(); // tableau qui stockera les fichiers à envoyer avec facteur
-       if (isset($options['exclure_champs_email']) && $options['exclure_champs_email']) {
-               $champs_a_exclure = explode(",", $options['exclure_champs_email']);
-               $champs = array_diff($champs, $champs_a_exclure);
-               foreach ($champs_a_exclure as $champ_a_exclure) {
-                       $saisies = saisies_supprimer($saisies,$champ_a_exclure);
-               }
-       }
-
-       // On récupère les destinataires
-       if ($options['champ_destinataires']) {
-               $destinataires = _request($options['champ_destinataires']);
-               if (!is_array($destinataires)) {
-                       if (intval($destinataires)) {
-                               $destinataires = array($destinataires);
-                       } else {
-                               $destinataires = array();
-                       }
-               }
-               if (count($destinataires)) {
-                       // On récupère les mails des destinataires
-                       $destinataires = array_map('intval', $destinataires);
-                       $destinataires = sql_allfetsel(
-                               'email',
-                               'spip_auteurs',
-                               sql_in('id_auteur', $destinataires)
-                       );
-                       $destinataires = array_map('reset', $destinataires);
-               }
-       }
-
-       if ($options['champ_courriel_destinataire_form']) {
-               $courriel_champ_form = _request($options['champ_courriel_destinataire_form']);
-               $destinataires[] = $courriel_champ_form;
-       }
-
-
-       // On ajoute les destinataires en plus
-       if ($options['destinataires_plus']) {
-               $destinataires_plus = explode(',', $options['destinataires_plus']);
-               $destinataires_plus = array_map('trim', $destinataires_plus);
-               $destinataires = array_merge($destinataires, $destinataires_plus);
-               $destinataires = array_unique($destinataires);
-       }
-
-       // On ajoute les destinataires en fonction des choix de saisie dans le formulaire
-       // @selection_1@/choix1 : mail@domain.tld
-       // @selection_1@/choix2 : autre@domain.tld, lapin@domain.tld
-       if (!empty($options['destinataires_selon_champ'])) {
-               if ($destinataires_selon_champ = formidable_traiter_email_destinataire_selon_champ($options['destinataires_selon_champ'])) {
-                       $destinataires = array_merge($destinataires, $destinataires_selon_champ);
-                       $destinataires = array_unique($destinataires);
-               }
-       }
-
-       // On récupère le courriel de l'envoyeur s'il existe
-       if ($options['champ_courriel']) {
-               $courriel_envoyeur = _request($options['champ_courriel']);
-       }
-       if (!isset($courriel_envoyeur)) {
-               $courriel_envoyeur = '';
-       }
-
-       // Si on a bien des destinataires, on peut continuer
-       if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])) {
-               include_spip('inc/filtres');
-               include_spip('inc/texte');
-
-               $nom_site_spip = supprimer_tags(typo($GLOBALS['meta']['nom_site']));
-
-               // On parcourt les champs pour générer le tableau des valeurs
-               $valeurs = array();
-               $saisies_fichiers = saisies_lister_avec_type($saisies, 'fichiers');
-               // On utilise pas formulaires_formidable_fichiers,
-               // car celui-ci retourne les saisies fichiers du formulaire dans la base… or, on sait-jamais,
-               // il peut y avoir eu une modification entre le moment où l'utilisateur a vu le formulaire et maintenant
-               foreach ($champs as $champ) {
-                       if (array_key_exists($champ, $saisies_fichiers)) {// si on a affaire à une saisie de type fichiers, on traite à part
-                               $valeurs[$champ] = traiter_email_fichiers($saisies_fichiers[$champ], $champ, $formulaire['id_formulaire'], $retours, $timestamp);
-                               if ($ajouter_fichier) {
-                                       $retours['fichiers'][$champ] = $valeurs[$champ];
-                               }
-                               $taille_fichiers += formidable_calculer_taille_fichiers_saisie($valeurs[$champ]);
-                               $fichiers_facteur = array_merge(
-                                       $fichiers_facteur,
-                                       vue_fichier_to_tableau_facteur($valeurs[$champ])
-                               );
-                       } else {
-                               $valeurs[$champ] = _request($champ);
-                       }
-               }
-
-               // On récupère le nom de l'envoyeur
-               if ($options['champ_nom']) {
-                       $a_remplacer = array();
-                       if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)) {
-                               $a_remplacer = $a_remplacer[0];
-                               foreach ($a_remplacer as $cle => $val) {
-                                       $a_remplacer[$cle] = trim($val, '@');
-                               }
-                               $a_remplacer = array_flip($a_remplacer);
-                               $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
-                               $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
-                       }
-                       $nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
-               }
-               if (!isset($nom_envoyeur) or !$nom_envoyeur) {
-                       $nom_envoyeur = $nom_site_spip;
-               }
-
-               // On récupère le sujet s'il existe sinon on le construit
-               if ($options['champ_sujet']) {
-                       $a_remplacer = array();
-                       if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)) {
-                               $a_remplacer = $a_remplacer[0];
-                               foreach ($a_remplacer as $cle => $val) {
-                                       $a_remplacer[$cle] = trim($val, '@');
-                               }
-                               $a_remplacer = array_flip($a_remplacer);
-                               $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
-                               $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
-                       }
-                       $sujet = trim(_L($options['champ_sujet'], $a_remplacer));
-               }
-               if (!isset($sujet) or !$sujet) {
-                       $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur));
-               }
-               $sujet = filtrer_entites($sujet);
-
-               // Mais quel va donc être le fond ?
-               if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html')) {
-                       $notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email';
-               } else {
-                       $notification = 'notifications/formulaire_email';
-               }
-               // Est-ce qu'on est assez léger pour joindre les pj
-               $joindre_pj = false;
-               if ($taille_fichiers < 1024 * 1024 * _FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL
-                       and
-                       $traitements['email']['pj'] == 'on'
-               ) {
-                       $joindre_pj = true;
-                       foreach (array_keys($saisies_fichiers) as $nom) {
-                               $saisies = saisies_supprimer($saisies,$nom);    
-                       }
-               }
-               // On génère le mail avec le fond
-               $html = recuperer_fond(
-                       $notification,
-                       array(
-                               'id_formulaire' => $args['id_formulaire'],
-                               'id_formulaires_reponse' => isset($retours['id_formulaires_reponse']) ? $retours['id_formulaires_reponse'] : '',
-                               'titre' => _T_ou_typo($formulaire['titre']),
-                               'traitements' => $traitements,
-                               'saisies' => $saisies,
-                               'valeurs' => $valeurs,
-                               'masquer_liens' => $options['masquer_liens'],
-                               'ip' => $options['activer_ip']?$GLOBALS['ip']:''
-                       )
-               );
-
-               // On génère le texte brut
-               include_spip('facteur_fonctions');
-               $texte = facteur_mail_html2text($html);
-
-               // On utilise la forme avancée de Facteur
-               $corps = array(
-                       'html' => $html,
-                       'texte' => $texte,
-                       'nom_envoyeur' => filtrer_entites($nom_envoyeur),
-               );
-               // Joindre les pj si léger
-               if ($joindre_pj) {
-                       $corps['pieces_jointes'] = $fichiers_facteur;
-               }
-       
-               // Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans
-               // Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les
-               // SMTP un peu restrictifs.
-               $courriel_from = '';
-               if ($courriel_envoyeur && $options['activer_vrai_envoyeur']) {
-                       $courriel_from = $courriel_envoyeur;
-               } elseif ($courriel_envoyeur) {
-                       $corps['repondre_a'] = $courriel_envoyeur;
-               }
-
-               // On envoie enfin le message
-               $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
-
-               // On envoie aux destinataires
-               if ($destinataires) {
-                       $ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, 'X-Originating-IP: '.$GLOBALS['ip']);
-               }
-
-               // Si c'est bon, on envoie l'accusé de réception
-               if ($ok and $courriel_envoyeur and $options['activer_accuse']) {
-                       // On récupère le sujet s'il existe sinon on le construit
-                       if ($options['sujet_accuse']) {
-                               $a_remplacer = array();
-                               if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)) {
-                                       $a_remplacer = $a_remplacer[0];
-                                       foreach ($a_remplacer as $cle => $val) {
-                                               $a_remplacer[$cle] = trim($val, '@');
-                                       }
-                                       $a_remplacer = array_flip($a_remplacer);
-                                       $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
-                                       $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
-                               }
-                               $sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
-                       }
-                       if (!isset($sujet_accuse) or !$sujet_accuse) {
-                               $sujet_accuse = _T('formidable:traiter_email_sujet_accuse');
-                       }
-                       $sujet_accuse = filtrer_entites($sujet_accuse);
-
-                       // Si un nom d'expéditeur est précisé pour l'AR, on l'utilise,
-                       // sinon on utilise le nomde l'envoyeur du courriel principal
-                       $nom_envoyeur_accuse = trim($options['nom_envoyeur_accuse']);
-                       if (!$nom_envoyeur_accuse) {
-                               $nom_envoyeur_accuse = $nom_envoyeur;
-                       }
-
-                       //A fortiori, si un courriel d'expéditeur est précisé pour l'AR, on l'utilise
-                       if ($options['courriel_envoyeur_accuse']) {
-                               $courriel_envoyeur_accuse = $options['courriel_envoyeur_accuse'];
-                       } else {
-                               $courriel_envoyeur_accuse = $courriel_envoyeur;
-                       }
-
-                       //Et on teste si on doit mettre cela en from ou en reply-to
-                       if ($options['activer_vrai_envoyeur'] and $courriel_envoyeur_accuse) {
-                               $courriel_from_accuse = $courriel_envoyeur_accuse;
-                       } elseif ($courriel_envoyeur_accuse) {
-                               $corps['repondre_a'] = $courriel_envoyeur_accuse;
-                               $courriel_from_accuse = '';
-                       }
-
-                       // Mais quel va donc être le fond ?
-                       if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html')) {
-                               $accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse';
-                       } else {
-                               $accuse = 'notifications/formulaire_accuse';
-                       }
-
-                       // On génère l'accusé de réception
-                       if (_FORMIDABLE_LIENS_FICHIERS_ACCUSE_RECEPTION == false) {
-                               $valeurs = vues_saisies_supprimer_action_recuperer_fichier_par_email($saisies, $valeurs);
-                       }
-                       $html_accuse = recuperer_fond(
-                               $accuse,
-                               array(
-                                       'id_formulaire' => $formulaire['id_formulaire'],
-                                       'titre' => _T_ou_typo($formulaire['titre']),
-                                       'message_retour' => $formulaire['message_retour'],
-                                       'traitements' => $traitements,
-                                       'saisies' => $saisies,
-                                       'valeurs' => $valeurs
-                               )
-                       );
-
-                       // On génère le texte brut
-                       $texte = facteur_mail_html2text($html_accuse);
-
-                       $corps = array(
-                               'html' => $html_accuse,
-                               'texte' => $texte,
-                               'nom_envoyeur' => filtrer_entites($nom_envoyeur_accuse),
-                       );
-
-                       // Joindre les pj si léger et nécessaire
-                       if ($joindre_pj and  _FORMIDABLE_LIENS_FICHIERS_ACCUSE_RECEPTION == false) {
-                               $corps['pieces_jointes'] = $fichiers_facteur;
-                       }
-
-                       $ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from_accuse, 'X-Originating-IP: '.$GLOBALS['ip']);
-               }
-
-               if ($ok) {
-                       if (isset($retours['message_ok'])) {
-                               $retours['message_ok'] .= "\n"._T('formidable:traiter_email_message_ok');
-                       } else {
-                               $retours['message_ok'] = _T('formidable:traiter_email_message_ok');
-                       }
-               } else {
-                       if (isset($retours['message_erreur'])) {
-                               $retours['message_erreur'] .= "\n"._T('formidable:traiter_email_message_erreur');
-                       } else {
-                               $retours['message_erreur'] = _T('formidable:traiter_email_message_erreur');
-                       }
-               }
-       }
-
-       // noter qu'on a deja fait le boulot, pour ne pas risquer double appel
-       $retours['traitements']['email'] = true;
-       return $retours;
-}
-
-
-/**
- * Retourne la liste des destinataires sélectionnés en fonction
- * de l'option 'destinataires_selon_champ' du traitement email.
- *
- * @param string $description
- *     Description saisie dans l'option du traitement du formulaire,
- *     qui respecte le schéma prévu, c'est à dire : 1 description par ligne,
- *     tel que `@champ@/valeur : mail@domain.tld, mail@domain.tld, ...`
- *     {@example : `@selection_2@/choix_1 : toto@domain.tld`}
- * @return array
- *     Liste des destinataires, s'il y en a.
- **/
-function formidable_traiter_email_destinataire_selon_champ($description) {
-       $destinataires = array();
-
-       // 1 test à rechercher par ligne
-       $descriptions = explode("\n", trim($description));
-       $descriptions = array_map('trim', $descriptions);
-       $descriptions = array_filter($descriptions);
-
-       // pour chaque test, s'il est valide, ajouter les courriels indiqués
-       foreach ($descriptions as $test) {
-               // Un # est un commentaire
-               if ($test[0] == '#') {
-                       continue;
-               }
-               // Le premier caractère est toujours un @
-               if ($test[0] != '@') {
-                       continue;
-               }
-
-
-               list($champ, $reste) = explode('/', $test, 2);
-               $champ = substr(trim($champ), 1, -1); // enlever les @
-
-               if ($reste) {
-                       list($valeur, $mails) = explode(':', $reste, 2);
-                       $valeur = trim($valeur);
-                       $mails = explode(',', $mails);
-                       $mails = array_map('trim', $mails);
-                       $mails = array_filter($mails);
-                       if ($mails) {
-                               // obtenir la valeur du champ saisi dans le formulaire.
-                               // cela peut être un tableau.
-                               $champ = _request($champ);
-                               if (!is_null($champ)) {
-                                       $ok = is_array($champ) ? in_array($valeur, $champ) : ($champ == $valeur);
-
-                                       if ($ok) {
-                                               $destinataires = array_merge($destinataires, $mails);
-                                               $destinataires = array_unique($destinataires);
-                                       }
-                               }
-                       }
-               }
-       }
-
-       return $destinataires;
-}
-
-/**
- * Gère une saisie de type fichiers dans le traitement par email.
- * C'est à dire:
- *     - S'il y a eu un enregistement avant, ne déplace pas le fichier
- *     - S'il n'y a pas eu d'enregistrement avant, déplace le fichier
- *             dans un dossier nommé en fonction du timestamp du traitement
- *     - Renvoie un tableau décrivant les fichiers, avec une url d'action sécurisée valable seulement
- *             _FORMIDABLE_EXPIRATION_FICHIERS_EMAIL (sauf si cette constantes est définie à 0)
- * @param array $saisie la description de la saisie
- * @param string $nom le nom de la saisie
- * @param int|string $id_formulaire le formulaire concerné
- * @param array $retours ce qu'a envoyé le précédent traitement
- * @param int $timestamp un timestamp correspondant au début du processus de création du courriel
- * @return array un tableau décrivant la saisie
- **/
-function traiter_email_fichiers($saisie, $nom, $id_formulaire, $retours, $timestamp) {
-       //Initialisation
-       $id_formulaire = strval($id_formulaire);//précaution
-       $vue = array();
-
-       if (isset($retours['id_formulaires_reponse']) and $id_formulaires_reponse = $retours['id_formulaires_reponse']) { // cas simple: les réponses ont été enregistrées
-               if (isset($retours['fichiers'][$nom])) { // petite précaution
-                       $options = array(
-                               'id_formulaire' => $id_formulaire,
-                               'id_formulaires_reponse' => $retours['id_formulaires_reponse']
-                       );
-                       $vue = ajouter_action_recuperer_fichier_par_email($retours['fichiers'][$nom], $nom, $options);
-               }
-       } else { // si les réponses n'ont pas été enregistrées
-               $vue = formidable_deplacer_fichiers_produire_vue_saisie($saisie, array('id_formulaire' => $id_formulaire, 'timestamp' => $timestamp));
-                       $options = array(
-                               'id_formulaire' => $id_formulaire,
-                               'timestamp' => $timestamp
-                       );
-                       $vue = ajouter_action_recuperer_fichier_par_email($vue, $nom, $options);
-       }
-
-       return $vue;
-}
-
-
-/**
- * Pour une saisie de type 'fichiers'
- * insère dans la description du résultat de cette saisie
- * l'url de l'action pour récuperer la saisie par email
- * Ajoute également une vignette correspondant à l'extension
- * @param array $saisie_a_modifier
- * @param string $nom_saisie
- * @param array $options options qui décrit l'endroit où est stocké le fichier
- * @return array $saisie_a_modifier
- **/
-function ajouter_action_recuperer_fichier_par_email($saisie_a_modifier, $nom_saisie, $options) {
-       $vignette_par_defaut = charger_fonction('vignette', 'inc/');
-
-       if (_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL > 0) {
-               $delai = secondes_en_jour(_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL);
-       }
-       foreach ($saisie_a_modifier as $i => $valeur) {
-               $url = formidable_generer_url_action_recuperer_fichier_email($nom_saisie, $valeur['nom'], $options);
-               $saisie_a_modifier[$i]['url'] = $url;
-               if (_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL > 0) {
-                       $saisie_a_modifier[$i]['fichier'] = $valeur['nom'];
-                       $saisie_a_modifier[$i]['nom'] = '['._T('formidable:lien_expire', array('delai' => $delai)).'] '.$valeur['nom'];
-               } else {
-                       $saisie_a_modifier[$i]['fichier'] = $valeur['nom'];
-                       $saisie_a_modifier[$i]['nom'] = $valeur['nom'];
-               }
-               if (isset($valeur['extension'])) {
-                       $saisie_a_modifier[$i]['vignette'] = $vignette_par_defaut($valeur['extension'], false);
-               }
-       }
-       return $saisie_a_modifier;
-}
-/**
- * Supprime dans une vue de saisie 'fichiers'
- * l'url de récupération par email
- * et l'information sur le délai d'expiration
- * @param array $vue
- * @return array $vue
-**/
-function supprimer_action_recuperer_fichier_par_email($vue) {
-       foreach ($vue as $f => &$desc) {
-               if (isset($desc['url'])) {
-                       unset($desc['url']);
-               }
-               $desc['nom'] = $desc['fichier'];
-       }
-       return $vue;
-}
-
-/**
- * Dans l'ensemble de vues des saisies
- * recherche les saisies 'fichiers'
- * et supprime pour chacune d'entre elle les actions de récupération de fichier
- * @param array $saisies
- * @param array $vues
- * @return array $vues
-**/
-function vues_saisies_supprimer_action_recuperer_fichier_par_email($saisies, $vues) {
-       foreach ($saisies as $saisie => $description) {
-               if ($description['saisie'] == 'fichiers') { // si de type fichiers
-                       $nom_saisie = $description['options']['nom'];
-                       $vues[$nom_saisie] = supprimer_action_recuperer_fichier_par_email($vues[$nom_saisie]);
-               }
-       }
-       return $vues;
-}
-
-/**
- * Calcule la taille totale des fichiers
- * d'après une saisie de type fichiers
- * @param array $saisie
- * @return int $taille (en octets)
-**/
-function formidable_calculer_taille_fichiers_saisie($saisie) {
-       $taille = 0;
-       foreach ($saisie as $k => $info) {
-               $taille += $info['taille'];
-       }
-       return $taille;
-}
-
-/**
- * Converti une description d'une vue fichiers en description passable à facteur
- * @param array $vue
- * @return array $tableau_facteur
-**/
-function vue_fichier_to_tableau_facteur($vue) {
-       $tableau_facteur = array();
-       foreach ($vue as $fichier) {
-               $arg = unserialize(parametre_url($fichier['url'],'arg'));
-               $tableau_facteur[] = array(
-                       'chemin' => formidable_generer_chemin_fichier($arg),
-                       'nom' => $fichier['fichier'],
-                       'encodage' => 'base64',
-                       'mime' => $fichier['mime']);
-       }
-       return $tableau_facteur;
-}
-
-/**
- * Retourne des secondes sous une jolie forme, du type xx jours, yy heures, zz minutes, aa secondes
- * @param int $seconde
- * @return str
-**/
-function secondes_en_jour($secondes) {
-       //On ne peut pas utiliser date_create, car en PHP 5.2, et SPIP 3.0 est à partir de PHP 5.1…
-       $jours = floor($secondes/(24*3600));
-       $heures = floor(($secondes-$jours*24*3600)/3600);
-       $minutes = floor(($secondes-$jours*24*3600-$heures*3600)/60);
-       $secondes = $secondes-$jours*24*3600-$heures*3600-$minutes*60;
-       $param = array(
-               'j' => $jours,
-               'h' => $heures,
-               'm' => $minutes,
-               's' => $secondes
-       );
-       if ($jours > 0) {
-               return _T('formidable:jours_heures_minutes_secondes', $param);
-       } elseif ($heures > 0) {
-               return _T('formidable:heures_minutes_secondes', $param);
-       } elseif ($minutes > 0) {
-               return _T('formidable:minutes_secondes', $param);
-       } else {
-               return _T('formidable:secondes', $param);
-       }
-}
diff --git a/www/plugins/formidable/traiter/email.yaml b/www/plugins/formidable/traiter/email.yaml
deleted file mode 100644 (file)
index a53d973..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-
-titre: '<:formidable:traiter_email_titre:>'
-description: '<:formidable:traiter_email_description:>'
-options:
-  -
-    saisie: 'champ'
-    options:
-      nom: 'champ_destinataires'
-      label: '<:formidable:traiter_email_option_destinataires_label:>'
-      explication: '<:formidable:traiter_email_option_destinataires_explication:>'
-      forcer_type: [destinataires,hidden]
-      env: true
-  -
-    saisie: 'champ'
-    options:
-      nom: 'champ_courriel_destinataire_form'
-      label: '<:formidable:traiter_email_option_destinataires_champ_form_label:>'
-      explication: '<:formidable:traiter_email_option_destinataires_champ_form_explication:>'
-      env: true
-  -
-    saisie: 'input'
-    options:
-      nom: 'destinataires_plus'
-      label: '<:formidable:traiter_email_option_destinataires_plus_label:>'
-      explication: '<:formidable:traiter_email_option_destinataires_plus_explication:>'
-    verifier:
-      type: 'email'
-  -
-    saisie: 'textarea'
-    options:
-      nom: 'destinataires_selon_champ'
-      label: '<:formidable:traiter_email_option_destinataires_selon_champ_label:>'
-      explication: '<:formidable:traiter_email_option_destinataires_selon_champ_explication:>'
-      placeholder: "@selection_1@/choix1 : mail1@example.tld, mail2@example.tld"
-      conteneur_class: 'pleine_largeur'
-      rows: 4
-  -
-    saisie: 'textarea'
-    options:
-      nom: 'exclure_champs_email'
-      label: '<:formidable:traiter_email_option_exclure_champs_email_label:>'
-      explication: '<:formidable:traiter_email_option_exclure_champs_email_explication:>'
-      placeholder: "input_3,selection_2"
-      conteneur_class: 'pleine_largeur'
-      rows: 4
-  -
-    saisie: 'champ'
-    options:
-      nom: 'champ_courriel'
-      label: '<:formidable:traiter_email_option_envoyeur_courriel_label:>'
-      explication: '<:formidable:traiter_email_option_envoyeur_courriel_explication:>'
-      env: true
-  -
-    saisie: 'case'
-    options:
-      nom: 'activer_vrai_envoyeur'
-      label_case: '<:formidable:traiter_email_option_vrai_envoyeur_label:>'
-      explication: '<:formidable:traiter_email_option_vrai_envoyeur_explication:>'
-  -
-    saisie: 'input'
-    options:
-      nom: 'champ_nom'
-      label: '<:formidable:traiter_email_option_envoyeur_nom_label:>'
-      explication: '<:formidable:traiter_email_option_envoyeur_nom_explication:>'
-  -
-    saisie: 'input'
-    options:
-      nom: 'champ_sujet'
-      label: '<:formidable:traiter_email_option_sujet_label:>'
-      explication: '<:formidable:traiter_email_option_sujet_explication:>'
-  -
-    saisie: 'case'
-    options:
-      nom: 'pj'
-      li_class: 'pleine_largeur'
-      label_case: '<:formidable:traiter_email_option_pj_label:>'
-      explication: '<:formidable:traiter_email_option_pj_explication:>'
-  -
-    saisie: 'case'
-    options:
-      nom: 'masquer_liens'
-      li_class: 'pleine_largeur'
-      label_case: '<:formidable:traiter_email_option_masquer_liens_label_case:>'
-  -
-    saisie: 'case'
-    options:
-      nom: 'activer_ip'
-      li_class: 'pleine_largeur'
-      label_case: '<:formidable:traiter_email_option_activer_ip_label_case:>'
-  -
-    saisie: 'case'
-    options:
-      nom: 'activer_accuse'
-      li_class: 'pleine_largeur'
-      label_case: '<:formidable:traiter_email_option_activer_accuse_label_case:>'
-  -
-    saisie: 'input'
-    options:
-      nom: 'sujet_accuse'
-      label: '<:formidable:traiter_email_option_sujet_accuse_label:>'
-      explication: '<:formidable:traiter_email_option_sujet_explication:>'
-  -
-    saisie: 'input'
-    options:
-      nom: 'courriel_envoyeur_accuse'
-      label: '<:formidable:traiter_email_option_courriel_envoyeur_accuse_label:>'
-      explication: '<:formidable:traiter_email_option_courriel_envoyeur_accuse_explication:>'
-  -
-    saisie: 'input'
-    options:
-      nom: 'nom_envoyeur_accuse'
-      label: '<:formidable:traiter_email_option_nom_envoyeur_accuse_label:>'
-      explication: '<:formidable:traiter_email_option_nom_envoyeur_accuse_explication:>'
diff --git a/www/plugins/formidable/traiter/enregistrement.php b/www/plugins/formidable/traiter/enregistrement.php
deleted file mode 100644 (file)
index b68cd92..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-include_spip('inc/formidable_fichiers');
-function traiter_enregistrement_dist($args, $retours) {
-       include_spip('inc/formidable');
-       include_spip('base/abstract_sql');
-       $retours['fichiers'] = array(); // on va stocker des infos sur les fichiers, pour les prochains traitement
-       $options = $args['options'];
-       $formulaire = $args['formulaire'];
-       $id_formulaire = $args['id_formulaire'];
-       $saisies = unserialize($formulaire['saisies']);
-       $saisies = saisies_lister_par_nom($saisies);
-
-       // La personne a-t-elle un compte ?
-       $id_auteur = isset($GLOBALS['visiteur_session']) ? (isset($GLOBALS['visiteur_session']['id_auteur']) ?
-               $GLOBALS['visiteur_session']['id_auteur'] : 0) : 0;
-
-       // traitement de l'anonymisation
-       if ($options['anonymiser'] == 'on') {
-               // mod de l'id_auteur
-               $variables_anonymisation =
-                       $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
-               $id = eval("return $variables_anonymisation;");
-               $id_auteur = formidable_scramble($id, $id_formulaire);
-       }
-
-       // On cherche le cookie et sinon on le crée
-       $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
-       if (isset($_COOKIE[$nom_cookie])) {
-               $cookie = $_COOKIE[$nom_cookie];
-       } else {
-               include_spip('inc/acces');
-               $cookie = creer_uniqid();
-       }
-
-       // On regarde si c'est une modif d'une réponse existante
-       $id_formulaires_reponse = $args['id_formulaires_reponse'];
-
-       // recherche d'éventuelles anciennes réponses
-       $reponses = formidable_verifier_reponse_formulaire(
-               $id_formulaire,
-               $options['identification'],
-               ($options['anonymiser'] == 'on')
-                       ? $options['anonymiser_variable']
-                       : false
-       );
-
-       // pas d'id_formulaires_reponse : on cherche une éventuelle réponse en base
-       if ($id_formulaires_reponse == false) {
-               $traitements_formulaire = unserialize($formulaire['traitements']);
-
-               if (isset($traitements_formulaire['enregistrement'])) {
-                       $options =  $traitements_formulaire['enregistrement'];
-
-                       if (isset($options['multiple']) && $options['multiple'] == ''
-                                       && isset($options['modifiable']) && $options['modifiable'] == 'on'
-                                       && is_array($reponses) && count($reponses) > 0) {
-                               $id_formulaires_reponse = max($reponses);
-                       }
-               }
-       } else {
-               // vérifier que l'auteur est bien l'auteur de la réponse, si non, on invalide l'id_formulaires_reponse
-               if (in_array($id_formulaires_reponse, $reponses) == false) {
-                       $id_formulaires_reponse = false;
-               }
-       }
-
-       // Si la moderation est a posteriori ou que la personne est un boss, on publie direct
-       if ($options['moderation'] == 'posteriori'
-               or autoriser(
-                       'instituer',
-                       'formulairesreponse',
-                       $id_formulaires_reponse,
-                       null,
-                       array('id_formulaire' => $id_formulaire, 'nouveau_statut' => 'publie')
-               )) {
-               $statut='publie';
-       } else {
-               $statut = 'prop';
-       }
-
-       // Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
-       if (!$id_formulaires_reponse) {
-               $id_formulaires_reponse = sql_insertq(
-                       'spip_formulaires_reponses',
-                       array(
-                               'id_formulaire' => $id_formulaire,
-                               'id_auteur' => $id_auteur,
-                               'cookie' => $cookie,
-                               'ip' => $args['options']['ip'] == 'on' ? $GLOBALS['ip'] : '',
-                               'date' => 'NOW()',
-                               'statut' => $statut
-                       )
-               );
-               // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables,
-               // il faut poser un cookie
-               if (!$options['multiple'] or $options['modifiable']) {
-                       include_spip('inc/cookie');
-                       // Expiration dans 30 jours
-                       spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
-               }
-       } else { // si c'est une modif de réponse existante
-               // simple mise à jour du champ maj de la table spip_formulaires_reponses
-               sql_updateq(
-                       'spip_formulaires_reponses',
-                       array('maj' => 'NOW()'),
-                       "id_formulaires_reponse = $id_formulaires_reponse"
-               );
-               //effacer les fichiers existant
-               formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse);
-       }
-
-       // Si l'id n'a pas été créé correctement alors erreur
-       if (!($id_formulaires_reponse > 0)) {
-               $retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
-       } else {
-               // Sinon on continue à mettre à jour
-               $champs = array();
-               $insertions = array();
-               foreach ($saisies as $nom => $saisie) {
-                       if ($saisie['saisie'] == 'fichiers') { // traiter à part le cas des saisies fichiers
-                               $valeur = traiter_enregistrement_fichiers($saisie, $id_formulaire, $id_formulaires_reponse);
-                               if (($valeur !== null)) {
-                                       $champs[] = $nom;
-                                       $insertions[] = array(
-                                               'id_formulaires_reponse' => $id_formulaires_reponse,
-                                               'nom' => $nom,
-                                               'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
-                                       );
-                                       $retours['fichiers'][$nom] = $valeur;
-                               }
-                       }
-                       if (($valeur = _request($nom)) !== null) {
-                               // Pour le saisies différentes de fichiers,
-                               // on ne prend que les champs qui ont effectivement été envoyés par le formulaire
-                               $champs[] = $nom;
-                               $insertions[] = array(
-                                       'id_formulaires_reponse' => $id_formulaires_reponse,
-                                       'nom' => $nom,
-                                       'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
-                               );
-                       }
-               }
-
-               // S'il y a bien des choses à modifier
-               if ($champs) {
-                       // On supprime d'abord les champs
-                       sql_delete(
-                               'spip_formulaires_reponses_champs',
-                               array(
-                                       'id_formulaires_reponse = '.$id_formulaires_reponse,
-                                       sql_in('nom', $champs)
-                               )
-                       );
-
-                       // Puis on insère les nouvelles valeurs
-                       sql_insertq_multi(
-                               'spip_formulaires_reponses_champs',
-                               $insertions
-                       );
-               }
-               if (!isset($retours['message_ok'])) {
-                       $retours['message_ok'] = '';
-               }
-               $retours['message_ok'] .= "\n"._T('formidable:traiter_enregistrement_message_ok');
-               $retours['id_formulaires_reponse'] = $id_formulaires_reponse;
-       }
-
-       // noter qu'on a deja fait le boulot, pour ne pas risquer double appel
-       $retours['traitements']['enregistrement'] = true;
-       return $retours;
-}
-
-function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles) {
-       include_spip('inc/saisies');
-       include_spip('base/abstract_sql');
-       $comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
-
-       // Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
-       if ($comparaison['supprimees']) {
-               // On récupère les réponses du formulaire
-               $reponses = sql_allfetsel(
-                       'id_formulaires_reponse',
-                       'spip_formulaires_reponses',
-                       'id_formulaire = '.$id_formulaire
-               );
-               $reponses = array_map('reset', $reponses);
-               // Tous les noms de champs à supprimer
-               $noms = array_keys($comparaison['supprimees']);
-
-               // On supprime
-               sql_delete(
-                       'spip_formulaires_reponses_champs',
-                       array(
-                               sql_in('id_formulaires_reponse', $reponses),
-                               sql_in('nom', $noms)
-                       )
-               );
-               // On efface les vieux fichiers
-               foreach ($noms as $nom) {
-                       if ($comparaison['supprimees'][$nom]['saisie'] == 'fichiers') {
-                               formidable_effacer_fichiers_champ($id_formulaire, $reponses, $nom);
-                       }
-               }
-       }
-}
-
-/**
- * Pour une saisie 'fichiers' particulière,
- * déplace chaque fichier envoyé dans le dossier
- * config/fichiers/formidable/formulaire_$id_formulaire/reponse_$id_formulaires_reponse.
- * @param array $saisie la description de la saisie
- * @param int $id_formulaire le formulaire
- * @param int $id_formulaires_reponse
- * return array|null un tableau organisé par fichier, contenant 'nom', 'extension','mime','taille'
-**/
-function traiter_enregistrement_fichiers($saisie, $id_formulaire, $id_formulaires_reponse) {
-       return formidable_deplacer_fichiers_produire_vue_saisie($saisie, array('id_formulaire' => $id_formulaire, 'id_formulaires_reponse' => $id_formulaires_reponse));
-}
diff --git a/www/plugins/formidable/traiter/enregistrement.yaml b/www/plugins/formidable/traiter/enregistrement.yaml
deleted file mode 100644 (file)
index af8ec6a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-
-titre: '<:formidable:traiter_enregistrement_titre:>'
-description: '<:formidable:traiter_enregistrement_description:>'
-options:
-  -
-    saisie: 'case'
-    options:
-      nom: 'multiple'
-      label_case: '<:formidable:traiter_enregistrement_option_multiple_explication:>'
-      defaut: 'on'
-      li_class: 'pleine_largeur'
-  -
-    saisie: 'case'
-    options:
-      nom: 'modifiable'
-      label_case: '<:formidable:traiter_enregistrement_option_modifiable_explication:>'
-      defaut: ''
-      li_class: 'pleine_largeur'
-  -
-    saisie: 'radio'
-    options:
-      nom: 'identification'
-      explication: '<:formidable:traiter_enregistrement_option_identification_explication:>'
-      datas:
-        cookie: '<:formidable:identification_par_cookie:>'
-        id_auteur: '<:formidable:identification_par_id_auteur:>'
-      defaut: 'cookie'
-      li_class: 'suite pleine_largeur'
-  -
-    saisie: 'case'
-    options:
-      nom: 'anonymiser'
-      label_case: '<:formidable:traiter_enregistrement_option_anonymiser_explication:>'
-      defaut: ''
-      li_class: 'pleine_largeur'
-  -
-    saisie: 'selection'
-    options:
-      option_intro: '<:formidable:traiter_enregistrement_option_choix_select_label:>'
-      nom: 'anonymiser_variable'
-      label: '<:formidable:traiter_enregistrement_option_anonymiser_variable_explication:>'
-      datas:
-        remote_user: "Variable serveur : REMOTE_USER"
-        php_auth_user: "Variable serveur : PHP_AUTH_USER"
-      defaut: ''
-      li_class: 'suite pleine_largeur'
-  -
-    saisie: 'case'
-    options:
-      nom: 'ip'
-      label_case: '<:formidable:traiter_enregistrement_option_ip_label:>'
-      defaut: 'on'
-      li_class: 'pleine_largeur'
-  -
-    saisie: 'radio'
-    options:
-      nom: 'moderation'
-      label: '<:formidable:traiter_enregistrement_option_moderation_label:>'
-      datas:
-        posteriori: '<:forum:bouton_radio_modere_posteriori:>'
-        priori: '<:forum:bouton_radio_modere_priori:>'
-      defaut: 'posteriori'
-  -
-    saisie: 'textarea'
-    options:
-      nom: 'analyse_exclure_champs'
-      label: '<:formidable:analyse_exclure_champs_label:>'
-      explication: '<:formidable:analyse_exclure_champs_explication:>'
-      rows: 4
-  - 
-    saisie: 'case'
-    options:
-      nom: 'effacement'
-      label_case: '<:formidable:traiter_enregistrement_option_effacement_label:>'
-      li_class: 'pleine_largeur'
-  - 
-    saisie: 'input'
-    options:
-      nom: 'effacement_delai'
-      label: '<:formidable:traiter_enregistrement_option_effacement_delai_label:>'
-      afficher_si: '@traitements[enregistrement][effacement]@=="on"'
-
diff --git a/www/plugins/nospam b/www/plugins/nospam
new file mode 160000 (submodule)
index 0000000..69e4c9f
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 69e4c9f7f9d30a2071f313ec9a78f7ad13b55384
diff --git a/www/plugins/nospam/images/nospam-32.png b/www/plugins/nospam/images/nospam-32.png
deleted file mode 100644 (file)
index 42a2218..0000000
Binary files a/www/plugins/nospam/images/nospam-32.png and /dev/null differ
diff --git a/www/plugins/nospam/images/nospam.gif b/www/plugins/nospam/images/nospam.gif
deleted file mode 100644 (file)
index b0698ef..0000000
Binary files a/www/plugins/nospam/images/nospam.gif and /dev/null differ
diff --git a/www/plugins/nospam/images/nospam.png b/www/plugins/nospam/images/nospam.png
deleted file mode 100644 (file)
index b1101c7..0000000
Binary files a/www/plugins/nospam/images/nospam.png and /dev/null differ
diff --git a/www/plugins/nospam/inc/detecter_langue.php b/www/plugins/nospam/inc/detecter_langue.php
deleted file mode 100644 (file)
index 132b626..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-<?php
-
-$GLOBALS["ngrams"]['af'] = array("ie ", " di", "die", "en ", "ing", "an ", " en", "van", " va", "ng ", "te ", "n d", "ver", "er ", "e v", " ge", " be", "de ", " ve", "nde", " in", " te", "le ", "der", "ers", "et ", "oor", " 'n", "'n ", "at ", "eer", "ste", "ord", "aar", "sie", " wa", "es ", "e s", "aan", " on", "is ", "in ", "e o", "rde", "e b", "asi", "rin", "ond", "e w", "el ", " is", "and", "e e", "eid", "e d", "om ", "ke ", " om", "eri", " wo", "e g", "r d", "ale", "wat", " vo", "id ", "it ", "rd ", " aa", "lik", " we", "t d", " op", "e t", "ngs", "se ", "end", "uit", " st", " le", "ens", "ter", " re", "e a", "ies", "wor", "g v", "sta", "n s", " na", " pr", "n o", " me", "al ", "of ", " vi", "erd", "lee", "e k", " de", "ite", "erk", "ik ", "e r", "e p", "n v", "e i", "e n", "een", "eli", "wer", " of", " da", "tel", "nie", "ike", "s e", "taa", "ge ", "vir", "hei", "ir ", "reg", "ede", "s v", "ur ", "pro", "ele", "ion", "wet", "e l", " mo", "e m", "daa", "sio", "s d", " he", " to", "ent", "ard", "nge", " oo", "eur", "lle", "ien", "n b", "eke", "lin", "raa", " ni", "ont", "bes", "rdi", "voo", "ns ", "n a", "del", "dig", "nas", " sa", " gr", "nis", "kom", " ui", "men", "op ", "ins", "ona", "ere", "s o", " so", "n g", "ig ", "moe", " ko", "rs ", "ges", "nal", "vol", "e h", "geb", "rui", "ang", "ige", "oet", "ar ", "wys", "lig", "as ", "n w", " as", "met", "gs ", "deu", "t v", "aal", "erw", "dit", "ken", "sse", "kel", " hu", "ewe", "din", "n t", " se", "est", "ika", "n p", "ntw", "t i", "eni", " ka", "n e", "doe", "ali", "eme", "gro", "nte", " ho", "nsi", "gen", "ier", "gew", "n h", "or ", " ma", "ind", "ne ", "ek ", "aat", "n '", " sk", "ide", " ta", "dat", "ska", "ger", "soo", "n k", "s i", " af", "tee", "nd ", "eel", "hul", "nee", "woo", "rik", "d v", "n m", "re ", "art", "ebr", "lan", "kke", "ron", "aam", "tre", "str", "kan", "ree", "lei", "t o", "gra", "het", "evo", "tan", "den", "ist", " do", "bru", "toe", "olg", "rsk", "uik", "rwy", "min", "lge", "g e", "g o", "nst", "r v", "gte", "waa", "we ", "ans", "esi", "ese", "voe", "epa", "gel", " hi", "vin", "nse", "s w", "s t", "tei", "eit", "pre");
-$GLOBALS["ngrams"]['ar'] = array(" ال", "الع", "لعر", "عرا", "راق", " في", "في ", "ين ", "ية ", "ن ا", "الم", "ات ", "من ", "ي ا", " من", "الأ", "ة ا", "اق ", " وا", "اء ", "الإ", " أن", "وال", "ما ", " عل", "لى ", "ت ا", "ون ", "هم ", "اقي", "ام ", "ل ا", "أن ", "م ا", "الت", "لا ", "الا", "ان ", "ها ", "ال ", "ة و", "ا ا", "رها", "لام", "يين", " ول", "لأم", "نا ", "على", "ن ي", "الب", "اد ", "الق", "د ا", "ذا ", "ه ا", " با", "الد", "ب ا", "مري", "لم ", " إن", " لل", "سلا", "أمر", "ريك", "مة ", "ى ا", "ا ي", " عن", " هذ", "ء ا", "ر ا", "كان", "قتل", "إسل", "الح", "وا ", " إل", "ا أ", "بال", "ن م", "الس", "رة ", "لإس", "ن و", "هاب", "ي و", "ير ", " كا", "لة ", "يات", " لا", "انت", "ن أ", "يكي", "الر", "الو", "ة ف", "دة ", "الج", "قي ", "وي ", "الذ", "الش", "امي", "اني", "ذه ", "عن ", "لما", "هذه", "ول ", "اف ", "اوي", "بري", "ة ل", " أم", " لم", " ما", "يد ", " أي", "إره", "ع ا", "عمل", "ولا", "إلى", "ابي", "ن ف", "ختط", "لك ", "نه ", "ني ", "إن ", "دين", "ف ا", "لذي", "ي أ", "ي ب", " وأ", "ا ع", "الخ", "تل ", "تي ", "قد ", "لدي", " كل", " مع", "اب ", "اخت", "ار ", "الن", "علا", "م و", "مع ", "س ا", "كل ", "لاء", "ن ب", "ن ت", "ي م", "عرب", "م ب", " وق", " يق", "ا ل", "ا م", "الف", "تطا", "داد", "لمس", "له ", "هذا", " مح", "ؤلا", "بي ", "ة م", "ن ل", "هؤل", "كن ", "لإر", "لتي", " أو", " ان", " عم", "ا ف", "ة أ", "طاف", "عب ", "ل م", "ن ع", "ور ", "يا ", " يس", "ا ت", "ة ب", "راء", "عال", "قوا", "قية", "لعا", "م ي", "مي ", "مية", "نية", "أي ", "ابا", "بغد", "بل ", "رب ", "عما", "غدا", "مال", "ملي", "يس ", " بأ", " بع", " بغ", " وم", "بات", "بية", "ذلك", "عة ", "قاو", "قيي", "كي ", "م م", "ي ع", " عر", " قا", "ا و", "رى ", "ق ا", "وات", "وم ", " هؤ", "ا ب", "دام", "دي ", "رات", "شعب", "لان", "لشع", "لقو", "ليا", "ن ه", "ي ت", "ي ي", " وه", " يح", "جرا", "جما", "حمد", "دم ", "كم ", "لاو", "لره", "ماع", "ن ق", "نة ", "هي ", " بل", " به", " له", " وي", "ا ك", "اذا", "اع ", "ت م", "تخا", "خاب", "ر م", "لمت", "مسل", "ى أ", "يست", "يطا", " لأ", " لي", "أمن", "است", "بعض", "ة ت", "ري ", "صدا", "ق و", "قول", "مد ", "نتخ", "نفس", "نها", "هنا", "أعم", "أنه", "ائن", "الآ", "الك", "حة ", "د م", "ر ع", "ربي");
-$GLOBALS["ngrams"]['az'] = array("lər", "in ", "ın ", "lar", "da ", "an ", "ir ", "də ", "ki ", " bi", "ən ", "əri", "arı", "ər ", "dir", "nda", " ki", "rin", "nın", "əsi", "ini", " ed", " qa", " tə", " ba", " ol", "ası", "ilə", "rın", " ya", "anı", " və", "ndə", "ni ", "ara", "ını", "ınd", " bu", "si ", "ib ", "aq ", "dən", "iya", "nə ", "rə ", "n b", "sın", "və ", "iri", "lə ", "nin", "əli", " de", " mü", "bir", "n s", "ri ", "ək ", " az", " sə", "ar ", "bil", "zər", "bu ", "dan", "edi", "ind", "man", "un ", "ərə", " ha", "lan", "yyə", "iyy", " il", " ne", "r k", "ə b", " is", "na ", "nun", "ır ", " da", " hə", "a b", "inə", "sin", "yan", "ərb", " də", " mə", " qə", "dır", "li ", "ola", "rba", "azə", "can", "lı ", "nla", " et", " gö", "alı", "ayc", "bay", "eft", "ist", "n i", "nef", "tlə", "yca", "yət", "əcə", " la", "ild", "nı ", "tin", "ldi", "lik", "n h", "n m", "oyu", "raq", "ya ", "əti", " ar", "ada", "edə", "mas", "sı ", "ına", "ə d", "ələ", "ayı", "iyi", "lma", "mək", "n d", "ti ", "yin", "yun", "ət ", "azı", "ft ", "i t", "lli", "n a", "ra ", " cə", " gə", " ko", " nə", " oy", "a d", "ana", "cək", "eyi", "ilm", "irl", "lay", "liy", "lub", "n ə", "ril", "rlə", "unu", "ver", "ün ", "ə o", "əni", " he", " ma", " on", " pa", "ala", "dey", "i m", "ima", "lmə", "mət", "par", "yə ", "ətl", " al", " mi", " sa", " əl", "adı", "akı", "and", "ard", "art", "ayi", "i a", "i q", "i y", "ili", "ill", "isə", "n o", "n q", "olu", "rla", "stə", "sə ", "tan", "tel", "yar", "ədə", " me", " rə", " ve", " ye", "a k", "at ", "baş", "diy", "ent", "eti", "həs", "i i", "ik ", "la ", "miş", "n n", "nu ", "qar", "ran", "tər", "xan", "ə a", "ə g", "ə t", " dü", "ama", "b k", "dil", "era", "etm", "i b", "kil", "mil", "n r", "qla", "r s", "ras", "siy", "son", "tim", "yer", "ə k", " gü", " so", " sö", " te", " xa", "ai ", "bar", "cti", "di ", "eri", "gör", "gün", "gəl", "hbə", "ihə", "iki", "isi", "lin", "mai", "maq", "n k", "n t", "n v", "onu", "qan", "qəz", "tə ", "xal", "yib", "yih", "zet", "zır", "ıb ", "ə m", "əze", " br", " in", " i̇r", " pr", " ta", " to", " üç", "a o", "ali", "ani", "anl", "aql", "azi", "bri");
-$GLOBALS["ngrams"]['bg'] = array("на ", " на", "то ", " пр", " за", "та ", " по", "ите", "те ", "а п", "а с", " от", "за ", "ата", "ия ", " в ", "е н", " да", "а н", " се", " ко", "да ", "от ", "ани", "пре", "не ", "ени", "о н", "ни ", "се ", " и ", "но ", "ане", "ето", "а в", "ва ", "ван", "е п", "а о", "ото", "ран", "ат ", "ред", " не", "а д", "и п", " до", "про", " съ", "ли ", "при", "ния", "ски", "тел", "а и", "по ", "ри ", " е ", " ка", "ира", "кат", "ние", "нит", "е з", "и с", "о с", "ост", "че ", " ра", "ист", "о п", " из", " са", "е д", "ини", "ки ", "мин", " ми", "а б", "ава", "е в", "ие ", "пол", "ств", "т н", " въ", " ст", " то", "аза", "е о", "ов ", "ст ", "ът ", "и н", "ият", "нат", "ра ", " бъ", " че", "алн", "е с", "ен ", "ест", "и д", "лен", "нис", "о о", "ови", " об", " сл", "а р", "ато", "кон", "нос", "ров", "ще ", " ре", " с ", " сп", "ват", "еше", "и в", "иет", "о в", "ове", "ста", "а к", "а т", "дат", "ент", "ка ", "лед", "нет", "ори", "стр", "стъ", "ти ", "тър", " те", "а з", "а м", "ад ", "ана", "ено", "и о", "ина", "ити", "ма ", "ска", "сле", "тво", "тер", "ция", "ят ", " бе", " де", " па", "ате", "вен", "ви ", "вит", "и з", "и и", "нар", "нов", "ова", "пов", "рез", "рит", "са ", "ята", " го", " ще", "али", "в п", "гра", "е и", "еди", "ели", "или", "каз", "кит", "лно", "мен", "оли", "раз", " ве", " гр", " им", " ме", " пъ", "ави", "ако", "ача", "вин", "во ", "гов", "дан", "ди ", "до ", "ед ", "ери", "еро", "жда", "ито", "ков", "кол", "лни", "мер", "нач", "о з", "ола", "он ", "она", "пра", "рав", "рем", "сия", "сти", "т п", "тан", "ха ", "ше ", "шен", "ълг", " ба", " си", "аро", "бъл", "в р", "гар", "е е", "елн", "еме", "ико", "има", "ко ", "кои", "ла ", "лга", "о д", "ози", "оит", "под", "рес", "рие", "сто", "т к", "т м", "т с", "уст", " би", " дв", " дъ", " ма", " мо", " ни", " ос", "ала", "анс", "ара", "ати", "аци", "беш", "вър", "е р", "едв", "ема", "жав", "и к", "иал", "ица", "иче", "кия", "лит", "о б", "ово", "оди", "ока", "пос", "род", "сед", "слу", "т и", "тов", "ува", "циа", "чес", "я з", " во", " ил", " ск", " тр", " це", "ами", "ари", "бат", "би ", "бра", "бъд");
-$GLOBALS["ngrams"]['br'] = array("ar ", " a ", "en ", "an ", "et ", " ar", "ez ", " he", " ha", " an", "n d", " ho", " da", " va", " eu", "ur ", "er ", " pe", " de", "nt ", " ma", "n e", "var", " en", " be", " di", " ch", " e ", "eur", "ou ", "uz ", "it ", "ho ", "z a", "he ", "da ", "a z", "n a", " do", "oue", "ha ", "n h", " ne", "dou", "t a", " ke", " ev", "un ", "ag ", "t e", "euz", " me", " ga", " : ", "ant", " zo", "ll ", "ad ", "ch ", "oun", "t h", " la", "t d", "r a", "a d", " ve", "r b", "ed ", "enn", "hag", " re", "ue ", "zo ", "a v", "ra ", "r p", "ma ", " go", "r g", "el ", "cho", "evi", "a g", "a r", "hen", "vez", "deu", "aou", "c'h", "eo ", "z e", "ent", "z h", "che", "a b", "vit", "vel", " dr", "eme", "eve", "r m", "our", "mp ", "e a", " ra", " ka", " pa", "omp", "han", "eun", "den", "ne ", "r h", "rou", "a e", "ist", " gu", "d a", "o d", "uez", "gan", "az ", " tr", " eo", "e d", "och", "ell", "e v", "or ", "va ", "on ", " br", "r v", "ro ", "ket", "ava", "all", "gou", "o e", "g a", "re ", "ude", "e e", "oud", " se", " ko", "z d", "eze", "tra", "lav", "e h", "kou", "oul", " al", "r e", "lou", "ken", " ze", "iou", "are", "ud ", " gr", "u a", "hou", "ach", "n t", " na", "mar", "r c", "a l", "ret", "zou", " er", "l a", "mad", "nn ", "a c", "ze ", "oll", "a h", "r d", "l e", "ris", "e g", "per", "eza", "mez", "a n", "ech", "oua", "st ", "ont", "bed", "at ", " zi", "t m", "iz ", "za ", "bre", "d e", "o a", "o k", "hor", "d h", "rn ", "a m", "em ", "ene", " c'", "etr", "e k", "ara", "in ", " et", "gue", "t g", "us ", " em", "e z", "t k", "cha", "na ", "ouz", "as ", "nte", "ut ", " ou", " ta", " le", "ere", "red", " ba", " sa", "g e", "rez", "a k", "nan", " sk", "e m", "rei", " te", "t p", "dre", "ele", "men", "ran", "o h", "e c", "e b", "her", "tro", " dh", "ber", "ste", "o p", "reu", " za", "ui ", "bar", "hon", "n n", "out", "spe", "dis", "alo", "uel", "a a", "hol", "ver", "ezo", "bez", "hoa", "i a", "tre", "ank", "gal", "kri", "bet", "ni ", "dig", "al ", "a p", "una", "r s", "env", "net", "ave", "ten", " kr", "rea", "e p", " hi", "tez", "ta ", "l d", "u d", "eud", "r z", "r r", "ren");
-$GLOBALS["ngrams"]['ca'] = array(" de", "es ", "de ", "la ", " la", "el ", "que", " el", " co", "ent", "s d", " qu", " i ", "en ", "er ", " a ", "ls ", "nt ", " pe", "e l", "a d", " en", "per", "ci ", "ar ", "ue ", "al ", " se", "est", "at ", " es", "ts ", " s ", " pr", "aci", " un", "res", "men", "s e", "del", "s a", "s p", " re", "les", " l'", "na ", "a l", " ca", " d'", "els", "a p", "ia ", "ns ", "con", " le", "tat", "a c", "i d", "a a", "ra ", "a e", " no", "ant", " al", "t d", "s i", " di", "ta ", "re ", "a s", "com", "s c", "ita", "ons", "sta", "ica", " po", "r a", " in", "pro", "tre", " pa", "ues", "amb", "ion", "des", "un ", " ma", "da ", "s s", "a i", "an ", "mb ", " am", "l d", "e d", "va ", "pre", "ter", "e e", "e c", "a m", "cia", "una", "i e", "nci", "tra", " te", "ona", "os ", "t e", "n e", "l c", "ca ", "cio", "l p", " tr", "par", "r l", "t a", "e p", "aqu", "nta", " so", "ame", "era", "r e", "e s", "ada", "n a", "s q", " si", " ha", "als", "tes", " va", " m ", "ici", "nte", "s l", "s m", "i a", "or ", " mo", "ist", "ect", "lit", "m s", " to", "ir ", "a t", "esp", "ran", "str", "om ", "l s", "st ", "nts", " me", "no ", "r d", "d'a", "l'a", "ats", "ria", "s t", " ta", "sen", "rs ", "eix", "tar", "s n", "n l", "tal", "e a", "t p", "art", " mi", " ll", "tic", "ten", "ser", " aq", "ina", "ntr", "a f", "sti", "ol ", "a q", "for", "ura", "ers", "ari", "int", "act", "l'e", " fi", "r s", "e t", "tor", "si ", "ste", "rec", "a r", " fe", "is ", "em ", "n d", "car", "bre", " fo", " vi", " an", "ali", "i p", "ix ", "ell", "l m", "pos", "orm", "l l", "i l", " ac", "fer", "s r", "ess", "eu ", "e m", "ens", "ara", "eri", "sa ", "ssi", "us ", "ort", "tot", "ll ", "por", "ora", " ci", "tan", "ass", "n c", "ost", "nes", "rac", "a u", "ver", "ont", "ha ", " ti", "itz", "gra", "t c", " n ", "a v", "ren", "cat", "nal", " ri", "qua", "t l", " do", "t s", "rma", "ual", "i s", "s f", "n p", "s v", "te ", "t i", " ba", "cte", "tam", "man", "l t", "ial", " fa", "ic ", " ve", "ble", "a n", "all", "tza", "ies", " s'", "le ", "omp", "r c", " nc", "rti", "it ", "rre", "fic", "any", "on ", " sa", "r p", "tur");
-$GLOBALS["ngrams"]['ceb'] = array("ng ", "sa ", " sa", "ang", "ga ", "nga", " ka", " ng", "an ", " an", " na", " ma", " ni", "a s", "a n", "on ", " pa", " si", "a k", "a m", " ba", "ong", "a i", "ila", " mg", "mga", "a p", "iya", "a a", "ay ", "ka ", "ala", "ing", "g m", "n s", "g n", "lan", " gi", "na ", "ni ", "o s", "g p", "n n", " da", "ag ", "pag", "g s", "yan", "ayo", "o n", "si ", " mo", "a b", "g a", "ail", "g b", "han", "a d", "asu", "nag", "ya ", "man", "ne ", "pan", "kon", " il", " la", "aka", "ako", "ana", "bas", "ko ", "od ", "yo ", " di", " ko", " ug", "a u", "g k", "kan", "la ", "len", "sur", "ug ", " ai", "apa", "aw ", "d s", "g d", "g g", "ile", "nin", " iy", " su", "ene", "og ", "ot ", "aba", "aha", "as ", "imo", " ki", "a t", "aga", "ban", "ero", "nan", "o k", "ran", "ron", "sil", "una", "usa", " us", "a g", "ahi", "ani", "er ", "ha ", "i a", "rer", "yon", " pu", "ini", "nak", "ro ", "to ", "ure", " ed", " og", " wa", "ili", "mo ", "n a", "nd ", "o a", " ad", " du", " pr", "aro", "i s", "ma ", "n m", "ulo", "und", " ta", "ara", "asa", "ato", "awa", "dmu", "e n", "edm", "ina", "mak", "mun", "niy", "san", "wa ", " tu", " un", "a l", "bay", "iga", "ika", "ita", "kin", "lis", "may", "os ", " ar", "ad ", "ali", "ama", "ers", "ipa", "isa", "mao", "nim", "t s", "tin", " ak", " ap", " hi", "abo", "agp", "ano", "ata", "g i", "gan", "gka", "gpa", "i m", "iha", "k s", "law", "or ", "rs ", "siy", "tag", " al", " at", " ha", " hu", " im", "a h", "bu ", "e s", "gma", "kas", "lag", "mon", "nah", "ngo", "r s", "ra ", "sab", "sam", "sul", "uba", "uha", " lo", " re", "ada", "aki", "aya", "bah", "ce ", "d n", "lab", "pa ", "pak", "s n", "s s", "tan", "taw", "te ", "uma", "ura", " in", " lu", "a c", "abi", "at ", "awo", "bat", "dal", "dla", "ele", "g t", "g u", "gay", "go ", "hab", "hin", "i e", "i n", "kab", "kap", "lay", "lin", "nil", "pam", "pas", "pro", "pul", "ta ", "ton", "uga", "ugm", "unt", " co", " gu", " mi", " pi", " ti", "a o", "abu", "adl", "ado", "agh", "agk", "ao ", "art", "bal", "cit", "di ", "dto", "dun", "ent", "g e", "gon", "gug", "ia ", "iba", "ice", "in ", "inu", "it ", "kaa");
-$GLOBALS["ngrams"]['cs'] = array(" pr", " po", "ní ", "pro", " na", "na ", " př", "ch ", " je", " ne", "že ", " že", " se", " do", " ro", " st", " v ", " ve", "pře", "se ", "ho ", "sta", " to", " vy", " za", "ou ", " a ", "to ", " by", "la ", "ce ", "e v", "ist", "le ", "pod", "í p", " vl", "e n", "e s", "je ", "ké ", "by ", "em ", "ých", " od", "ova", "řed", "dy ", "ení", "kon", "li ", "ně ", "str", " zá", "ve ", " ka", " sv", "e p", "it ", "lád", "oho", "rov", "roz", "ter", "vlá", "ím ", " ko", "hod", "nis", "pří", "ský", " mi", " ob", " so", "a p", "ali", "bud", "edn", "ick", "kte", "ku ", "o s", "al ", "ci ", "e t", "il ", "ny ", "né ", "odl", "ová", "rot", "sou", "ání", " bu", " mo", " o ", "ast", "byl", "de ", "ek ", "ost", " mí", " ta", "es ", "jed", "ky ", "las", "m p", "nes", "ním", "ran", "rem", "ros", "ého", " de", " kt", " ni", " si", " vý", "at ", "jí ", "ký ", "mi ", "pre", "tak", "tan", "y v", "řek", " ch", " li", " ná", " pa", " ře", "da ", "dle", "dne", "i p", "i v", "ly ", "min", "o n", "o v", "pol", "tra", "val", "vní", "ích", "ý p", "řej", " ce", " kd", " le", "a s", "a z", "cen", "e k", "eds", "ekl", "emi", "kl ", "lat", "lo ", "mié", "nov", "pra", "sku", "ské", "sti", "tav", "ti ", "ty ", "ván", "vé ", "y n", "y s", "í s", "í v", "ě p", " dn", " ně", " sp", " čs", "a n", "a t", "ak ", "dní", "doh", "e b", "e m", "ejn", "ena", "est", "ini", "m z", "nal", "nou", "ná ", "ovi", "ové", "ový", "rsk", "stá", "tí ", "tře", "tů ", "ude", "za ", "é p", "ém ", "í d", " ir", " zv", "ale", "aně", "ave", "cké", "den", "e z", "ech", "en ", "erý", "hla", "i s", "iér", "lov", "mu ", "neb", "nic", "o b", "o m", "pad", "pot", "rav", "rop", "rý ", "sed", "si ", "t p", "tic", "tu ", "tě ", "u p", "u v", "vá ", "výš", "zvý", "ční", "ří ", "ům ", " bl", " br", " ho", " ja", " re", " s ", " z ", " zd", "a v", "ani", "ato", "bla", "bri", "ečn", "eře", "h v", "i n", "ie ", "ila", "irs", "ite", "kov", "nos", "o o", "o p", "oce", "ody", "ohl", "oli", "ovo", "pla", "poč", "prá", "ra ", "rit", "rod", "ry ", "sd ", "sko", "ssd", "tel", "u s", "vat", "veř", "vit", "vla", "y p", "áln", "čss", "šen", " al");
-$GLOBALS["ngrams"]['cy'] = array("yn ", "dd ", " yn", " y ", "ydd", "eth", "th ", " i ", "aet", "d y", "ch ", "od ", "ol ", "edd", " ga", " gw", "'r ", "au ", "ddi", "ad ", " cy", " gy", " ei", " o ", "iad", "yr ", "an ", "bod", "wed", " bo", " dd", "el ", "n y", " am", "di ", "edi", "on ", " we", " ym", " ar", " rh", "odd", " ca", " ma", "ael", "oed", "dae", "n a", "dda", "er ", "h y", "all", "ei ", " ll", "am ", "eu ", "fod", "fyd", "l y", "n g", "wyn", "d a", "i g", "mae", "neu", "os ", " ne", "d i", "dod", "dol", "n c", "r h", "wyd", "wyr", "ai ", "ar ", "in ", "rth", " fy", " he", " me", " yr", "'n ", "dia", "est", "h c", "hai", "i d", "id ", "r y", "y b", " dy", " ha", "ada", "i b", "n i", "ote", "rot", "tes", "y g", "yd ", " ad", " mr", " un", "cyn", "dau", "ddy", "edo", "i c", "i w", "ith", "lae", "lla", "nd ", "oda", "ryd", "tho", " a ", " dr", "aid", "ain", "ddo", "dyd", "fyn", "gyn", "hol", "io ", "o a", "wch", "wyb", "ybo", "ych", " br", " by", " di", " fe", " na", " o'", " pe", "art", "byd", "dro", "gal", "l e", "lai", "mr ", "n n", "r a", "rhy", "wn ", "ynn", " on", " r ", "cae", "d g", "d o", "d w", "gan", "gwy", "n d", "n f", "n o", "ned", "ni ", "o'r", "r d", "ud ", "wei", "wrt", " an", " cw", " da", " ni", " pa", " pr", " wy", "d e", "dai", "dim", "eud", "gwa", "idd", "im ", "iri", "lwy", "n b", "nol", "r o", "rwy", " ch", " er", " fo", " ge", " hy", " i'", " ro", " sa", " tr", "bob", "cwy", "cyf", "dio", "dyn", "eit", "hel", "hyn", "ich", "ll ", "mdd", "n r", "ond", "pro", "r c", "r g", "red", "rha", "u a", "u c", "u y", "y c", "ymd", "ymr", "yw ", " ac", " be", " bl", " co", " os", "adw", "ae ", "af ", "d p", "efn", "eic", "en ", "eol", "es ", "fer", "gel", "h g", "hod", "ied", "ir ", "laf", "n h", "na ", "nyd", "odo", "ofy", "rdd", "rie", "ros", "stw", "twy", "yda", "yng", " at", " de", " go", " id", " oe", " â ", "'ch", "ac ", "ach", "ae'", "al ", "bl ", "d c", "d l", "dan", "dde", "ddw", "dir", "dla", "ed ", "ela", "ell", "ene", "ewn", "gyd", "hau", "hyw", "i a", "i f", "iol", "ion", "l a", "l i", "lia", "med", "mon", "n s", "no ", "obl", "ola", "ref", "rn ", "thi", "un ");
-$GLOBALS["ngrams"]['da'] = array("er ", "en ", " de", "et ", "der", "de ", "for", " fo", " i ", "at ", " at", "re ", "det", " ha", "nde", "ere", "ing", "den", " me", " og", "ger", "ter", " er", " si", "and", " af", "or ", " st", " ti", " en", "og ", "ar ", "il ", "r s", "ige", "til", "ke ", "r e", "af ", "kke", " ma", " på", "om ", "på ", "ed ", "ge ", "end", "nge", "t s", "e s", "ler", " sk", "els", "ern", "sig", "ne ", "lig", "r d", "ska", " vi", "har", " be", " se", "an ", "ikk", "lle", "gen", "n f", "ste", "t a", "t d", "rin", " ik", "es ", "ng ", "ver", "r b", "sen", "ede", "men", "r i", " he", " et", "ig ", "lan", "med", "nd ", "rne", " da", " in", "e t", "mme", "und", " om", "e e", "e m", "her", "le ", "r f", "t f", "så ", "te ", " so", "ele", "t e", " ko", "est", "ske", " bl", "e f", "ekt", "mar", "bru", "e a", "el ", "ers", "ret", "som", "tte", "ve ", " la", " ud", " ve", "age", "e d", "e h", "lse", "man", "rug", "sel", "ser", " fi", " op", " pr", "dt ", "e i", "n m", "r m", " an", " re", " sa", "ion", "ner", "res", "t i", "get", "n s", "one", "orb", "t h", "vis", "år ", " fr", "bil", "e k", "ens", "ind", "omm", "t m", " hv", " je", "dan", "ent", "fte", "nin", " mi", "e o", "e p", "n o", "nte", " ku", "ell", "nas", "ore", "r h", "r k", "sta", "sto", "dag", "eri", "kun", "lde", "mer", "r a", "r v", "rek", "rer", "t o", "tor", "tør", " få", " må", " to", "boe", "che", "e v", "i d", "ive", "kab", "ns ", "oel", "se ", "t v", " al", " bo", " un", "ans", "dre", "ire", "køb", "ors", "ove", "ren", "t b", "ør ", " ka", "ald", "bet", "gt ", "isk", "kal", "kom", "lev", "n d", "n i", "pri", "r p", "rbr", "søg", "tel", " så", " te", " va", "al ", "dir", "eje", "fis", "gså", "isc", "jer", "ker", "ogs", "sch", "st ", "t k", "uge", " di", "ag ", "d a", "g i", "ill", "l a", "lsk", "n a", "on ", "sam", "str", "tet", "var", " mo", "art", "ash", "att", "e b", "han", "hav", "kla", "kon", "n t", "ned", "r o", "ra ", "rre", "ves", "vil", " el", " kr", " ov", "ann", "e u", "ess", "fra", "g a", "g d", "int", "ngs", "rde", "tra", " år", "akt", "asi", "em ", "gel", "gym", "hol", "kan", "mna", "n h", "nsk", "old");
-$GLOBALS["ngrams"]['de'] = array("en ", "er ", " de", "der", "ie ", " di", "die", "sch", "ein", "che", "ich", "den", "in ", "te ", "ch ", " ei", "ung", "n d", "nd ", " be", "ver", "es ", " zu", "eit", "gen", "und", " un", " au", " in", "cht", "it ", "ten", " da", "ent", " ve", "and", " ge", "ine", " mi", "r d", "hen", "ng ", "nde", " vo", "e d", "ber", "men", "ei ", "mit", " st", "ter", "ren", "t d", " er", "ere", "n s", "ste", " se", "e s", "ht ", "des", "ist", "ne ", "auf", "e a", "isc", "on ", "rte", " re", " we", "ges", "uch", " fü", " so", "bei", "e e", "nen", "r s", "ach", "für", "ier", "par", "ür ", " ha", "as ", "ert", " an", " pa", " sa", " sp", " wi", "for", "tag", "zu ", "das", "rei", "he ", "hre", "nte", "sen", "vor", " sc", "ech", "etz", "hei", "lan", "n a", "pd ", "st ", "sta", "ese", "lic", " ab", " si", "gte", " wa", "iti", "kei", "n e", "nge", "sei", "tra", "zen", " im", " la", "art", "im ", "lle", "n w", "rde", "rec", "set", "str", "tei", "tte", " ni", "e p", "ehe", "ers", "g d", "nic", "von", " al", " pr", "an ", "aus", "erf", "r e", "tze", "tür", "uf ", "ag ", "als", "ar ", "chs", "end", "ge ", "ige", "ion", "ls ", "n m", "ngs", "nis", "nt ", "ord", "s s", "sse", " tü", "ahl", "e b", "ede", "em ", "len", "n i", "orm", "pro", "rke", "run", "s d", "wah", "wer", "ürk", " me", "age", "att", "ell", "est", "hat", "n b", "oll", "raf", "s a", "tsc", " es", " fo", " gr", " ja", "abe", "auc", "ben", "e n", "ege", "lie", "n u", "r v", "re ", "rit", "sag", " am", "agt", "ahr", "bra", "de ", "erd", "her", "ite", "le ", "n p", "n v", "or ", "rbe", "rt ", "sic", "wie", "übe", " is", " üb", "cha", "chi", "e f", "e m", "eri", "ied", "mme", "ner", "r a", "sti", "t a", "t s", "tis", " ko", "arb", "ds ", "gan", "n z", "r f", "r w", "ran", "se ", "t i", "wei", "wir", " br", " np", "am ", "bes", "d d", "deu", "e g", "e k", "efo", "et ", "eut", "fen", "hse", "lte", "n r", "npd", "r b", "rhe", "t w", "tz ", " fr", " ih", " ke", " ma", "ame", "ang", "d s", "eil", "el ", "era", "erh", "h d", "i d", "kan", "n f", "n l", "nts", "och", "rag", "rd ", "spd", "spr", "tio", " ar", " en", " ka", "ark", "ass");
-$GLOBALS["ngrams"]['en'] = array(" th", "the", "he ", "ed ", " to", " in", "er ", "ing", "ng ", " an", "nd ", " of", "and", "to ", "of ", " co", "at ", "on ", "in ", " a ", "d t", " he", "e t", "ion", "es ", " re", "re ", "hat", " sa", " st", " ha", "her", "tha", "tio", "or ", " ''", "en ", " wh", "e s", "ent", "n t", "s a", "as ", "for", "is ", "t t", " be", "ld ", "e a", "rs ", " wa", "ut ", "ve ", "ll ", "al ", " ma", "e i", " fo", "'s ", "an ", "est", " hi", " mo", " se", " pr", "s t", "ate", "st ", "ter", "ere", "ted", "nt ", "ver", "d a", " wi", "se ", "e c", "ect", "ns ", " on", "ly ", "tol", "ey ", "r t", " ca", "ati", "ts ", "all", " no", "his", "s o", "ers", "con", "e o", "ear", "f t", "e w", "was", "ons", "sta", "'' ", "sti", "n a", "sto", "t h", " we", "id ", "th ", " it", "ce ", " di", "ave", "d h", "cou", "pro", "ad ", "oll", "ry ", "d s", "e m", " so", "ill", "cti", "te ", "tor", "eve", "g t", "it ", " ch", " de", "hav", "oul", "ty ", "uld", "use", " al", "are", "ch ", "me ", "out", "ove", "wit", "ys ", "chi", "t a", "ith", "oth", " ab", " te", " wo", "s s", "res", "t w", "tin", "e b", "e h", "nce", "t s", "y t", "e p", "ele", "hin", "s i", "nte", " li", "le ", " do", "aid", "hey", "ne ", "s w", " as", " fr", " tr", "end", "sai", " el", " ne", " su", "'t ", "ay ", "hou", "ive", "lec", "n't", " ye", "but", "d o", "o t", "y o", " ho", " me", "be ", "cal", "e e", "had", "ple", " at", " bu", " la", "d b", "s h", "say", "t i", " ar", "e f", "ght", "hil", "igh", "int", "not", "ren", " is", " pa", " sh", "ays", "com", "n s", "r a", "rin", "y a", " un", "n c", "om ", "thi", " mi", "by ", "d i", "e d", "e n", "t o", " by", "e r", "eri", "old", "ome", "whe", "yea", " gr", "ar ", "ity", "mpl", "oun", "one", "ow ", "r s", "s f", "tat", " ba", " vo", "bou", "sam", "tim", "vot", "abo", "ant", "ds ", "ial", "ine", "man", "men", " or", " po", "amp", "can", "der", "e l", "les", "ny ", "ot ", "rec", "tes", "tho", "ica", "ild", "ir ", "nde", "ose", "ous", "pre", "ste", "era", "per", "r o", "red", "rie", " bo", " le", "ali", "ars", "ore", "ric", "s m", "str", " fa", "ess", "ie ", "ist", "lat", "uri");
-$GLOBALS["ngrams"]['es'] = array(" de", "de ", " la", "os ", "la ", "el ", "es ", " qu", " co", "e l", "as ", "que", " el", "ue ", "en ", "ent", " en", " se", "nte", "res", "con", "est", " es", "s d", " lo", " pr", "los", " y ", "do ", "ón ", "ión", " un", "ció", "del", "o d", " po", "a d", "aci", "sta", "te ", "ado", "pre", "to ", "par", "a e", "a l", "ra ", "al ", "e e", "se ", "pro", "ar ", "ia ", "o e", " re", "ida", "dad", "tra", "por", "s p", " a ", "a p", "ara", "cia", " pa", "com", "no ", " di", " in", "ien", "n l", "ad ", "ant", "e s", "men", "a c", "on ", "un ", "las", "nci", " tr", "cio", "ier", "nto", "tiv", "n d", "n e", "or ", "s c", "enc", "ern", "io ", "a s", "ici", "s e", " ma", "dos", "e a", "e c", "emp", "ica", "ivo", "l p", "n c", "r e", "ta ", "ter", "e d", "esa", "ez ", "mpr", "o a", "s a", " ca", " su", "ion", " cu", " ju", "an ", "da ", "ene", "ero", "na ", "rec", "ro ", "tar", " al", " an", "bie", "e p", "er ", "l c", "n p", "omp", "ten", " em", "ist", "nes", "nta", "o c", "so ", "tes", "era", "l d", "l m", "les", "ntr", "o s", "ore", "rá ", "s q", "s y", "sto", "a a", "a r", "ari", "des", "e q", "ivi", "lic", "lo ", "n a", "one", "ora", "per", "pue", "r l", "re ", "ren", "una", "ía ", "ada", "cas", "ere", "ide", "min", "n s", "ndo", "ran", "rno", " ac", " ex", " go", " no", "a t", "aba", "ble", "ece", "ect", "l a", "l g", "lid", "nsi", "ons", "rac", "rio", "str", "uer", "ust", " ha", " le", " mi", " mu", " ob", " pe", " pu", " so", "a i", "ale", "ca ", "cto", "e i", "e u", "eso", "fer", "fic", "gob", "jo ", "ma ", "mpl", "o p", "obi", "s m", "sa ", "sep", "ste", "sti", "tad", "tod", "y s", " ci", "and", "ces", "có ", "dor", "e m", "eci", "eco", "esi", "int", "iza", "l e", "lar", "mie", "ner", "orc", "rci", "ria", "tic", "tor", " as", " si", "ce ", "den", "e r", "e t", "end", "eri", "esp", "ial", "ido", "ina", "inc", "mit", "o l", "ome", "pli", "ras", "s t", "sid", "sup", "tab", "uen", "ues", "ura", "vo ", "vor", " sa", " ti", "abl", "ali", "aso", "ast", "cor", "cti", "cue", "div", "duc", "ens", "eti", "imi", "ini", "lec", "o q", "oce", "ort", "ral", "rma", "roc", "rod");
-$GLOBALS["ngrams"]['et'] = array("st ", " ka", "on ", "ja ", " va", " on", " ja", " ko", "se ", "ast", "le ", "es ", "as ", "is ", "ud ", " sa", "da ", "ga ", " ta", "aja", "sta", " ku", " pe", "a k", "est", "ist", "ks ", "ta ", "al ", "ava", "id ", "saa", "mis", "te ", "val", " et", "nud", " te", "inn", " se", " tu", "a v", "alu", "e k", "ise", "lu ", "ma ", "mes", " mi", "et ", "iku", "lin", "ad ", "el ", "ime", "ne ", "nna", " ha", " in", " ke", " võ", "a s", "a t", "ab ", "e s", "esi", " la", " li", "e v", "eks", "ema", "las", "les", "rju", "tle", "tsi", "tus", "upa", "use", "ust", "var", " lä", "ali", "arj", "de ", "ete", "i t", "iga", "ilm", "kui", "li ", "tul", " ei", " me", " sõ", "aal", "ata", "dus", "ei ", "nik", "pea", "s k", "s o", "sal", "sõn", "ter", "ul ", "või", " el", " ne", "a j", "ate", "end", "i k", "ita", "kar", "kor", "l o", "lt ", "maa", "oli", "sti", "vad", "ään", " ju", " jä", " kü", " ma", " po", " üt", "aas", "aks", "at ", "ed ", "eri", "hoi", "i s", "ka ", "la ", "nni", "oid", "pai", "rit", "us ", "ütl", " aa", " lo", " to", " ve", "a e", "ada", "aid", "ami", "and", "dla", "e j", "ega", "gi ", "gu ", "i p", "idl", "ik ", "ini", "jup", "kal", "kas", "kes", "koh", "s e", "s p", "sel", "sse", "ui ", " pi", " si", "aru", "eda", "eva", "fil", "i v", "ida", "ing", "lää", "me ", "na ", "nda", "nim", "ole", "ots", "ris", "s l", "sia", "t p", " en", " mu", " ol", " põ", " su", " vä", " üh", "a l", "a p", "aga", "ale", "aps", "arv", "e a", "ela", "ika", "lle", "loo", "mal", "pet", "t k", "tee", "tis", "vat", "äne", "õnn", " es", " fi", " vi", "a i", "a o", "aab", "aap", "ala", "alt", "ama", "anu", "e p", "e t", "eal", "eli", "haa", "hin", "iva", "kon", "ku ", "lik", "lm ", "min", "n t", "odu", "oon", "psa", "ri ", "si ", "stu", "t e", "t s", "ti ", "ule", "uur", "vas", "vee", " ki", " ni", " nä", " ra", "aig", "aka", "all", "atu", "e e", "eis", "ers", "i e", "ii ", "iis", "il ", "ima", "its", "kka", "kuh", "l k", "lat", "maj", "ndu", "ni ", "nii", "oma", "ool", "rso", "ru ", "rva", "s t", "sek", "son", "ste", "t m", "taj", "tam", "ude", "uho", "vai", " ag", " os", " pa", " re");
-$GLOBALS["ngrams"]['eu'] = array("en ", "an ", "eta", "ta ", " et", "iza", "n e", "ko ", "ide", " ba", "a e", "giz", " es", " gi", "arr", "bid", "ren", "rri", "are", "la ", "sku", " be", "asu", "esk", "sun", "tas", " iz", "ean", "eko", "ela", "ik ", "kub", "n a", "n i", "tza", "ubi", "za ", "zan", " er", "a b", "ask", "era", "n b", "rre", "ten", "tze", " as", " ko", "a a", "a g", "ald", "ani", "de ", "dee", "ea ", "ek ", "kat", "kon", "n d", "ont", "uan", " du", " na", "ata", "egi", "est", "k e", "nik", "ntu", "ntz", "ska", "tua", " de", " di", " ez", " he", "a d", "a k", "ak ", "aki", "ako", "art", "atu", "azi", "bat", "ber", "itz", "kun", "n h", "o b", "ria", "rte", "tat", "une", "zar", " al", " ar", " ha", "aku", "atz", "bai", "dar", "dea", "del", "een", "ema", "err", "iak", "iar", "in ", "ina", "kia", "nar", "naz", "nea", "o e", "orr", "ra ", "ste", "tek", "zak", "zek", "zio", " da", " em", " hi", " ho", " ma", " oi", "agu", "ate", "aur", "bes", "din", "dir", "dut", "ert", "ez ", "ezi", "har", "her", "hit", "ia ", "ien", "ika", "io ", "ire", "ite", "k b", "k g", "kid", "kor", "lda", "n o", "nko", "o a", "oin", "ori", "rak", "rea", "rie", "rik", "rra", "tan", "tea", "tu ", "una", "und", "unt", "urr", "ute", "z e", "zko", " au", " eg", " gu", " ir", " ki", " or", "a h", "a j", "abe", "agi", "ai ", "ail", "ait", "ape", "ari", "dez", "e e", "ear", "eek", "erd", "ere", "eza", "ezk", "gir", "git", "hor", "i e", "ian", "iek", "ila", "ink", "int", "ira", "ita", "itu", "k n", "kap", "koa", "kum", "lan", "lde", "mai", "man", "men", "n g", "n u", "na ", "nta", "o h", "oa ", "oro", "pen", "rdi", "ri ", "rta", "sta", "tel", "tet", "tik", "tue", "tzi", "ume", "un ", "uzt", "zea", "zen", "zia", "zin", " az", " bi", " bu", " el", " ga", " jo", " mu", " ti", " un", " za", " zi", "a n", "a o", "a s", "a t", "a z", "aba", "adi", "ake", "ala", "and", "ar ", "aud", "bak", "bal", "beg", "beh", "bul", "dau", "den", "du ", "dui", "e b", "e d", "e h", "e o", "eak", "eet", "eha", "elk", "enb", "ete", "eti", "gab", "gin", "go ", "gus", "gut", "guz", "hau", "ibe", "inb", "ine", "ioa", "iru", "iur", "izi", "izk", "izo");
-$GLOBALS["ngrams"]['fa'] = array("ان ", "ای ", "ه ا", " اي", " در", "به ", " بر", "در ", "ران", " به", "ی ا", "از ", "ين ", "می ", " از", "ده ", "ست ", "است", " اس", " که", "که ", "اير", "ند ", "اين", " ها", "يرا", "ود ", " را", "های", " خو", "ته ", "را ", "رای", "رد ", "ن ب", "کرد", " و ", " کر", "ات ", "برا", "د ک", "مان", "ی د", " ان", "خوا", "شور", " با", "ن ا", " سا", "تمی", "ری ", "اتم", "ا ا", "واه", " ات", " عر", "اق ", "ر م", "راق", "عرا", "ی ب", " تا", " تو", "ار ", "ر ا", "ن م", "ه ب", "ور ", "يد ", "ی ک", " ام", " دا", " کن", "اهد", "هد ", " آن", " می", " ني", " گف", "د ا", "گفت", " کش", "ا ب", "نی ", "ها ", "کشو", " رو", "ت ک", "نيو", "ه م", "وی ", "ی ت", " شو", "ال ", "دار", "مه ", "ن ک", "ه د", "يه ", " ما", "امه", "د ب", "زار", "ورا", "گزا", " پي", "آن ", "انت", "ت ا", "فت ", "ه ن", "ی خ", "اما", "بات", "ما ", "ملل", "نام", "ير ", "ی م", "ی ه", " آم", " ای", " من", "انس", "اني", "ت د", "رده", "ساز", "ن د", "نه ", "ورد", " او", " بي", " سو", " شد", "اده", "اند", "با ", "ت ب", "ر ب", "ز ا", "زما", "سته", "ن ر", "ه س", "وان", "وز ", "ی ر", "ی س", " هس", "ابا", "ام ", "اور", "تخا", "خاب", "خود", "د د", "دن ", "رها", "روز", "رگز", "نتخ", "ه ش", "ه ه", "هست", "يت ", "يم ", " دو", " دي", " مو", " نو", " هم", " کا", "اد ", "اری", "انی", "بر ", "بود", "ت ه", "ح ه", "حال", "رش ", "عه ", "لی ", "وم ", "ژان", " سل", "آمر", "اح ", "توس", "داد", "دام", "ر د", "ره ", "ريک", "زی ", "سلا", "شود", "لاح", "مري", "نند", "ه ع", "يما", "يکا", "پيم", "گر ", " آژ", " ال", " بو", " مق", " مل", " وی", "آژا", "ازم", "ازی", "بار", "برن", "ر آ", "ز س", "سعه", "شته", "مات", "ن آ", "ن پ", "نس ", "ه گ", "وسع", "يان", "يوم", "کا ", "کام", "کند", " خا", " سر", "آور", "ارد", "اقد", "ايم", "ايی", "برگ", "ت ع", "تن ", "خت ", "د و", "ر خ", "رک ", "زير", "فته", "قدا", "ل ت", "مين", "ن گ", "ه آ", "ه خ", "ه ک", "ورک", "ويو", "يور", "يوي", "يی ", "ک ت", "ی ش", " اق", " حا", " حق", " دس", " شک", " عم", " يک", "ا ت", "ا د", "ارج", "بين", "ت م", "ت و", "تاي", "دست", "ر ح", "ر س", "رنا", "ز ب", "شکا", "لل ", "م ک", "مز ", "ندا", "نوا", "و ا", "وره", "ون ", "وند", "يمز", " آو", " اع", " فر", " مت", " نه", " هر", " وز", " گز");
-$GLOBALS["ngrams"]['fi'] = array("en ", "in ", "an ", "on ", "ist", "ta ", "ja ", "n t", "sa ", "sta", "aan", "n p", " on", "ssa", "tta", "tä ", " ka", " pa", "si ", " ja", "n k", "lla", "än ", "een", "n v", "ksi", "ett", "nen", "taa", "ttä", " va", "ill", "itt", " jo", " ko", "n s", " tu", "ia ", " su", "a p", "aa ", "la ", "lle", "n m", "le ", "tte", "na ", " ta", " ve", "at ", " vi", "utt", " sa", "ise", "sen", " ku", " nä", " pä", "ste", " ol", "a t", "ais", "maa", "ti ", "a o", "oit", "pää", " pi", "a v", "ala", "ine", "isi", "tel", "tti", " si", "a k", "all", "iin", "kin", "stä", "uom", "vii", " ma", " se", "enä", " mu", "a s", "est", "iss", "llä", "lok", "lä ", "n j", "n o", "toi", "ven", "ytt", " li", "ain", "et ", "ina", "n a", "n n", "oll", "plo", "ten", "ust", "äll", "ään", " to", "den", "men", "oki", "suo", "sä ", "tää", "uks", "vat", " al", " ke", " te", "a e", "lii", "tai", "tei", "äis", "ää ", " pl", "ell", "i t", "ide", "ikk", "ki ", "nta", "ova", "yst", "yt ", "ä p", "äyt", " ha", " pe", " tä", "a n", "aik", "i p", "i v", "nyt", "näy", "pal", "tee", "un ", " me", "a m", "ess", "kau", "pai", "stu", "ut ", "voi", " et", "a h", "eis", "hte", "i o", "iik", "ita", "jou", "mis", "nin", "nut", "sia", "ssä", "van", " ty", " yh", "aks", "ime", "loi", "me ", "n e", "n h", "n l", "oin", "ome", "ott", "ouk", "sit", "sti", "tet", "tie", "ukk", "ä k", " ra", " ti", "aja", "asi", "ent", "iga", "iig", "ite", "jan", "kaa", "kse", "laa", "lan", "li ", "näj", "ole", "tii", "usi", "äjä", " ov", "a a", "ant", "ava", "ei ", "eri", "kan", "kku", "lai", "lis", "läi", "mat", "ois", "pel", "sil", "sty", "taj", "tav", "ttu", "työ", "yös", "ä o", " ai", " pu", "a j", "a l", "aal", "arv", "ass", "ien", "imi", "imm", "itä", "ka ", "kes", "kue", "lee", "lin", "llo", "one", "ri ", "t o", "t p", "tu ", "val", "vuo", " ei", " he", " hy", " my", " vo", "ali", "alo", "ano", "ast", "att", "auk", "eli", "ely", "hti", "ika", "ken", "kki", "lys", "min", "myö", "oht", "oma", "tus", "umi", "yks", "ät ", "ääl", "ös ", " ar", " eu", " hu", " na", "aat", "alk", "alu", "ans", "arj", "enn", "han", "kuu", "n y", "set", "sim");
-$GLOBALS["ngrams"]['fr'] = array("es ", " de", "de ", " le", "ent", "le ", "nt ", "la ", "s d", " la", "ion", "on ", "re ", " pa", "e l", "e d", " l'", "e p", " co", " pr", "tio", "ns ", " en", "ne ", "que", "r l", "les", "ur ", "en ", "ati", "ue ", " po", " d'", "par", " a ", "et ", "it ", " qu", "men", "ons", "te ", " et", "t d", " re", "des", " un", "ie ", "s l", " su", "pou", " au", " à ", "con", "er ", " no", "ait", "e c", "se ", "té ", "du ", " du", " dé", "ce ", "e e", "is ", "n d", "s a", " so", "e r", "e s", "our", "res", "ssi", "eur", " se", "eme", "est", "us ", "sur", "ant", "iqu", "s p", "une", "uss", "l'a", "pro", "ter", "tre", "end", "rs ", " ce", "e a", "t p", "un ", " ma", " ru", " ré", "ous", "ris", "rus", "sse", "ans", "ar ", "com", "e m", "ire", "nce", "nte", "t l", " av", " mo", " te", "il ", "me ", "ont", "ten", "a p", "dan", "pas", "qui", "s e", "s s", " in", "ist", "lle", "nou", "pré", "'un", "air", "d'a", "ir ", "n e", "rop", "ts ", " da", "a s", "as ", "au ", "den", "mai", "mis", "ori", "out", "rme", "sio", "tte", "ux ", "a d", "ien", "n a", "ntr", "omm", "ort", "ouv", "s c", "son", "tes", "ver", "ère", " il", " m ", " sa", " ve", "a r", "ais", "ava", "di ", "n p", "sti", "ven", " mi", "ain", "enc", "for", "ité", "lar", "oir", "rem", "ren", "rro", "rés", "sie", "t a", "tur", " pe", " to", "d'u", "ell", "err", "ers", "ide", "ine", "iss", "mes", "por", "ran", "sit", "st ", "t r", "uti", "vai", "é l", "ési", " di", " n'", " ét", "a c", "ass", "e t", "in ", "nde", "pre", "rat", "s m", "ste", "tai", "tch", "ui ", "uro", "ès ", " es", " fo", " tr", "'ad", "app", "aux", "e à", "ett", "iti", "lit", "nal", "opé", "r d", "ra ", "rai", "ror", "s r", "tat", "uté", "à l", " af", "anc", "ara", "art", "bre", "ché", "dre", "e f", "ens", "lem", "n r", "n t", "ndr", "nne", "onn", "pos", "s t", "tiq", "ure", " tu", "ale", "and", "ave", "cla", "cou", "e n", "emb", "ins", "jou", "mme", "rie", "rès", "sem", "str", "t i", "ues", "uni", "uve", "é d", "ée ", " ch", " do", " eu", " fa", " lo", " ne", " ra", "arl", "att", "ec ", "ica", "l a", "l'o", "l'é", "mmi", "nta", "orm", "ou ", "r u", "rle");
-$GLOBALS["ngrams"]['ha'] = array(" da", "da ", "in ", "an ", "ya ", " wa", " ya", "na ", "ar ", "a d", " ma", "wa ", "a a", "a k", "a s", " ta", "wan", " a ", " ba", " ka", "ta ", "a y", "n d", " ha", " na", " su", " sa", "kin", "sa ", "ata", " ko", "a t", "su ", " ga", "ai ", " sh", "a m", "uwa", "iya", "ma ", "a w", "asa", "yan", "ka ", "ani", "shi", "a b", "a h", "a c", "ama", "ba ", "nan", "n a", " mu", "ana", " yi", "a g", " za", "i d", " ku", "aka", "yi ", "n k", "ann", "ke ", "tar", " ci", "iki", "n s", "ko ", " ra", "ki ", "ne ", "a z", "mat", "hak", "nin", "e d", "nna", "uma", "nda", "a n", "ada", "cik", "ni ", "rin", "una", "ara", "kum", "akk", " ce", " du", "man", "n y", "nci", "sar", "aki", "awa", "ci ", "kan", "kar", "ari", "n m", "and", "hi ", "n t", "ga ", "owa", "ash", "kam", "dan", "ewa", "nsa", "ali", "ami", " ab", " do", "anc", "n r", "aya", "i n", "sun", "uka", " al", " ne", "a'a", "cew", "cin", "mas", "tak", "un ", "aba", "kow", "a r", "ra ", " ja", " ƙa", "en ", "r d", "sam", "tsa", " ru", "ce ", "i a", "abi", "ida", "mut", "n g", "n j", "san", "a ƙ", "har", "on ", "i m", "suk", " ak", " ji", "yar", "'ya", "kwa", "min", " 'y", "ane", "ban", "ins", "ruw", "i k", "n h", " ad", "ake", "n w", "sha", "utu", " ƴa", "bay", "tan", "ƴan", "bin", "duk", "e m", "n n", "oka", "yin", "ɗan", " fa", "a i", "kki", "re ", "za ", "ala", "asu", "han", "i y", "mar", "ran", "ƙas", "add", "ars", "gab", "ira", "mma", "u d", " ts", "abb", "abu", "aga", "gar", "n b", " ɗa", "aci", "aik", "am ", "dun", "e s", "i b", "i w", "kas", "kok", "wam", " am", "amf", "bba", "din", "fan", "gwa", "i s", "wat", "ano", "are", "dai", "iri", "ma'", " la", "all", "dam", "ika", "mi ", "she", "tum", "uni", " an", " ai", " ke", " ki", "dag", "mai", "mfa", "no ", "nsu", "o d", "sak", "um ", " bi", " gw", " kw", "jam", "yya", "a j", "fa ", "uta", " hu", "'a ", "ans", "aɗa", "dda", "hin", "niy", "r s", "bat", "dar", "gan", "i t", "nta", "oki", "omi", "sal", "a l", "kac", "lla", "wad", "war", "amm", "dom", "r m", "ras", "sai", " lo", "ats", "hal", "kat", "li ", "lok", "n c", "nar", "tin", "afa", "bub", "i g", "isa", "mak");
-$GLOBALS["ngrams"]['haw'] = array(" ka", "na ", " o ", "ka ", " ma", " a ", " la", "a i", "a m", " i ", "la ", "ana", "ai ", "ia ", "a o", "a k", "a h", "o k", " ke", "a a", "i k", " ho", " ia", "ua ", " na", " me", "e k", "e a", "au ", "ke ", "ma ", "mai", "aku", " ak", "ahi", " ha", " ko", " e ", "a l", " no", "me ", "ku ", "aka", "kan", "no ", "i a", "ho ", "ou ", " ai", "i o", "a p", "o l", "o a", "ama", "a n", " an", "i m", "han", "i i", "iho", "kou", "ne ", " ih", "o i", "iki", "ona", "hoo", "le ", "e h", " he", "ina", " wa", "ea ", "ako", "u i", "kah", "oe ", "i l", "u a", " pa", "hoi", "e i", "era", "ko ", "u m", "kua", "mak", "oi ", "kai", "i n", "a e", "hin", "ane", " ol", "i h", "mea", "wah", "lak", "e m", "o n", "u l", "ika", "ki ", "a w", "mal", "hi ", "e n", "u o", "hik", " ku", "e l", "ele", "ra ", "ber", "ine", "abe", "ain", "ala", "lo ", " po", "kon", " ab", "ole", "he ", "pau", "mah", "va ", "ela", "kau", "nak", " oe", "kei", "oia", " ie", "ram", " oi", "oa ", "eho", "hov", "ieh", "ova", " ua", "una", "ara", "o s", "awa", "o o", "nau", "u n", "wa ", "wai", "hel", " ae", " al", "ae ", "ta ", "aik", " hi", "ale", "ila", "lel", "ali", "eik", "olo", "onu", " lo", "aua", "e o", "ola", "hon", "mam", "nan", " au", "aha", "lau", "nua", "oho", "oma", " ao", "ii ", "alu", "ima", "mau", "ike", "apa", "elo", "lii", "poe", "aia", "noa", " in", "o m", "oka", "'u ", "aho", "ei ", "eka", "ha ", "lu ", "nei", "hol", "ino", "o e", "ema", "iwa", "olu", "ada", "naa", "pa ", "u k", "ewa", "hua", "lam", "lua", "o h", "ook", "u h", " li", "ahu", "amu", "ui ", " il", " mo", " se", "eia", "law", " hu", " ik", "ail", "e p", "li ", "lun", "uli", "io ", "kik", "noh", "u e", " sa", "aaw", "awe", "ena", "hal", "kol", "lan", " le", " ne", "a'u", "ilo", "kap", "oko", "sa ", " pe", "hop", "loa", "ope", "pe ", " ad", " pu", "ahe", "aol", "ia'", "lai", "loh", "na'", "oom", "aau", "eri", "kul", "we ", "ake", "kek", "laa", "ri ", "iku", "kak", "lim", "nah", "ner", "nui", "ono", "a u", "dam", "kum", "lok", "mua", "uma", "wal", "wi ", "'i ", "a'i", "aan", "alo", "eta", "mu ", "ohe", "u p", "ula", "uwa", " nu", "amo");
-$GLOBALS["ngrams"]['hi'] = array("ें ", " है", "में", " मे", "ने ", "की ", "के ", "है ", " के", " की", " को", "ों ", "को ", "ा ह", " का", "से ", "ा क", "े क", "ं क", "या ", " कि", " से", "का ", "ी क", " ने", " और", "और ", "ना ", "कि ", "भी ", "ी स", " जा", " पर", "ार ", " कर", "ी ह", " हो", "ही ", "िया", " इस", " रह", "र क", "ुना", "ता ", "ान ", "े स", " भी", " रा", "े ह", " चु", " पा", "पर ", "चुन", "नाव", " कह", "प्र", " भा", "राज", "हैं", "ा स", "ै क", "ैं ", "नी ", "ल क", "ीं ", "़ी ", "था ", "री ", "ाव ", "े ब", " प्", "क्ष", "पा ", "ले ", " दे", "ला ", "हा ", "ाजप", " था", " नह", "इस ", "कर ", "जपा", "नही", "भाज", "यों", "र स", "हीं", " अम", " बा", " मा", " वि", "रीक", "िए ", "े प", "्या", " ही", "ं म", "कार", "ा ज", "े ल", " ता", " दि", " सा", " हम", "ा न", "ा म", "ाक़", "्ता", " एक", " सं", " स्", "अमर", "क़ी", "ताज", "मरी", "स्थ", "ा थ", "ार्", " हु", "इरा", "एक ", "न क", "र म", "राक", "ी ज", "ी न", " इर", " उन", " पह", "कहा", "ते ", "े अ", " तो", " सु", "ति ", "ती ", "तो ", "मिल", "िक ", "ियो", "्रे", " अप", " फ़", " लि", " लो", " सम", "म क", "र्ट", "हो ", "ा च", "ाई ", "ाने", "िन ", "्य ", " उस", " क़", " सक", " सै", "ं प", "ं ह", "गी ", "त क", "मान", "र न", "ष्ट", "स क", "स्त", "ाँ ", "ी ब", "ी म", "्री", " दो", " मि", " मु", " ले", " शा", "ं स", "ज़ा", "त्र", "थी ", "लिए", "सी ", "़ा ", "़ार", "ांग", "े द", "े म", "्व ", " ना", " बन", "ंग्", "कां", "गा ", "ग्र", "जा ", "ज्य", "दी ", "न म", "पार", "भा ", "रही", "रे ", "रेस", "ली ", "सभा", "ा र", "ाल ", "ी अ", "ीकी", "े त", "ेश ", " अं", " तक", " या", "ई ह", "करन", "तक ", "देश", "वर्", "ाया", "ी भ", "ेस ", "्ष ", " गय", " जि", " थी", " बड", " यह", " वा", "ंतर", "अंत", "क़ ", "गया", "टी ", "निक", "न्ह", "पहल", "बड़", "मार", "र प", "रने", "ाज़", "ि इ", "ी र", "े ज", "े व", "्ट ", "्टी", " अब", " लग", " वर", " सी", "ं भ", "उन्", "क क", "किय", "देख", "पूर", "फ़्", "यह ", "यान", "रिक", "रिय", "र्ड", "लेक", "सकत", "हों", "होग", "ा अ", "ा द", "ा प", "ाद ", "ारा", "ित ", "ी त", "ी प", "ो क", "ो द", " ते", " नि", " सर", " हा", "ं द", "अपन", "जान", "त म", "थित", "पनी", "महल", "र ह", "लोग", "व क", "हना", "हल ", "हाँ", "ाज्", "ाना", "िक्", "िस्");
-$GLOBALS["ngrams"]['hr'] = array("je ", " na", " pr", " po", "na ", " je", " za", "ije", "ne ", " i ", "ti ", "da ", " ko", " ne", "li ", " bi", " da", " u ", "ma ", "mo ", "a n", "ih ", "za ", "a s", "ko ", "i s", "a p", "koj", "pro", "ju ", "se ", " go", "ost", "to ", "va ", " do", " to", "e n", "i p", " od", " ra", "no ", "ako", "ka ", "ni ", " ka", " se", " mo", " st", "i n", "ima", "ja ", "pri", "vat", "sta", " su", "ati", "e p", "ta ", "tsk", "e i", "nij", " tr", "cij", "jen", "nos", "o s", " iz", "om ", "tro", "ili", "iti", "pos", " al", "a i", "a o", "e s", "ija", "ini", "pre", "str", "la ", "og ", "ovo", " sv", "ekt", "nje", "o p", "odi", "rva", " ni", "ali", "min", "rij", "a t", "a z", "ats", "iva", "o t", "od ", "oje", "ra ", " hr", "a m", "a u", "hrv", "im ", "ke ", "o i", "ovi", "red", "riv", "te ", "bi ", "e o", "god", "i d", "lek", "umi", "zvo", "din", "e u", "ene", "jed", "ji ", "lje", "nog", "su ", " a ", " el", " mi", " o ", "a d", "alu", "ele", "i u", "izv", "ktr", "lum", "o d", "ori", "rad", "sto", "a k", "anj", "ava", "e k", "men", "nic", "o j", "oj ", "ove", "ski", "tvr", "una", "vor", " di", " no", " s ", " ta", " tv", "i i", "i o", "kak", "roš", "sko", "vod", " sa", " će", "a b", "adi", "amo", "eni", "gov", "iju", "ku ", "o n", "ora", "rav", "ruj", "smo", "tav", "tru", "u p", "ve ", " in", " pl", "aci", "bit", "de ", "diš", "ema", "i m", "ika", "išt", "jer", "ki ", "mog", "nik", "nov", "nu ", "oji", "oli", "pla", "pod", "st ", "sti", "tra", "tre", "vo ", " sm", " št", "dan", "e z", "i t", "io ", "ist", "kon", "lo ", "stv", "u s", "uje", "ust", "će ", "ći ", "što", " dr", " im", " li", "ada", "aft", "ani", "ao ", "ars", "ata", "e t", "emo", "i k", "ine", "jem", "kov", "lik", "lji", "mje", "naf", "ner", "nih", "nja", "ogo", "oiz", "ome", "pot", "ran", "ri ", "roi", "rtk", "ska", "ter", "u i", "u o", "vi ", "vrt", " me", " ug", "ak ", "ama", "drž", "e e", "e g", "e m", "em ", "eme", "enj", "ent", "er ", "ere", "erg", "eur", "go ", "i b", "i z", "jet", "ksi", "o u", "oda", "ona", "pra", "reb", "rem", "rop", "tri", "žav", " ci", " eu", " re", " te", " uv", " ve", "aju", "an ");
-$GLOBALS["ngrams"]['hu'] = array(" a ", " az", " sz", "az ", " me", "en ", " el", " ho", "ek ", "gy ", "tt ", "ett", "sze", " fe", "és ", " ki", "tet", " be", "et ", "ter", " kö", " és", "hog", "meg", "ogy", "szt", "te ", "t a", "zet", "a m", "nek", "nt ", "ség", "szá", "ak ", " va", "an ", "eze", "ra ", "ta ", " mi", "int", "köz", " is", "esz", "fel", "min", "nak", "ors", "zer", " te", "a a", "a k", "is ", " cs", "ele", "er ", "men", "si ", "tek", "ti ", " ne", "csa", "ent", "z e", "a t", "ala", "ere", "es ", "lom", "lte", "mon", "ond", "rsz", "sza", "tte", "zág", "ány", " fo", " ma", "ai ", "ben", "el ", "ene", "ik ", "jel", "tás", "áll", " ha", " le", " ál", "agy", "alá", "isz", "y a", "zte", "ás ", " al", "e a", "egy", "ely", "for", "lat", "lt ", "n a", "oga", "on ", "re ", "st ", "ság", "t m", "án ", "ét ", "ült", " je", "gi ", "k a", "kül", "lam", "len", "lás", "más", "s k", "vez", "áso", "özö", " ta", "a s", "a v", "asz", "atá", "ető", "kez", "let", "mag", "nem", "szé", "z m", "át ", "éte", "ölt", " de", " gy", " ké", " mo", " vá", " ér", "a b", "a f", "ami", "at ", "ato", "att", "bef", "dta", "gya", "hat", "i s", "las", "ndt", "rt ", "szo", "t k", "tár", "tés", "van", "ásá", "ól ", " bé", " eg", " or", " pá", " pé", " ve", "ban", "eke", "ekü", "elő", "erv", "ete", "fog", "i a", "kis", "lád", "nte", "nye", "nyi", "ok ", "omá", "os ", "rán", "rás", "sal", "t e", "vál", "yar", "ágo", "ála", "ége", "ény", "ött", " tá", "adó", "elh", "fej", "het", "hoz", "ill", "jár", "kés", "llo", "mi ", "ny ", "ont", "ren", "res", "rin", "s a", "s e", "ssz", "zt ", " ez", " ka", " ke", " ko", " re", "a h", "a n", "den", "dó ", "efo", "gad", "gat", "gye", "hel", "k e", "ket", "les", "mán", "nde", "nis", "ozz", "t b", "t i", "t é", "tat", "tos", "val", "z o", "zak", "ád ", "ály", "ára", "ési", "ész", " ak", " am", " es", " há", " ny", " tö", "aka", "art", "ató", "azt", "bbe", "ber", "ció", "cso", "em ", "eti", "eté", "gal", "i t", "ini", "ist", "ja ", "ker", "ki ", "kor", "koz", "l é", "ljá", "lye", "n v", "ni ", "pál", "ror", "ról", "rül", "s c", "s p", "s s", "s v", "sok", "t j", "t t", "tar", "tel", "vat");
-$GLOBALS["ngrams"]['id'] = array("an ", " me", "kan", "ang", "ng ", " pe", "men", " di", " ke", " da", " se", "eng", " be", "nga", "nya", " te", "ah ", "ber", "aka", " ya", "dan", "di ", "yan", "n p", "per", "a m", "ita", " pa", "da ", "ata", "ada", "ya ", "ta ", " in", "ala", "eri", "ia ", "a d", "n k", "am ", "ga ", "at ", "era", "n d", "ter", " ka", "a p", "ari", "emb", "n m", "ri ", " ba", "aan", "ak ", "ra ", " it", "ara", "ela", "ni ", "ali", "ran", "ar ", "eru", "lah", "a b", "asi", "awa", "eba", "gan", "n b", " ha", "ini", "mer", " la", " mi", "and", "ena", "wan", " sa", "aha", "lam", "n i", "nda", " wa", "a i", "dua", "g m", "mi ", "n a", "rus", "tel", "yak", " an", "dal", "h d", "i s", "ing", "min", "ngg", "tak", "ami", "beb", "den", "gat", "ian", "ih ", "pad", "rga", "san", "ua ", " de", "a t", "arg", "dar", "elu", "har", "i k", "i m", "i p", "ika", "in ", "iny", "itu", "mba", "n t", "ntu", "pan", "pen", "sah", "tan", "tu ", "a k", "ban", "edu", "eka", "g d", "ka ", "ker", "nde", "nta", "ora", "usa", " du", " ma", "a s", "ai ", "ant", "bas", "end", "i d", "ira", "kam", "lan", "n s", "uli", "al ", "apa", "ere", "ert", "lia", "mem", "rka", "si ", "tal", "ung", " ak", "a a", "a w", "ani", "ask", "ent", "gar", "haa", "i i", "isa", "ked", "mbe", "ska", "tor", "uan", "uk ", "uka", " ad", " to", "asa", "aya", "bag", "dia", "dun", "erj", "mas", "na ", "rek", "rit", "sih", "us ", " bi", "a h", "ama", "dib", "ers", "g s", "han", "ik ", "kem", "ma ", "n l", "nit", "r b", "rja", "sa ", " ju", " or", " si", " ti", "a y", "aga", "any", "as ", "cul", "eme", "emu", "eny", "epa", "erb", "erl", "gi ", "h m", "i a", "kel", "li ", "mel", "nia", "opa", "rta", "sia", "tah", "ula", "un ", "unt", " at", " bu", " pu", " ta", "agi", "alu", "amb", "bah", "bis", "er ", "i t", "ibe", "ir ", "ja ", "k m", "kar", "lai", "lal", "lu ", "mpa", "ngk", "nja", "or ", "pa ", "pas", "pem", "rak", "rik", "seb", "tam", "tem", "top", "tuk", "uni", "war", " al", " ga", " ge", " ir", " ja", " mu", " na", " pr", " su", " un", "ad ", "adi", "akt", "ann", "apo", "bel", "bul", "der", "ega", "eke", "ema", "emp", "ene", "enj", "esa");
-$GLOBALS["ngrams"]['is'] = array("að ", "um ", " að", "ir ", "ið ", "ur ", " ve", " í ", "na ", " á ", " se", " er", " og", "ar ", "og ", "ver", " mi", "inn", "nn ", " fy", "er ", "fyr", " ek", " en", " ha", " he", "ekk", " st", "ki ", "st ", "ði ", " ba", " me", " vi", "ig ", "rir", "yri", " um", "g f", "leg", "lei", "ns ", "ð s", " ei", " þa", "in ", "kki", "r h", "r s", "egi", "ein", "ga ", "ing", "ra ", "sta", " va", " þe", "ann", "en ", "mil", "sem", "tjó", "arð", "di ", "eit", "haf", "ill", "ins", "ist", "llj", "ndi", "r a", "r e", "seg", "un ", "var", " bi", " el", " fo", " ge", " yf", "and", "aug", "bau", "big", "ega", "eld", "erð", "fir", "foo", "gin", "itt", "n s", "ngi", "num", "od ", "ood", "sin", "ta ", "tt ", "við", "yfi", "ð e", "ð f", " hr", " sé", " þv", "a e", "a á", "em ", "gi ", "i f", "jar", "jór", "lja", "m e", "r á", "rei", "rst", "rða", "rði", "rðu", "stj", "und", "veg", "ví ", "ð v", "það", "því", " fj", " ko", " sl", "eik", "end", "ert", "ess", "fjá", "fur", "gir", "hús", "jár", "n e", "ri ", "tar", "ð þ", "ðar", "ður", "þes", " br", " hú", " kr", " le", " up", "a s", "egg", "i s", "irt", "ja ", "kið", "len", "með", "mik", "n b", "nar", "nir", "nun", "r f", "r v", "rið", "rt ", "sti", "t v", "ti ", "una", "upp", "ða ", "óna", " al", " fr", " gr", "a v", "all", "an ", "da ", "eið", "eð ", "fa ", "fra", "g e", "ger", "gið", "gt ", "han", "hef", "hel", "her", "hra", "i a", "i e", "i v", "i þ", "iki", "jón", "jör", "ka ", "kró", "lík", "m h", "n a", "nga", "r l", "ram", "ru ", "ráð", "rón", "svo", "vin", "í b", "í h", "ð h", "ð k", "ð m", "örð", " af", " fa", " lí", " rá", " sk", " sv", " te", "a b", "a f", "a h", "a k", "a u", "afi", "agn", "arn", "ast", "ber", "efu", "enn", "erb", "erg", "fi ", "g a", "gar", "iðs", "ker", "kke", "lan", "ljó", "llt", "ma ", "mið", "n v", "n í", "nan", "nda", "ndu", "nið", "nna", "nnu", "nu ", "r o", "rbe", "rgi", "slö", "sé ", "t a", "t h", "til", "tin", "ugu", "vil", "ygg", "á s", "ð a", "ð b", "órn", "ögn", "öku", " at", " fi", " fé", " ka", " ma", " no", " sa", " si", " ti", " ák", "a m", "a t", "a í", "a þ", "afa", "afs", "ald", "arf");
-$GLOBALS["ngrams"]['it'] = array(" di", "to ", "la ", " de", "di ", "no ", " co", "re ", "ion", "e d", " e ", "le ", "del", "ne ", "ti ", "ell", " la", " un", "ni ", "i d", "per", " pe", "ent", " in", "one", "he ", "ta ", "zio", "che", "o d", "a d", "na ", "ato", "e s", " so", "i s", "lla", "a p", "li ", "te ", " al", " ch", "er ", " pa", " si", "con", "sta", " pr", "a c", " se", "el ", "ia ", "si ", "e p", " da", "e i", "i p", "ont", "ano", "i c", "all", "azi", "nte", "on ", "nti", "o s", " ri", "i a", "o a", "un ", " an", "are", "ari", "e a", "i e", "ita", "men", "ri ", " ca", " il", " no", " po", "a s", "ant", "il ", "in ", "a l", "ati", "cia", "e c", "ro ", "ann", "est", "gli", "tà ", " qu", "e l", "nta", " a ", "com", "o c", "ra ", " le", " ne", "ali", "ere", "ist", " ma", " è ", "io ", "lle", "me ", "era", "ica", "ost", "pro", "tar", "una", " pi", "da ", "tat", " mi", "att", "ca ", "mo ", "non", "par", "sti", " fa", " i ", " re", " su", "ess", "ini", "nto", "o l", "ssi", "tto", "a e", "ame", "col", "ei ", "ma ", "o i", "za ", " st", "a a", "ale", "anc", "ani", "i m", "ian", "o p", "oni", "sio", "tan", "tti", " lo", "i r", "oci", "oli", "ona", "ono", "tra", " l ", "a r", "eri", "ett", "lo ", "nza", "que", "str", "ter", "tta", " ba", " li", " te", "ass", "e f", "enz", "for", "nno", "olo", "ori", "res", "tor", " ci", " vo", "a i", "al ", "chi", "e n", "lia", "pre", "ria", "uni", "ver", " sp", "imo", "l a", "l c", "ran", "sen", "soc", "tic", " fi", " mo", "a n", "ce ", "dei", "ggi", "gio", "iti", "l s", "lit", "ll ", "mon", "ola", "pac", "sim", "tit", "utt", "vol", " ar", " fo", " ha", " sa", "acc", "e r", "ire", "man", "ntr", "rat", "sco", "tro", "tut", "va ", " do", " gi", " me", " sc", " tu", " ve", " vi", "a m", "ber", "can", "cit", "i l", "ier", "ità", "lli", "min", "n p", "nat", "nda", "o e", "o f", "o u", "ore", "oro", "ort", "sto", "ten", "tiv", "van", "art", "cco", "ci ", "cos", "dal", "e v", "i i", "ila", "ino", "l p", "n c", "nit", "ole", "ome", "po ", "rio", "sa ", " ce", " es", " tr", "a b", "and", "ata", "der", "ens", "ers", "gi ", "ial", "ina", "itt", "izi", "lan", "lor", "mil");
-$GLOBALS["ngrams"]['kk'] = array("ан ", "ен ", "ың ", " қа", " ба", "ай ", "нда", "ын ", " са", " ал", "ді ", "ары", "ды ", "ып ", " мұ", " бі", "асы", "да ", "най", " жа", "мұн", "ста", "ған", "н б", "ұна", " бо", "ның", "ін ", "лар", "сын", " де", "аға", "тан", " кө", "бір", "ер ", "мен", "аза", "ынд", "ыны", " ме", "анд", "ері", "бол", "дың", "қаз", "аты", "сы ", "тын", "ғы ", " ке", "ар ", "зақ", "ық ", "ала", "алы", "аны", "ара", "ағы", "ген", "тар", "тер", "тыр", "айд", "ард", "де ", "ға ", " қо", "бар", "ің ", "қан", " бе", " қы", "ақс", "гер", "дан", "дар", "лық", "лға", "ына", "ір ", "ірі", "ғас", " та", "а б", "гі ", "еді", "еле", "йды", "н к", "н т", "ола", "рын", "іп ", "қст", "қта", "ң б", " ай", " ол", " со", "айт", "дағ", "иге", "лер", "лып", "н а", "ік ", "ақт", "бағ", "кен", "н қ", "ны ", "рге", "рға", "ыр ", " ар", "алғ", "аса", "бас", "бер", "ге ", "еті", "на ", "нде", "не ", "ниг", "рды", "ры ", "сай", " ау", " кү", " ни", " от", " өз", "ауд", "еп ", "иял", "лты", "н ж", "н о", "осы", "оты", "рып", "рі ", "тке", "ты ", "ы б", "ы ж", "ылы", "ысы", "і с", "қар", " бұ", " да", " же", " тұ", " құ", "ады", "айл", "ап ", "ата", "ені", "йла", "н м", "н с", "нды", "нді", "р м", "тай", "тін", "ы т", "ыс ", "інд", " би", "а ж", "ауы", "деп", "дің", "еке", "ери", "йын", "кел", "лды", "ма ", "нан", "оны", "п ж", "п о", "р б", "рия", "рла", "уда", "шыл", "ы а", "ықт", "і а", "і б", "із ", "ілі", "ң қ", " ас", " ек", " жо", " мә", " ос", " ре", " се", "алд", "дал", "дег", "дей", "е б", "ет ", "жас", "й б", "лау", "лда", "мет", "нын", "сар", "сі ", "ті ", "ыры", "ыта", "ісі", "ң а", "өте", " ат", " ел", " жү", " ма", " то", " шы", "а а", "алт", "ама", "арл", "аст", "бұл", "дай", "дық", "ек ", "ель", "есі", "зді", "көт", "лем", "ль ", "н е", "п а", "р а", "рес", "са ", "та ", "тте", "тұр", "шы ", "ы д", "ы қ", "ыз ", "қыт", " ко", " не", " ой", " ор", " сұ", " тү", "аль", "аре", "атт", "дір", "ев ", "егі", "еда", "екі", "елд", "ерг", "ерд", "ияд", "кер", "кет", "лыс", "ліс", "мед", "мпи", "н д", "ні ", "нін", "п т", "пек", "рел", "рта", "ріл", "рін", "сен", "тал", "шіл", "ы к", "ы м", "ыст");
-$GLOBALS["ngrams"]['ky'] = array("ын ", "ан ", " жа", "ен ", "да ", " та", "ар ", "ин ", " ка", "ары", " ал", " ба", " би", "лар", " бо", " кы", "ала", "н к", " са", "нда", "ган", "тар", " де", "анд", "н б", " ке", "ард", "мен", "н т", "ара", "нын", " да", " ме", "кыр", " че", "н а", "ры ", " ко", "ген", "дар", "кен", "кта", "уу ", "ене", "ери", " ша", "алы", "ат ", "на ", " кө", " эм", "аты", "дан", "деп", "дын", "еп ", "нен", "рын", " бе", "кан", "луу", "ргы", "тан", "шай", "ырг", "үн ", " ар", " ма", "агы", "акт", "аны", "гы ", "гыз", "ды ", "рда", "ай ", "бир", "бол", "ер ", "н с", "нды", "ун ", "ча ", "ынд", "а к", "ага", "айл", "ана", "ап ", "га ", "лге", "нча", "п к", "рды", "туу", "ыны", " ан", " өз", "ама", "ата", "дин", "йт ", "лга", "лоо", "оо ", "ри ", "тин", "ыз ", "ып ", "өрү", " па", " эк", "а б", "алг", "асы", "ашт", "биз", "кел", "кте", "тал", " не", " су", "акы", "ент", "инд", "ир ", "кал", "н д", "нде", "ого", "онд", "оюн", "р б", "р м", "ран", "сал", "ста", "сы ", "ура", "ыгы", " аш", " ми", " сы", " ту", "ал ", "арт", "бор", "елг", "ени", "ет ", "жат", "йло", "кар", "н м", "огу", "п а", "п ж", "р э", "сын", "ык ", "юнч", " бу", " ур", "а а", "ак ", "алд", "алу", "бар", "бер", "бою", "ге ", "дон", "еги", "ект", "ефт", "из ", "кат", "лды", "н ч", "н э", "н ө", "ндо", "неф", "он ", "сат", "тор", "ты ", "уда", "ул ", "ула", "ууд", "ы б", "ы ж", "ы к", "ыл ", "ына", "эке", "ясы", " ат", " до", " жы", " со", " чы", "аас", "айт", "аст", "баа", "баш", "гар", "гын", "дө ", "е б", "ек ", "жыл", "и б", "ик ", "ияс", "кыз", "лда", "лык", "мда", "н ж", "нди", "ни ", "нин", "орд", "рдо", "сто", "та ", "тер", "тти", "тур", "тын", "уп ", "ушу", "фти", "ыкт", "үп ", "өн ", " ай", " бү", " ич", " иш", " мо", " пр", " ре", " өк", " өт", "а д", "а у", "а э", "айм", "амд", "атт", "бек", "бул", "гол", "дег", "еге", "ейт", "еле", "енд", "жак", "и к", "ини", "ири", "йма", "кто", "лик", "мак", "мес", "н у", "н ш", "нтт", "ол ", "оло", "пар", "рак", "рүү", "сыр", "ти ", "тик", "тта", "төр", "у ж", "у с", "шка", "ы м", "ызы", "ылд", "эме", "үрү", "өлү", "өтө", " же", " тү", " эл", " өн", "а ж", "ады");
-$GLOBALS["ngrams"]['la'] = array("um ", "us ", "ut ", "et ", "is ", " et", " in", " qu", "tur", " pr", "est", "tio", " au", "am ", "em ", "aut", " di", "ent", "in ", "dic", "t e", " es", "ur ", "ati", "ion", "st ", " ut", "ae ", "qua", " de", "nt ", " su", " si", "itu", "unt", "rum", "ia ", "es ", "ter", " re", "nti", "rae", "s e", "qui", "io ", "pro", "it ", "per", "ita", "one", "ici", "ius", " co", "t d", "bus", "pra", "m e", " no", "edi", "tia", "ue ", "ibu", " se", " ad", "er ", " fi", "ili", "que", "t i", "de ", "oru", " te", "ali", " pe", "aed", "cit", "m d", "t s", "tat", "tem", "tis", "t p", "sti", "te ", "cum", "ere", "ium", " ex", "rat", "ta ", "con", "cti", "oni", "ra ", "s i", " cu", " sa", "eni", "nis", "nte", "eri", "omi", "re ", "s a", "min", "os ", "ti ", "uer", " ma", " ue", "m s", "nem", "t m", " mo", " po", " ui", "gen", "ict", "m i", "ris", "s s", "t a", "uae", " do", "m a", "t c", " ge", "as ", "e i", "e p", "ne ", " ca", "ine", "quo", "s p", " al", "e e", "ntu", "ro ", "tri", "tus", "uit", "atu", "ini", "iqu", "m p", "ost", "res", "ura", " ac", " fu", "a e", "ant", "nes", "nim", "sun", "tra", "e a", "s d", " pa", " uo", "ecu", " om", " tu", "ad ", "cut", "omn", "s q", " ei", "ex ", "icu", "tor", "uid", " ip", " me", "e s", "era", "eru", "iam", "ide", "ips", " iu", "a s", "do ", "e d", "eiu", "ica", "im ", "m c", "m u", "tiu", " ho", "cat", "ist", "nat", "on ", "pti", "reg", "rit", "s t", "sic", "spe", " en", " sp", "dis", "eli", "liq", "lis", "men", "mus", "num", "pos", "sio", " an", " gr", "abi", "acc", "ect", "ri ", "uan", " le", "ecc", "ete", "gra", "non", "se ", "uen", "uis", " fa", " tr", "ate", "e c", "fil", "na ", "ni ", "pul", "s f", "ui ", "at ", "cce", "dam", "i e", "ina", "leg", "nos", "ori", "pec", "rop", "sta", "uia", "ene", "iue", "iui", "siu", "t t", "t u", "tib", "tit", " da", " ne", "a d", "and", "ege", "equ", "hom", "imu", "lor", "m m", "mni", "ndo", "ner", "o e", "r e", "sit", "tum", "utu", "a p", "bis", "bit", "cer", "cta", "dom", "fut", "i s", "ign", "int", "mod", "ndu", "nit", "rib", "rti", "tas", "und", " ab", "err", "ers", "ite", "iti", "m t", "o p");
-$GLOBALS["ngrams"]['lt'] = array("as ", " pa", " ka", "ai ", "us ", "os ", "is ", " ne", " ir", "ir ", "ti ", " pr", "aus", "ini", "s p", "pas", "ių ", " ta", " vi", "iau", " ko", " su", "kai", "o p", "usi", " sa", "vo ", "tai", "ali", "tų ", "io ", "jo ", "s k", "sta", "iai", " bu", " nu", "ius", "mo ", " po", "ien", "s s", "tas", " me", "uvo", "kad", " iš", " la", "to ", "ais", "ie ", "kur", "uri", " ku", "ijo", "čia", "au ", "met", "je ", " va", "ad ", " ap", "and", " gr", " ti", "kal", "asi", "i p", "iči", "s i", "s v", "ink", "o n", "ės ", "buv", "s a", " ga", "aip", "avi", "mas", "pri", "tik", " re", "etu", "jos", " da", "ent", "oli", "par", "ant", "ara", "tar", "ama", "gal", "imo", "išk", "o s", " at", " be", " į ", "min", "tin", " tu", "s n", " jo", "dar", "ip ", "rei", " te", "dži", "kas", "nin", "tei", "vie", " li", " se", "cij", "gar", "lai", "art", "lau", "ras", "no ", "o k", "tą ", " ar", "ėjo", "vič", "iga", "pra", "vis", " na", "men", "oki", "raš", "s t", "iet", "ika", "int", "kom", "tam", "aug", "avo", "rie", "s b", " st", "eim", "ko ", "nus", "pol", "ria", "sau", "api", "me ", "ne ", "sik", " ši", "i n", "ia ", "ici", "oja", "sak", "sti", "ui ", "ame", "lie", "o t", "pie", "čiu", " di", " pe", "gri", "ios", "lia", "lin", "s d", "s g", "ta ", "uot", " ja", " už", "aut", "i s", "ino", "mą ", "oje", "rav", "dėl", "nti", "o a", "toj", "ėl ", " to", " vy", "ar ", "ina", "lic", "o v", "sei", "su ", " mi", " pi", "din", "iš ", "lan", "si ", "tus", " ba", "asa", "ata", "kla", "omi", "tat", " an", " ji", "als", "ena", "jų ", "nuo", "per", "rig", "s m", "val", "yta", "čio", " ra", "i k", "lik", "net", "nė ", "tis", "tuo", "yti", "ęs ", "ų s", "ada", "ari", "do ", "eik", "eis", "ist", "lst", "ma ", "nes", "sav", "sio", "tau", " ki", "aik", "aud", "ies", "ori", "s r", "ska", " ge", "ast", "eig", "et ", "iam", "isa", "mis", "nam", "ome", "žia", "aba", "aul", "ikr", "ką ", "nta", "ra ", "tur", " ma", "die", "ei ", "i t", "nas", "rin", "sto", "tie", "tuv", "vos", "ų p", " dė", "are", "ats", "enė", "ili", "ima", "kar", "ms ", "nia", "r p", "rod", "s l", " o ", "e p", "es ", "ide", "ik ", "ja ");
-$GLOBALS["ngrams"]['lv'] = array("as ", " la", " pa", " ne", "es ", " un", "un ", " ka", " va", "ar ", "s p", " ar", " vi", "is ", "ai ", " no", "ja ", "ija", "iem", "em ", "tu ", "tie", "vie", "lat", "aks", "ien", "kst", "ies", "s a", "rak", "atv", "tvi", " ja", " pi", "ka ", " ir", "ir ", "ta ", " sa", "ts ", " kā", "ās ", " ti", "ot ", "s n", " ie", " ta", "arī", "par", "pie", " pr", "kā ", " at", " ra", "am ", "inā", "tā ", " iz", "jas", "lai", " na", "aut", "ieš", "s s", " ap", " ko", " st", "iek", "iet", "jau", "us ", "rī ", "tik", "ība", "na ", " ga", "cij", "s i", " uz", "jum", "s v", "ms ", "var", " ku", " ma", "jā ", "sta", "s u", " tā", "die", "kai", "kas", "ska", " ci", " da", "kur", "lie", "tas", "a p", "est", "stā", "šan", "nes", "nie", "s d", "s m", "val", " di", " es", " re", "no ", "to ", "umu", "vai", "ši ", " vē", "kum", "nu ", "rie", "s t", "ām ", "ad ", "et ", "mu ", "s l", " be", "aud", "tur", "vij", "viņ", "āju", "bas", "gad", "i n", "ika", "os ", "a v", "not", "oti", "sts", "aik", "u a", "ā a", "āk ", " to", "ied", "stu", "ti ", "u p", "vēl", "āci", " šo", "gi ", "ko ", "pro", "s r", "tāj", "u s", "u v", "vis", "aun", "ks ", "str", "zin", "a a", "adī", "da ", "dar", "ena", "ici", "kra", "nas", "stī", "šu ", " mē", "a n", "eci", "i s", "ie ", "iņa", "ju ", "las", "r t", "ums", "šie", "bu ", "cit", "i a", "ina", "ma ", "pus", "ra ", " au", " se", " sl", "a s", "ais", "eši", "iec", "iku", "pār", "s b", "s k", "sot", "ādā", " in", " li", " tr", "ana", "eso", "ikr", "man", "ne ", "u k", " tu", "an ", "av ", "bet", "būt", "im ", "isk", "līd", "nav", "ras", "ri ", "s g", "sti", "īdz", " ai", "arb", "cin", "das", "ent", "gal", "i p", "lik", "mā ", "nek", "pat", "rēt", "si ", "tra", "uši", "vei", " br", " pu", " sk", "als", "ama", "edz", "eka", "ešu", "ieg", "jis", "kam", "lst", "nāk", "oli", "pre", "pēc", "rot", "tās", "usi", "ēl ", "ēs ", " bi", " de", " me", " pā", "a i", "aid", "ajā", "ikt", "kat", "lic", "lod", "mi ", "ni ", "pri", "rād", "rīg", "sim", "trā", "u l", "uto", "uz ", "ēc ", "ītā", " ce", " jā", " sv", "a t", "aga", "aiz", "atu", "ba ", "cie", "du ", "dzi", "dzī");
-$GLOBALS["ngrams"]['mk'] = array("на ", " на", "та ", "ата", "ија", " пр", "то ", "ја ", " за", "а н", " и ", "а с", "те ", "ите", " ко", "от ", " де", " по", "а д", "во ", "за ", " во", " од", " се", " не", "се ", " до", "а в", "ка ", "ање", "а п", "о п", "ува", "циј", "а о", "ици", "ето", "о н", "ани", "ни ", " вл", "дек", "ека", "њет", "ќе ", " е ", "а з", "а и", "ат ", "вла", "го ", "е н", "од ", "пре", " го", " да", " ма", " ре", " ќе", "али", "и д", "и н", "иот", "нат", "ово", " па", " ра", " со", "ове", "пра", "што", "ње ", "а е", "да ", "дат", "дон", "е в", "е д", "е з", "е с", "кон", "нит", "но ", "они", "ото", "пар", "при", "ста", "т н", " шт", "а к", "аци", "ва ", "вањ", "е п", "ени", "ла ", "лад", "мак", "нес", "нос", "про", "рен", "јат", " ин", " ме", " то", "а г", "а м", "а р", "аке", "ако", "вор", "гов", "едо", "ена", "и и", "ира", "кед", "не ", "ниц", "ниј", "ост", "ра ", "рат", "ред", "ска", "тен", " ка", " сп", " ја", "а т", "аде", "арт", "е г", "е и", "кат", "лас", "нио", "о с", "ри ", " ба", " би", "ава", "ате", "вни", "д н", "ден", "дов", "држ", "дув", "е о", "ен ", "ере", "ери", "и п", "и с", "ина", "кој", "нци", "о м", "о о", "одн", "пор", "ски", "спо", "ств", "сти", "тво", "ти ", " об", " ов", "а б", "алн", "ара", "бар", "е к", "ед ", "ент", "еѓу", "и о", "ии ", "меѓ", "о д", "оја", "пот", "раз", "раш", "спр", "сто", "т д", "ци ", " бе", " гр", " др", " из", " ст", "аа ", "бид", "вед", "гла", "еко", "енд", "есе", "етс", "зац", "и т", "иза", "инс", "ист", "ки ", "ков", "кол", "ку ", "лиц", "о з", "о и", "ова", "олк", "оре", "ори", "под", "рањ", "реф", "ржа", "ров", "рти", "со ", "тор", "фер", "цен", "цит", " а ", " вр", " гл", " дп", " мо", " ни", " но", " оп", " от", "а ќ", "або", "ада", "аса", "аша", "ба ", "бот", "ваа", "ват", "вот", "ги ", "гра", "де ", "дин", "дум", "евр", "еду", "ено", "ера", "ес ", "ење", "же ", "зак", "и в", "ила", "иту", "коа", "кои", "лан", "лку", "лож", "мот", "нду", "нст", "о в", "оа ", "оал", "обр", "ов ", "ови", "овн", "ои ", "ор ", "орм", "ој ", "рет", "сед", "ст ", "тер", "тиј", "тоа", "фор", "ции", "ѓу ", " ал", " ве", " вм", " ги", " ду");
-$GLOBALS["ngrams"]['mn'] = array("ын ", " ба", "йн ", "бай", "ийн", "уул", " ул", "улс", "ан ", " ха", "ний", "н х", "гаа", "сын", "ий ", "лсы", " бо", "й б", "эн ", "ах ", "бол", "ол ", "н б", "оло", " хэ", "онг", "гол", "гуу", "нго", "ыг ", "жил", " мо", "лаг", "лла", "мон", " тє", " ху", "айд", "ны ", "он ", "сан", "хий", " аж", " ор", "л у", "н т", "улг", "айг", "длы", "йг ", " за", "дэс", "н а", "ндэ", "ула", "ээ ", "ага", "ийг", "vй ", "аа ", "й а", "лын", "н з", " аю", " зє", "аар", "ад ", "ар ", "гvй", "зєв", "ажи", "ал ", "аюу", "г х", "лгv", "лж ", "сни", "эсн", "юул", "йдл", "лыг", "нхи", "ууд", "хам", " нэ", " са", "гий", "лах", "лєл", "рєн", "єгч", " та", "илл", "лий", "лэх", "рий", "эх ", " ер", " эр", "влє", "ерє", "ийл", "лон", "лєг", "євл", "єнх", " хо", "ари", "их ", "хан", "эр ", "єн ", "vvл", "ж б", "тэй", "х х", "эрх", " vн", " нь", "vнд", "алт", "йлє", "нь ", "тєр", " га", " су", "аан", "даа", "илц", "йгу", "л а", "лаа", "н н", "руу", "эй ", " то", "н с", "рил", "єри", "ааг", "гч ", "лээ", "н о", "рэг", "суу", "эрэ", "їїл", " yн", " бу", " дэ", " ол", " ту", " ши", "yнд", "аши", "г т", "иг ", "йл ", "хар", "шин", "эг ", "єр ", " их", " хє", " хї", "ам ", "анг", "ин ", "йга", "лса", "н v", "н е", "нал", "нд ", "хуу", "цаа", "эд ", "ээр", "єл ", "vйл", "ада", "айн", "ала", "амт", "гах", "д х", "дал", "зар", "л б", "лан", "н д", "сэн", "улл", "х б", "хэр", " бv", " да", " зо", "vрэ", "аад", "гээ", "лэн", "н и", "н э", "нга", "нэ ", "тал", "тын", "хур", "эл ", " на", " ни", " он", "vлэ", "аг ", "аж ", "ай ", "ата", "бар", "г б", "гад", "гїй", "й х", "лт ", "н м", "на ", "оро", "уль", "чин", "эж ", "энэ", "ээд", "їй ", "їлэ", " би", " тэ", " эн", "аны", "дий", "дээ", "лал", "лга", "лд ", "лог", "ль ", "н у", "н ї", "р б", "рал", "сон", "тай", "удл", "элт", "эрг", "єлє", " vй", " в ", " гэ", " хv", "ара", "бvр", "д н", "д о", "л х", "лс ", "лты", "н г", "нэг", "огт", "олы", "оёр", "р т", "рээ", "тав", "тог", "уур", "хоё", "хэл", "хээ", "элэ", "ёр ", " ав", " ас", " аш", " ду", " со", " чи", " эв", " єр", "аал", "алд", "амж", "анд", "асу", "вэр", "г у", "двэ", "жvv", "лца", "лэл");
-$GLOBALS["ngrams"]['nb'] = array("er ", "en ", "et ", " de", "det", " i ", "for", "il ", " fo", " me", "ing", "om ", " ha", " og", "ter", " er", " ti", " st", "og ", "til", "ne ", " vi", "re ", " en", " se", "te ", "or ", "de ", "kke", "ke ", "ar ", "ng ", "r s", "ene", " so", "e s", "der", "an ", "som", "ste", "at ", "ed ", "r i", " av", " in", "men", " at", " ko", " på", "har", " si", "ere", "på ", "nde", "and", "els", "ett", "tte", "lig", "t s", "den", "t i", "ikk", "med", "n s", "rt ", "ser", "ska", "t e", "ker", "sen", "av ", "ler", "r a", "ten", "e f", "r e", "r t", "ede", "ig ", " re", "han", "lle", "ner", " bl", " fr", "le ", " ve", "e t", "lan", "mme", "nge", " be", " ik", " om", " å ", "ell", "sel", "sta", "ver", " et", " sk", "nte", "one", "ore", "r d", "ske", " an", " la", "del", "gen", "nin", "r f", "r v", "se ", " po", "ir ", "jon", "mer", "nen", "omm", "sjo", " fl", " sa", "ern", "kom", "r m", "r o", "ren", "vil", "ale", "es ", "n a", "t f", " le", "bli", "e e", "e i", "e v", "het", "ye ", " ir", "al ", "e o", "ide", "iti", "lit", "nne", "ran", "t o", "tal", "tat", "tt ", " ka", "ans", "asj", "ge ", "inn", "kon", "lse", "pet", "t d", "vi ", " ut", "ent", "eri", "oli", "r p", "ret", "ris", "sto", "str", "t a", " ga", "all", "ape", "g s", "ill", "ira", "kap", "nn ", "opp", "r h", "rin", " br", " op", "e m", "ert", "ger", "ion", "kal", "lsk", "nes", " gj", " mi", " pr", "ang", "e h", "e r", "elt", "enn", "i s", "ist", "jen", "kan", "lt ", "nal", "res", "tor", "ass", "dre", "e b", "e p", "mel", "n t", "nse", "ort", "per", "reg", "sje", "t p", "t v", " hv", " nå", " va", "ann", "ato", "e a", "est", "ise", "isk", "oil", "ord", "pol", "ra ", "rak", "sse", "toi", " gr", "ak ", "eg ", "ele", "g a", "ige", "igh", "m e", "n f", "n v", "ndr", "nsk", "rer", "t m", "und", "var", "år ", " he", " no", " ny", "end", "ete", "fly", "g i", "ghe", "ier", "ind", "int", "lin", "n d", "n p", "rne", "sak", "sie", "t b", "tid", " al", " pa", " tr", "ag ", "dig", "e d", "e k", "ess", "hol", "i d", "lag", "led", "n e", "n i", "n o", "pri", "r b", "st ", " fe", " li", " ry", "air", "ake", "d s", "eas", "egi");
-$GLOBALS["ngrams"]['ne'] = array("को ", "का ", "मा ", "हरु", " ने", "नेप", "पाल", "ेपा", " सम", "ले ", " प्", "प्र", "कार", "ा स", "एको", " भए", " छ ", " भा", "्रम", " गर", "रुक", " र ", "भार", "ारत", " का", " वि", "भएक", "ाली", "ली ", "ा प", "ीहर", "ार्", "ो छ", "ना ", "रु ", "ालक", "्या", " बा", "एका", "ने ", "न्त", "ा ब", "ाको", "ार ", "ा भ", "ाहर", "्रो", "क्ष", "न् ", "ारी", " नि", "ा न", "ी स", " डु", "क्र", "जना", "यो ", "ा छ", "ेवा", "्ता", " रा", "त्य", "न्द", "हुन", "ा क", "ामा", "ी न", "्दा", " से", "छन्", "म्ब", "रोत", "सेव", "स्त", "स्र", "ेका", "्त ", " बी", " हु", "क्त", "त्र", "रत ", "र्न", "र्य", "ा र", "ाका", "ुको", " एक", " सं", " सु", "बीब", "बीस", "लको", "स्य", "ीबी", "ीसी", "ेको", "ो स", "्यक", " छन", " जन", " बि", " मु", " स्", "गर्", "ताह", "न्ध", "बार", "मन्", "मस्", "रुल", "लाई", "ा व", "ाई ", "ाल ", "िका", " त्", " मा", " यस", " रु", "ताक", "बन्", "र ब", "रण ", "रुप", "रेक", "ष्ट", "सम्", "सी ", "ाएक", "ुका", "ुक्", " अध", " अन", " तथ", " थि", " दे", " पर", " बै", "तथा", "ता ", "दा ", "द्द", "नी ", "बाट", "यक्", "री ", "रीह", "र्म", "लका", "समस", "ा अ", "ा ए", "ाट ", "िय ", "ो प", "ो म", "्न ", "्ने", "्षा", " पा", " यो", " हा", "अधि", "डुव", "त भ", "त स", "था ", "धिक", "पमा", "बैठ", "मुद", "या ", "युक", "र न", "रति", "वान", "सार", "ा आ", "ा ज", "ा ह", "ुद्", "ुपम", "ुले", "ुवा", "ैठक", "ो ब", "्तर", "्य ", "्यस", " क्", " मन", " रह", "चार", "तिय", "दै ", "निर", "नु ", "पर्", "रक्", "र्द", "समा", "सुर", "ाउन", "ान ", "ानम", "ारण", "ाले", "ि ब", "ियो", "ुन्", "ुरक", "्त्", "्बन", "्रा", "्ष ", " आर", " जल", " बे", " या", " सा", "आएक", "एक ", "कर्", "जलस", "णका", "त र", "द्र", "धान", "धि ", "नका", "नमा", "नि ", "ममा", "रम ", "रहे", "राज", "लस्", "ला ", "वार", "सका", "हिल", "हेक", "ा त", "ारे", "िन्", "िस्", "े स", "ो न", "ो र", "ोत ", "्धि", "्मी", "्रस", " दु", " पन", " बत", " बन", " भन", "ंयु", "आरम", "खि ", "ण्ड", "तका", "ताल", "दी ", "देख", "निय", "पनि", "प्त", "बता", "मी ", "म्भ", "र स", "रम्", "लमा", "विश", "षाक", "संय", "ा ड", "ा म", "ानक", "ालम", "ि भ", "ित ", "ी प", "ी र", "ु भ", "ुने", "े ग", "ेखि", "ेर ", "ो भ", "ो व", "ो ह", "्भ ", "्र ", " ता", " नम", " ना");
-$GLOBALS["ngrams"]['nl'] = array("en ", "de ", " de", "et ", "an ", " he", "er ", " va", "n d", "van", "een", "het", " ge", "oor", " ee", "der", " en", "ij ", "aar", "gen", "te ", "ver", " in", " me", "aan", "den", " we", "at ", "in ", " da", " te", "eer", "nde", "ter", "ste", "n v", " vo", " zi", "ing", "n h", "voo", "is ", " op", "tie", " aa", "ede", "erd", "ers", " be", "eme", "ten", "ken", "n e", " ni", " ve", "ent", "ijn", "jn ", "mee", "iet", "n w", "ng ", "nie", " is", "cht", "dat", "ere", "ie ", "ijk", "n b", "rde", "ar ", "e b", "e a", "met", "t d", "el ", "ond", "t h", " al", "e w", "op ", "ren", " di", " on", "al ", "and", "bij", "zij", " bi", " hi", " wi", "or ", "r d", "t v", " wa", "e h", "lle", "rt ", "ang", "hij", "men", "n a", "n z", "rs ", " om", "e o", "e v", "end", "est", "n t", "par", " pa", " pr", " ze", "e g", "e p", "n p", "ord", "oud", "raa", "sch", "t e", "ege", "ich", "ien", "aat", "ek ", "len", "n m", "nge", "nt ", "ove", "rd ", "wer", " ma", " mi", "daa", "e k", "lij", "mer", "n g", "n o", "om ", "sen", "t b", "wij", " ho", "e m", "ele", "gem", "heb", "pen", "ude", " bo", " ja", "die", "e e", "eli", "erk", "le ", "pro", "rij", " er", " za", "e d", "ens", "ind", "ke ", "n k", "nd ", "nen", "nte", "r h", "s d", "s e", "t z", " b ", " co", " ik", " ko", " ov", "eke", "hou", "ik ", "iti", "lan", "ns ", "t g", "t m", " do", " le", " zo", "ams", "e z", "g v", "it ", "je ", "ls ", "maa", "n i", "nke", "rke", "uit", " ha", " ka", " mo", " re", " st", " to", "age", "als", "ark", "art", "ben", "e r", "e s", "ert", "eze", "ht ", "ijd", "lem", "r v", "rte", "t p", "zeg", "zic", "aak", "aal", "ag ", "ale", "bbe", "ch ", "e t", "ebb", "erz", "ft ", "ge ", "led", "mst", "n n", "oek", "r i", "t o", "t w", "tel", "tte", "uur", "we ", "zit", " af", " li", " ui", "ak ", "all", "aut", "doo", "e i", "ene", "erg", "ete", "ges", "hee", "jaa", "jke", "kee", "kel", "kom", "lee", "moe", "n s", "ort", "rec", "s o", "s v", "teg", "tij", "ven", "waa", "wel", " an", " au", " bu", " gr", " pl", " ti", "'' ", "ade", "dag", "e l", "ech", "eel", "eft", "ger", "gt ", "ig ", "itt", "j d", "ppe", "rda");
-$GLOBALS["ngrams"]['nr'] = array("oku", "la ", "nga", "a n", " ng", "na ", "ama", "a i", "ko ", " uk", "ele", "lo ", "ela", "ang", "a u", "a k", "uku", "aba", " ku", "wa ", "enz", "lel", "ho ", "ni ", "ngo", "ath", "pha", "eth", "kha", "ana", "isa", "nge", " na", "o n", "tho", "e n", "the", "ha ", "esi", "nye", "kwe", "tjh", " kw", "ise", " um", "a a", " ne", "le ", "hla", "a e", "lan", "ben", "ndl", " no", "imi", "und", "ung", "thi", "nzi", "ye ", "isi", "uth", "o e", "ebe", "het", "kut", "and", "sa ", "elo", "fun", "eko", "seb", "ban", "ulu", "aka", "eli", "wen", "e i", " am", "eni", "ba ", "we ", "nel", " we", "kuf", "lwa", "i n", " is", "zi ", " lo", "kwa", "lok", "elw", "gok", "ona", "lek", "hi ", "li ", "gan", "bon", " ii", "ing", "ka ", "o i", "akh", "ane", "thu", "ula", "kel", "mth", " im", "ga ", " le", "nda", "fan", "nok", "i k", "end", "si ", "o w", "aph", "hat", "e u", "ala", "kub", "lun", "ikh", "o l", "ezi", "a l", "o u", "sis", "nam", "emi", " ab", "hul", "kus", " wo", "sek", "azi", "kho", "iin", "i u", "asi", "lol", "ini", "uph", "uhl", "khu", "no ", "o y", "ako", "a b", "i e", "o k", "i l", " be", "mal", " ye", "i i", "nde", "iph", "mel", "eke", "tha", "kun", "ngi", "e k", "eng", "o s", " yo", "so ", "ma ", "mkh", "jha", "isw", "lwe", " ez", "di ", "a w", "e a", "kul", "uny", "ume", "za ", "any", "ahl", "kuh", "een", " si", "ili", "itj", "zok", "ihl", " es", "ke ", "hlo", "hak", "phe", "lul", "dle", "luk", "da ", "eka", "amb", " se", "zis", "mbi", "hon", "dla", "aku", "jen", "zin", " ba", "ham", "i a", " bo", "o a", "ali", "use", "ile", "sik", "han", "wok", "okh", "hlu", "nya", "sit", "ani", "kuz", "o o", "ufa", "swa", "ind", "zak", "nis", "lis", "gab", "mi ", " em", " ko", "ano", " el", "hwa", "ufu", "a y", "wo ", " in", "lim", "tlo", "kat", "wak", "kan", "thw", "o z", "ith", "ndi", "yok", "yo ", "mit", "mis", "abo", "eku", "hab", "iny", "nan", "eze", "khe", "alo", "lu ", "man", "he ", "ezo", "kup", "ubu", " zo", "gam", "hel", "wan", "omb", "amk", "nza", "ola", "hum", "kuk", "du ", " la", "kom", "i y", "obu", "i b", "odu", "okw", "gap", " ka", "be ", " il", "alu", "atj", "e b");
-$GLOBALS["ngrams"]['nso'] = array("go ", " go", " le", " a ", "le ", " di", "a g", "ya ", "lo ", " ya", "a m", "ka ", " ka", "la ", " t ", "o y", "a t", "a k", "ba ", "et ", "wa ", " mo", " e ", "a b", " se", " ba", " ma", " bo", "e g", "t a", " o ", "a l", "o t", "na ", "o l", "a d", "elo", "di ", "a s", "o g", "o k", "ele", "o a", "ng ", "t e", "o b", "mo ", "e t", "e m", "ego", "eo ", "e l", "ngw", "se ", "e b", "kgo", "ela", " wa", " ga", "e k", "ago", "o m", " kg", "ga ", "dit", "olo", "t h", "e d", "o d", " ye", "ane", "lel", "we ", " tl", "thu", "ona", " th", "t w", "hut", "ana", "tla", "wan", "aba", "ola", " me", "gwa", "re ", "ong", "t o", "lao", "e s", "o s", "a y", "alo", "set", "a p", "i a", "eng", "a a", "o e", "tho", " ke", "gwe", " ha", "hlo", "edi", " la", "ao ", " ts", "aka", "hla", "ala", "swa", " we", " bj", "o o", "gor", "aga", "hab", "gob", "let", "ke ", "dik", "sa ", " i ", "oba", " hl", "the", "dir", "a n", "ith", "bja", "ye ", "no ", " sa", "mol", "lwa", "ti ", "man", "ole", "e e", "tse", "o w", "ore", "to ", "at ", "eth", "e y", "kan", "tsh", "gon", "net", "ano", "kar", "ge ", "ho ", "lok", " sw", " na", "i b", "dip", "i o", "oka", " ge", " om", "ko ", "emo", "pel", "nt ", "e a", "mel", "leg", "tlh", "me ", "ete", "phe", "a e", "o n", "o i", "wal", "oko", "nya", "bol", "odi", "weg", "te ", "e n", "ta ", "any", "yeo", "kga", "pol", "ang", "ri ", "it ", "uto", " mm", "iti", "are", "o f", "ha ", "gat", "oth", "ika", "o h", " it", "she", "ath", "ale", "iri", "pha", "ahl", " te", "ohl", "tha", " re", "bon", "lha", " ph", "din", " pe", "ro ", "mi ", "omi", "i t", " fa", "aro", "ase", "i l", "ne ", "lal", "ogo", "kol", " wo", "t i", "omo", " be", "mog", "mok", "len", "ile", "lwe", "ma ", "uta", "nse", "amo", "a o", " fe", "okg", "ja ", "pan", "nag", "ekg", "i i", "apa", "get", "lon", "ra ", "aem", " yo", "atl", "tlo", "kel", "tel", " kh", " po", "e o", "a w", "ent", "i e", "bo ", "gan", "het", "mal", "a f", "otl", "uti", "oga", "sen", "kwa", "mae", "eka", "mme", "kge", "jal", "a r", "ing", "lek", "sep", "lag", "ofe", "wag", "g y", "rol", "epe", "eko", "bok", "o p", "adi", "log");
-$GLOBALS["ngrams"]['pl'] = array("ie ", "nie", "em ", " ni", " po", " pr", "dzi", " na", "że ", "rze", "na ", "łem", "wie", " w ", " że", "go ", " by", "prz", "owa", "ię ", " do", " si", "owi", " pa", " za", "ch ", "ego", "ał ", "się", "ej ", "wał", "ym ", "ani", "ałe", "to ", " i ", " to", " te", "e p", " je", " z ", "czy", "był", "pan", "sta", "kie", " ja", "do ", " ch", " cz", " wi", "iał", "a p", "pow", " mi", "li ", "eni", "zie", " ta", " wa", "ło ", "ać ", "dy ", "ak ", "e w", " a ", " od", " st", "nia", "rzy", "ied", " kt", "odz", "cie", "cze", "ia ", "iel", "któ", "o p", "tór", "ści", " sp", " wy", "jak", "tak", "zy ", " mo", "ałę", "pro", "ski", "tem", "łęs", " tr", "e m", "jes", "my ", " ro", "edz", "eli", "iej", " rz", "a n", "ale", "an ", "e s", "est", "le ", "o s", "i p", "ki ", " co", "ada", "czn", "e t", "e z", "ent", "ny ", "pre", "rzą", "y s", " ko", " o ", "ach", "am ", "e n", "o t", "oli", "pod", "zia", " go", " ka", "by ", "ieg", "ier", "noś", "roz", "spo", "ych", "ząd", " mn", "acz", "adz", "bie", "cho", "mni", "o n", "ost", "pra", "ze ", "ła ", " so", "a m", "cza", "iem", "ić ", "obi", "ył ", "yło", " mu", " mó", "a t", "acj", "ci ", "e b", "ich", "kan", "mi ", "mie", "ośc", "row", "zen", "zyd", " al", " re", "a w", "den", "edy", "ił ", "ko ", "o w", "rac", "śmy", " ma", " ra", " sz", " ty", "e j", "isk", "ji ", "ka ", "m s", "no ", "o z", "rez", "wa ", "ów ", "łow", "ść ", " ob", "ech", "ecz", "ezy", "i w", "ja ", "kon", "mów", "ne ", "ni ", "now", "nym", "pol", "pot", "yde", " dl", " sy", "a s", "aki", "ali", "dla", "icz", "ku ", "ocz", "st ", "str", "szy", "trz", "wia", "y p", "za ", " wt", "chc", "esz", "iec", "im ", "la ", "o m", "sa ", "wać", "y n", "zac", "zec", " gd", "a z", "ard", "co ", "dar", "e r", "ien", "m n", "m w", "mia", "moż", "raw", "rdz", "tan", "ted", "teg", "wił", "wte", "y z", "zna", "zło", "a r", "awi", "bar", "cji", "czą", "dow", "eż ", "gdy", "iek", "je ", "o d", "tał", "wal", "wsz", "zed", "ówi", "ęsa", " ba", " lu", " wo", "aln", "arn", "ba ", "dzo", "e c", "hod", "igi", "lig", "m p", "myś", "o c", "oni", "rel", "sku", "ste", "y w", "yst", "z w");
-$GLOBALS["ngrams"]['ps'] = array(" د ", "اؤ ", " اؤ", "نو ", "ې د", "ره ", " په", "نه ", "چې ", " چې", "په ", "ه د", "ته ", "و ا", "ونو", "و د", " او", "انو", "ونه", "ه ک", " دا", "ه ا", "دې ", "ښې ", " کې", "ان ", "لو ", "هم ", "و م", "کښې", "ه م", "ى ا", " نو", " ته", " کښ", "رون", "کې ", "ده ", "له ", "به ", "رو ", " هم", "ه و", "وى ", "او ", "تون", "دا ", " کو", " کړ", "قام", " تر", "ران", "ه پ", "ې و", "ې پ", " به", " خو", "تو ", "د د", "د ا", "ه ت", "و پ", "يا ", " خپ", " دو", " را", " مش", " پر", "ارو", "رې ", "م د", "مشر", " شو", " ور", "ار ", "دى ", " اد", " دى", " مو", "د پ", "لي ", "و ک", " مق", " يو", "ؤ د", "خپل", "سره", "ه چ", "ور ", " تا", " دې", " رو", " سر", " مل", " کا", "ؤ ا", "اره", "برو", "مه ", "ه ب", "و ت", "پښت", " با", " دغ", " قب", " له", " وا", " پا", " پښ", "د م", "د ه", "لې ", "مات", "مو ", "ه ه", "وي ", "ې ب", "ې ک", " ده", " قا", "ال ", "اما", "د ن", "قبر", "ه ن", "پار", " اث", " بي", " لا", " لر", "اثا", "د خ", "دار", "ريخ", "شرا", "مقا", "نۍ ", "ه ر", "ه ل", "ولو", "يو ", "کوم", " دد", " لو", " مح", " مر", " وو", "اتو", "اري", "الو", "اند", "خان", "د ت", "سې ", "لى ", "نور", "و ل", "ي چ", "ړي ", "ښتو", "ې ل", " جو", " سي", "ام ", "بان", "تار", "تر ", "ثار", "خو ", "دو ", "ر ک", "ل د", "مون", "ندې", "و ن", "ول ", "وه ", "ى و", "ي د", "ې ا", "ې ت", "ې ي", " حک", " خب", " نه", " پو", "ا د", "تې ", "جوړ", "حکم", "حکو", "خبر", "دان", "ر د", "غه ", "قاف", "محک", "وال", "ومت", "ويل", "ى د", "ى م", "يره", "پر ", "کول", "ې ه", " تي", " خا", " وک", " يا", " ځا", "ؤ ق", "انۍ", "بى ", "غو ", "ه خ", "و ب", "ودا", "يدو", "ړې ", "کال", " بر", " قد", " مي", " وي", " کر", "ؤ م", "ات ", "ايي", "تى ", "تيا", "تير", "خوا", "دغو", "دم ", "ديم", "ر و", "قدي", "م خ", "مان", "مې ", "نيو", "نږ ", "ه ي", "و س", "و چ", "وان", "ورو", "ونږ", "پور", "ړه ", "ړو ", "ۍ د", "ې ن", " اه", " زي", " سو", " شي", " هر", " هغ", " ښا", "اتل", "اق ", "اني", "بري", "بې ", "ت ا", "د ب", "د س", "ر م", "رى ", "عرا", "لان", "مى ", "نى ", "و خ", "وئ ", "ورک", "ورې", "ون ", "وکړ", "ى چ", "يمه", "يې ", "ښتن", "که ", "کړي", "ې خ", "ے ش", " تح", " تو", " در", " دپ", " صو", " عر", " ول", " يؤ", " پۀ", " څو", "ا ا");
-$GLOBALS["ngrams"]['pt'] = array("de ", " de", "os ", "as ", "que", " co", "ão ", "o d", " qu", "ue ", " a ", "do ", "ent", " se", "a d", "s d", "e a", "es ", " pr", "ra ", "da ", " es", " pa", "to ", " o ", "em ", "con", "o p", " do", "est", "nte", "ção", " da", " re", "ma ", "par", " te", "ara", "ida", " e ", "ade", "is ", " um", " po", "a a", "a p", "dad", "no ", "te ", " no", "açã", "pro", "al ", "com", "e d", "s a", " as", "a c", "er ", "men", "s e", "ais", "nto", "res", "a s", "ado", "ist", "s p", "tem", "e c", "e s", "ia ", "o s", "o a", "o c", "e p", "sta", "ta ", "tra", "ura", " di", " pe", "ar ", "e e", "ser", "uma", "mos", "se ", " ca", "o e", " na", "a e", "des", "ont", "por", " in", " ma", "ect", "o q", "ria", "s c", "ste", "ver", "cia", "dos", "ica", "str", " ao", " em", "das", "e t", "ito", "iza", "pre", "tos", " nã", "ada", "não", "ess", "eve", "or ", "ran", "s n", "s t", "tur", " ac", " fa", "a r", "ens", "eri", "na ", "sso", " si", " é ", "bra", "esp", "mo ", "nos", "ro ", "um ", "a n", "ao ", "ico", "liz", "min", "o n", "ons", "pri", "ten", "tic", "ões", " tr", "a m", "aga", "e n", "ili", "ime", "m a", "nci", "nha", "nta", "spe", "tiv", "am ", "ano", "arc", "ass", "cer", "e o", "ece", "emo", "ga ", "o m", "rag", "so ", "são", " au", " os", " sa", "ali", "ca ", "ema", "emp", "ici", "ido", "inh", "iss", "l d", "la ", "lic", "m c", "mai", "onc", "pec", "ram", "s q", " ci", " en", " fo", "a o", "ame", "car", "co ", "der", "eir", "ho ", "io ", "om ", "ora", "r a", "sen", "ter", " br", " ex", "a u", "cul", "dev", "e u", "ha ", "mpr", "nce", "oca", "ove", "rio", "s o", "sa ", "sem", "tes", "uni", "ven", "zaç", "çõe", " ad", " al", " an", " mi", " mo", " ve", " à ", "a i", "a q", "ala", "amo", "bli", "cen", "col", "cos", "cto", "e m", "e v", "ede", "gás", "ias", "ita", "iva", "ndo", "o t", "ore", "r d", "ral", "rea", "s f", "sid", "tro", "vel", "vid", "ás ", " ap", " ar", " ce", " ou", " pú", " so", " vi", "a f", "act", "arr", "bil", "cam", "e f", "e i", "el ", "for", "lem", "lid", "lo ", "m d", "mar", "nde", "o o", "omo", "ort", "per", "púb", "r u", "rei", "rem", "ros", "rre", "ssi");
-$GLOBALS["ngrams"]['pt_BR'] = array("eq ", "ent", " en", "q e", "q i", "g e", "g i", "ng ", " id", "ida", "nte", "te ", " es", " in", "ade", "ag ", "dad", "de ", "ia ", "ing", " br", " sa", "est", "inq", "lin", "mo ", "nq ", "o a", "seq", " co", " li", " ni", " o ", "a a", "a c", "ado", "asi", "bra", "dor", "iq ", "nta", "o b", "or ", "q n", "ras", "sil", "str", "ta ", "tre", "us ", " a ", " ag", " an", " ca", " e ", " eq", " g ", " i ", " ir", " nc", " q ", " se", " ve", "ant", "ar ", "cia", "con", "e a", "eir", "el ", "ig ", "ili", "imo", "io ", "ir ", "nci", "o t", "ro ", "vel", " ap", " bo", " de", " fr", " tr", "a b", "a e", "a g", "a v", "apo", "as ", "bus", "ca ", "cet", "cin", "des", "e b", "e s", "eta", "fre", "i a", "ibu", "il ", "iro", "la ", "liq", "nib", "nti", "o c", "o q", "os ", "ra ", "re ", "req", "s a", "s s", "san", "sim", "tar", "to ", "ult", " ba", " ci", " el", " em", " fi", " gr", " gu", " ia", " mu", " pe", " po", " re", " ri", " si", " su", " te", " vi", "a o", "a s", "abe", "alc", "and", "ara", "arg", "ari", "ben", "boc", "car", "co ", "do ", "e f", "e g", "e l", "e o", "em ", "emo", "en ", "es ", "esp", "exe", "fic", "g n", "g s", "gra", "gua", "ias", "ica", "idi", "ila", "ile", "inh", "l b", "l e", "lei", "loq", "mos", "mul", "nad", "nio", "nt ", "nto", "o g", "o r", "oce", "ont", "oq ", "pos", "q v", "r b", "r e", "r i", "r s", "rad", "ran", "rem", "rg ", "ria", "rio", "s e", "s p", "sta", "sti", "tig", "til", "tra", "ua ", "ue ", "va ", "xeq", " ' ", " ab", " ad", " ae", " al", " am", " aq", " ar", " b ", " bi", " bl", " bu", " cc", " ch", " di", " et", " ex", " fa", " ic", " il", " im", " is", " it", " ll", " m ", " me", " na", " ne", " ng", " nu", " ob", " ou", " pi", " qu", " ss", " st", " ti", " ub", " un", " v ", " x ", "' c", "a d", "a f", "a i", "a n", "a p", "a t", "abr", "aci", "ad ", "ada", "adr", "aer", "afe", "alv", "amb", "amp", "an ", "ana", "ang", "anh", "ani", "ano", "anq", "apa", "aq ", "ati", "ato", "azi", "b n", "ban", "bar", "big", "bil", "biq", "bli", "blu", "bon", "bre", "bri", "bse", "buc", "c f", "c i", "cad", "caf", "cag", "cal", "can", "cc ");
-$GLOBALS["ngrams"]['pt_PT'] = array("equ", "ent", "que", "qui", "gui", "uen", " li", "ngu", "qu ", "uid", " co", " ve", "de ", "gue", "ida", "nte", "o a", "a a", "ade", "dad", "el ", "ing", "mo ", "nqu", "nta", "seq", "u n", "vel", " de", " o ", " se", "a c", "ado", "ar ", "est", "ia ", "inq", "io ", "iqu", "lin", "o c", "o p", "ort", "por", "ta ", "te ", " ag", " eq", " nc", " pi", " po", " sa", "a d", "a e", "ant", "as ", "ca ", "cia", "des", "do ", "gu ", "imo", "l p", "nci", "ro ", "rtu", "str", "tug", "u s", "ues", "ui ", " a ", " an", " ap", " ba", " bi", " ca", " fr", " gu", " in", " pe", " qu", "agu", "apa", "con", "dor", "e f", "e g", "eir", "fre", "ho ", "i a", "ica", "igu", "iro", "liq", "nti", "o b", "o l", "o s", "or ", "r o", "ra ", "req", "s c", "sim", "tar", "to ", "ue ", "uin", "ult", " ci", " en", " ho", " mu", " ni", " re", " s ", " si", " su", "a s", "a v", "abe", "ag ", "al ", "and", "anh", "apo", "ata", "ban", "ben", "bic", "boi", "cap", "car", "cin", "co ", "com", "cto", "dei", "e b", "e o", "e s", "eca", "en ", "er ", "es ", "exe", "fic", "for", "gal", "gra", "ias", "ich", "ico", "idi", "ili", "ir ", "ira", "isb", "la ", "lis", "mbo", "mul", "na ", "nho", "nio", "nt ", "o q", "o r", "o t", "oc ", "oio", "omb", "oo ", "os ", "par", "pe ", "r b", "r e", "r s", "ran", "re ", "rec", "s a", "s s", "san", "sbo", "so ", "sta", "tan", "tra", "tre", "u v", "uga", "ugu", "xeq", " ab", " ad", " al", " am", " aq", " ar", " au", " b ", " bo", " c ", " ch", " ct", " cu", " el", " es", " ex", " fa", " fi", " ga", " gr", " id", " ir", " ne", " ng", " nu", " ob", " oo", " pa", " ps", " pt", " r ", " ra", " ri", " ss", " st", " ta", " te", " tr", " ub", " un", " vi", " vo", "a f", "a i", "a l", "a m", "a o", "a r", "ach", "aci", "act", "ad ", "afa", "age", "agr", "alf", "alh", "am ", "amb", "ami", "ana", "ang", "anq", "aqu", "ara", "arb", "arc", "arg", "ari", "arr", "asa", "ati", "aut", "azi", "b n", "bar", "bat", "ber", "big", "bil", "biq", "bli", "boa", "boe", "bor", "bse", "c i", "c l", "c p", "cad", "cam", "cas", "ch ", "cha", "che", "chi", "cio", "coc", "coi", "cou", "ctr", "cue", "cul");
-$GLOBALS["ngrams"]['ro'] = array(" de", " în", "de ", " a ", "ul ", " co", "în ", "re ", "e d", "ea ", " di", " pr", "le ", "şi ", "are", "at ", "con", "ui ", " şi", "i d", "ii ", " cu", "e a", "lui", "ern", "te ", "cu ", " la", "a c", "că ", "din", "e c", "or ", "ulu", "ne ", "ter", "la ", "să ", "tat", "tre", " ac", " să", "est", "st ", "tă ", " ca", " ma", " pe", "cur", "ist", "mân", "a d", "i c", "nat", " ce", "i a", "ia ", "in ", "scu", " mi", "ato", "aţi", "ie ", " re", " se", "a a", "int", "ntr", "tru", "uri", "ă a", " fo", " pa", "ate", "ini", "tul", "ent", "min", "pre", "pro", "a p", "e p", "e s", "ei ", "nă ", "par", "rna", "rul", "tor", " in", " ro", " tr", " un", "al ", "ale", "art", "ce ", "e e", "e î", "fos", "ita", "nte", "omâ", "ost", "rom", "ru ", "str", "ver", " ex", " na", "a f", "lor", "nis", "rea", "rit", " al", " eu", " no", "ace", "cer", "ile", "nal", "pri", "ri ", "sta", "ste", "ţie", " au", " da", " ju", " po", "ar ", "au ", "ele", "ere", "eri", "ina", "n a", "n c", "res", "se ", "t a", "tea", " că", " do", " fi", "a s", "ată", "com", "e ş", "eur", "guv", "i s", "ice", "ili", "na ", "rec", "rep", "ril", "rne", "rti", "uro", "uve", "ă p", " ar", " o ", " su", " vi", "dec", "dre", "oar", "ons", "pe ", "rii", " ad", " ge", "a m", "a r", "ain", "ali", "car", "cat", "ecu", "ene", "ept", "ext", "ilo", "iu ", "n p", "ori", "sec", "u p", "une", "ă c", "şti", "ţia", " ch", " gu", "ai ", "ani", "cea", "e f", "isc", "l a", "lic", "liu", "mar", "nic", "nt ", "nul", "ris", "t c", "t p", "tic", "tid", "u a", "ucr", " as", " dr", " fa", " nu", " pu", " to", "cra", "dis", "enţ", "esc", "gen", "it ", "ivi", "l d", "n d", "nd ", "nu ", "ond", "pen", "ral", "riv", "rte", "sti", "t d", "ta ", "to ", "uni", "xte", "ând", "îns", "ă s", " bl", " st", " uc", "a b", "a i", "a l", "air", "ast", "bla", "bri", "che", "duc", "dul", "e m", "eas", "edi", "esp", "i l", "i p", "ica", "ică", "ir ", "iun", "jud", "lai", "lul", "mai", "men", "ni ", "pus", "put", "ra ", "rai", "rop", "sil", "ti ", "tra", "u s", "ua ", "ude", "urs", "ân ", "înt", "ţă ", " lu", " mo", " s ", " sa", " sc", "a u", "an ", "atu");
-$GLOBALS["ngrams"]['ru'] = array(" на", " пр", "то ", " не", "ли ", " по", "но ", " в ", "на ", "ть ", "не ", " и ", " ко", "ом ", "про", " то", "их ", " ка", "ать", "ото", " за", "ие ", "ова", "тел", "тор", " де", "ой ", "сти", " от", "ах ", "ми ", "стр", " бе", " во", " ра", "ая ", "ват", "ей ", "ет ", "же ", "иче", "ия ", "ов ", "сто", " об", "вер", "го ", "и в", "и п", "и с", "ии ", "ист", "о в", "ост", "тра", " те", "ели", "ере", "кот", "льн", "ник", "нти", "о с", "рор", "ств", "чес", " бо", " ве", " да", " ин", " но", " с ", " со", " сп", " ст", " чт", "али", "ами", "вид", "дет", "е н", "ель", "еск", "ест", "зал", "и н", "ива", "кон", "ого", "одн", "ожн", "оль", "ори", "ров", "ско", "ся ", "тер", "что", " мо", " са", " эт", "ант", "все", "ерр", "есл", "иде", "ина", "ино", "иро", "ите", "ка ", "ко ", "кол", "ком", "ла ", "ния", "о т", "оло", "ран", "ред", "сь ", "тив", "тич", "ых ", " ви", " вс", " го", " ма", " сл", "ако", "ани", "аст", "без", "дел", "е д", "е п", "ем ", "жно", "и д", "ика", "каз", "как", "ки ", "нос", "о н", "опа", "при", "рро", "ски", "ти ", "тов", "ые ", " вы", " до", " ме", " ни", " од", " ро", " св", " чи", "а н", "ает", "аза", "ате", "бес", "в п", "ва ", "е в", "е м", "е с", "ез ", "ени", "за ", "зна", "ини", "кам", "ках", "кто", "лов", "мер", "мож", "нал", "ниц", "ны ", "ным", "ора", "оро", "от ", "пор", "рав", "рес", "рис", "рос", "ска", "т н", "том", "чит", "шко", " бы", " о ", " тр", " уж", " чу", " шк", "а б", "а в", "а р", "аби", "ала", "ало", "аль", "анн", "ати", "бин", "вес", "вно", "во ", "вши", "дал", "дат", "дно", "е з", "его", "еле", "енн", "ент", "ете", "и о", "или", "ись", "ит ", "ици", "ков", "лен", "льк", "мен", "мы ", "нет", "ни ", "нны", "ног", "ной", "ном", "о п", "обн", "ове", "овн", "оры", "пер", "по ", "пра", "пре", "раз", "роп", "ры ", "се ", "сли", "сов", "тре", "тся", "уро", "цел", "чно", "ь в", "ько", "ьно", "это", "ют ", "я н", " ан", " ес", " же", " из", " кт", " ми", " мы", " пе", " се", " це", "а м", "а п", "а т", "авш", "аже", "ак ", "ал ", "але", "ане", "ачи", "ают", "бна", "бол", "бы ", "в и", "в с", "ван", "гра", "даж", "ден", "е к");
-$GLOBALS["ngrams"]['sk'] = array(" pr", " po", " ne", " a ", "ch ", " na", " je", "ní ", "je ", " do", "na ", "ova", " v ", "to ", "ho ", "ou ", " to", "ick", "ter", "že ", " st", " za", "ost", "ých", " se", "pro", " te", "e s", " že", "a p", " kt", "pre", " by", " o ", "se ", "kon", " př", "a s", "né ", "ně ", "sti", "ako", "ist", "mu ", "ame", "ent", "ky ", "la ", "pod", " ve", " ob", "om ", "vat", " ko", "sta", "em ", "le ", "a v", "by ", "e p", "ko ", "eri", "kte", "sa ", "ého", "e v", "mer", "tel", " ak", " sv", " zá", "hla", "las", "lo ", " ta", "a n", "ej ", "li ", "ne ", " sa", "ak ", "ani", "ate", "ia ", "sou", " so", "ení", "ie ", " re", "ce ", "e n", "ori", "tic", " vy", "a t", "ké ", "nos", "o s", "str", "ti ", "uje", " sp", "lov", "o p", "oli", "ová", " ná", "ale", "den", "e o", "ku ", "val", " am", " ro", " si", "nie", "pol", "tra", " al", "ali", "o v", "tor", " mo", " ni", "ci ", "o n", "ím ", " le", " pa", " s ", "al ", "ati", "ero", "ove", "rov", "ván", "ích", " ja", " z ", "cké", "e z", " od", "byl", "de ", "dob", "nep", "pra", "ric", "spo", "tak", " vš", "a a", "e t", "lit", "me ", "nej", "no ", "nýc", "o t", "a j", "e a", "en ", "est", "jí ", "mi ", "slo", "stá", "u v", "for", "nou", "pos", "pře", "si ", "tom", " vl", "a z", "ly ", "orm", "ris", "za ", "zák", " k ", "at ", "cký", "dno", "dos", "dy ", "jak", "kov", "ny ", "res", "ror", "sto", "van", " op", "da ", "do ", "e j", "hod", "len", "ný ", "o z", "poz", "pri", "ran", "u s", " ab", "aj ", "ast", "it ", "kto", "o o", "oby", "odo", "u p", "va ", "ání", "í p", "ým ", " in", " mi", "ať ", "dov", "ka ", "nsk", "áln", " an", " bu", " sl", " tr", "e m", "ech", "edn", "i n", "kýc", "níc", "ov ", "pří", "í a", " aj", " bo", "a d", "ide", "o a", "o d", "och", "pov", "svo", "é s", " kd", " vo", " vý", "bud", "ich", "il ", "ili", "ni ", "ním", "od ", "osl", "ouh", "rav", "roz", "st ", "stv", "tu ", "u a", "vál", "y s", "í s", "í v", " hl", " li", " me", "a m", "e b", "h s", "i p", "i s", "iti", "lád", "nem", "nov", "opo", "uhl", "eno", "ens", "men", "nes", "obo", "te ", "ved", "vlá", "y n", " ma", " mu", " vá", "bez", "byv", "cho");
-$GLOBALS["ngrams"]['sl'] = array("je ", " pr", " po", " je", " v ", " za", " na", "pre", "da ", " da", "ki ", "ti ", "ja ", "ne ", " in", "in ", "li ", "no ", "na ", "ni ", " bi", "jo ", " ne", "nje", "e p", "i p", "pri", "o p", "red", " do", "anj", "em ", "ih ", " bo", " ki", " iz", " se", " so", "al ", " de", "e v", "i s", "ko ", "bil", "ira", "ove", " br", " ob", "e b", "i n", "ova", "se ", "za ", "la ", " ja", "ati", "so ", "ter", " ta", "a s", "del", "e d", " dr", " od", "a n", "ar ", "jal", "ji ", "rit", " ka", " ko", " pa", "a b", "ani", "e s", "er ", "ili", "lov", "o v", "tov", " ir", " ni", " vo", "a j", "bi ", "bri", "iti", "let", "o n", "tan", "še ", " le", " te", "eni", "eri", "ita", "kat", "por", "pro", "ali", "ke ", "oli", "ov ", "pra", "ri ", "uar", "ve ", " to", "a i", "a v", "ako", "arj", "ate", "di ", "do ", "ga ", "le ", "lo ", "mer", "o s", "oda", "oro", "pod", " ma", " mo", " si", "a p", "bod", "e n", "ega", "ju ", "ka ", "lje", "rav", "ta ", "a o", "e t", "e z", "i d", "i v", "ila", "lit", "nih", "odo", "sti", "to ", "var", "ved", "vol", " la", " no", " vs", "a d", "agu", "aja", "dej", "dnj", "eda", "gov", "gua", "jag", "jem", "kon", "ku ", "nij", "omo", "oči", "pov", "rak", "rja", "sta", "tev", "a t", "aj ", "ed ", "eja", "ent", "ev ", "i i", "i o", "ijo", "ist", "ost", "ske", "str", " ra", " s ", " tr", " še", "arn", "bo ", "drž", "i j", "ilo", "izv", "jen", "lja", "nsk", "o d", "o i", "om ", "ora", "ovo", "raz", "rža", "tak", "va ", "ven", "žav", " me", " če", "ame", "avi", "e i", "e o", "eka", "gre", "i t", "ija", "il ", "ite", "kra", "lju", "mor", "nik", "o t", "obi", "odn", "ran", "re ", "sto", "stv", "udi", "v i", "van", " am", " sp", " st", " tu", " ve", " že", "ajo", "ale", "apo", "dal", "dru", "e j", "edn", "ejo", "elo", "est", "etj", "eva", "iji", "ik ", "im ", "itv", "mob", "nap", "nek", "pol", "pos", "rat", "ski", "tič", "tom", "ton", "tra", "tud", "tve", "v b", "vil", "vse", "čit", " av", " gr", "a z", "ans", "ast", "avt", "dan", "e m", "eds", "for", "i z", "kot", "mi ", "nim", "o b", "o o", "od ", "odl", "oiz", "ot ", "par", "pot", "rje", "roi", "tem", "val");
-$GLOBALS["ngrams"]['so'] = array("ka ", "ay ", "da ", " ay", "aal", "oo ", "aan", " ka", "an ", "in ", " in", "ada", "maa", "aba", " so", "ali", "bad", "add", "soo", " na", "aha", "ku ", "ta ", " wa", "yo ", "a s", "oma", "yaa", " ba", " ku", " la", " oo", "iya", "sha", "a a", "dda", "nab", "nta", " da", " ma", "nka", "uu ", "y i", "aya", "ha ", "raa", " dh", " qa", "a k", "ala", "baa", "doo", "had", "liy", "oom", " ha", " sh", "a d", "a i", "a n", "aar", "ee ", "ey ", "y k", "ya ", " ee", " iy", "aa ", "aaq", "gaa", "lam", " bu", "a b", "a m", "ad ", "aga", "ama", "iyo", "la ", "a c", "a l", "een", "int", "she", "wax", "yee", " si", " uu", "a h", "aas", "alk", "dha", "gu ", "hee", "ii ", "ira", "mad", "o a", "o k", "qay", " ah", " ca", " wu", "ank", "ash", "axa", "eed", "en ", "ga ", "haa", "n a", "n s", "naa", "nay", "o d", "taa", "u b", "uxu", "wux", "xuu", " ci", " do", " ho", " ta", "a g", "a u", "ana", "ayo", "dhi", "iin", "lag", "lin", "lka", "o i", "san", "u s", "una", "uun", " ga", " xa", " xu", "aab", "abt", "aq ", "aqa", "ara", "arl", "caa", "cir", "eeg", "eel", "isa", "kal", "lah", "ney", "qaa", "rla", "sad", "sii", "u d", "wad", " ad", " ar", " di", " jo", " ra", " sa", " u ", " yi", "a j", "a q", "aad", "aat", "aay", "ah ", "ale", "amk", "ari", "as ", "aye", "bus", "dal", "ddu", "dii", "du ", "duu", "ed ", "ege", "gey", "hay", "hii", "ida", "ine", "joo", "laa", "lay", "mar", "mee", "n b", "n d", "n m", "no ", "o b", "o l", "oog", "oon", "rga", "sh ", "sid", "u q", "unk", "ush", "xa ", "y d", " bi", " gu", " is", " ke", " lo", " me", " mu", " qo", " ug", "a e", "a o", "a w", "adi", "ado", "agu", "al ", "ant", "ark", "asa", "awi", "bta", "bul", "d a", "dag", "dan", "do ", "e s", "gal", "gay", "guu", "h e", "hal", "iga", "ihi", "iri", "iye", "ken", "lad", "lid", "lsh", "mag", "mun", "n h", "n i", "na ", "o n", "o w", "ood", "oor", "ora", "qab", "qor", "rab", "rit", "rta", "s o", "sab", "ska", "to ", "u a", "u h", "u u", "ud ", "ugu", "uls", "uud", "waa", "xus", "y b", "y q", "y s", "yad", "yay", "yih", " aa", " bo", " br", " go", " ji", " mi", " of", " ti", " um", " wi", " xo", "a x");
-$GLOBALS["ngrams"]['sq'] = array("të ", " të", "në ", "për", " pë", " e ", "sht", " në", " sh", "se ", "et ", "ë s", "ë t", " se", "he ", "jë ", "ër ", "dhe", " pa", "ë n", "ë p", " që", " dh", "një", "ë m", " nj", "ësh", "in ", " me", "që ", " po", "e n", "e t", "ish", "më ", "së ", "me ", "htë", " ka", " si", "e k", "e p", " i ", "anë", "ar ", " nu", "und", "ve ", " ës", "e s", " më", "nuk", "par", "uar", "uk ", "jo ", "rë ", "ta ", "ë f", "en ", "it ", "min", "het", "n e", "ri ", "shq", "ë d", " do", " nd", "sh ", "ën ", "atë", "hqi", "ist", "ë q", " gj", " ng", " th", "a n", "do ", "end", "imi", "ndi", "r t", "rat", "ë b", "ëri", " mu", "art", "ash", "qip", " ko", "e m", "edh", "eri", "je ", "ka ", "nga", "si ", "te ", "ë k", "ësi", " ma", " ti", "eve", "hje", "ira", "mun", "on ", "po ", "re ", " pr", "im ", "lit", "o t", "ur ", "ë e", "ë v", "ët ", " ku", " së", "e d", "es ", "ga ", "iti", "jet", "ndë", "oli", "shi", "tje", " bë", " z ", "gje", "kan", "shk", "ënd", "ës ", " de", " kj", " ru", " vi", "ara", "gov", "kjo", "or ", "r p", "rto", "rug", "tet", "ugo", "ali", "arr", "at ", "d t", "ht ", "i p", "ipë", "izi", "jnë", "n n", "ohe", "shu", "shë", "t e", "tik", "a e", "arë", "etë", "hum", "nd ", "ndr", "osh", "ova", "rim", "tos", "va ", " fa", " fi", "a s", "hen", "i n", "mar", "ndo", "por", "ris", "sa ", "sis", "tës", "umë", "viz", "zit", " di", " mb", "aj ", "ana", "ata", "dër", "e a", "esh", "ime", "jes", "lar", "n s", "nte", "pol", "r n", "ran", "res", "rrë", "tar", "ë a", "ë i", " at", " jo", " kë", " re", "a k", "ai ", "akt", "hë ", "hën", "i i", "i m", "ia ", "men", "nis", "shm", "str", "t k", "t n", "t s", "ë g", "ërk", "ëve", " ai", " ci", " ed", " ja", " kr", " qe", " ta", " ve", "a p", "cil", "el ", "erë", "gji", "hte", "i t", "jen", "jit", "k d", "mën", "n t", "nyr", "ori", "pas", "ra ", "rie", "rës", "tor", "uaj", "yre", "ëm ", "ëny", " ar", " du", " ga", " je", "dës", "e e", "e z", "ha ", "hme", "ika", "ini", "ite", "ith", "koh", "kra", "ku ", "lim", "lis", "qën", "rën", "s s", "t d", "t t", "tir", "tën", "ver", "ë j", " ba", " in", " tr", " zg", "a a", "a m", "a t", "abr");
-$GLOBALS["ngrams"]['sr'] = array(" на", " је", " по", "је ", " и ", " не", " пр", "га ", " св", "ог ", "а с", "их ", "на ", "кој", "ога", " у ", "а п", "не ", "ни ", "ти ", " да", "ом ", " ве", " ср", "и с", "ско", " об", "а н", "да ", "е н", "но ", "ног", "о ј", "ој ", " за", "ва ", "е с", "и п", "ма ", "ник", "обр", "ова", " ко", "а и", "диј", "е п", "ка ", "ко ", "ког", "ост", "све", "ств", "сти", "тра", "еди", "има", "пок", "пра", "раз", "те ", " бо", " ви", " са", "аво", "бра", "гос", "е и", "ели", "ени", "за ", "ики", "ио ", "пре", "рав", "рад", "у с", "ју ", "ња ", " би", " до", " ст", "аст", "бој", "ебо", "и н", "им ", "ку ", "лан", "неб", "ово", "ого", "осл", "ојш", "пед", "стр", "час", " го", " кр", " мо", " чл", "а м", "а о", "ако", "ача", "вел", "вет", "вог", "еда", "ист", "ити", "ије", "око", "сло", "срб", "чла", " бе", " ос", " от", " ре", " се", "а в", "ан ", "бог", "бро", "вен", "гра", "е о", "ика", "ија", "ких", "ком", "ли ", "ну ", "ота", "ојн", "под", "рбс", "ред", "рој", "са ", "сни", "тач", "тва", "ја ", "ји ", " ка", " ов", " тр", "а ј", "ави", "аз ", "ано", "био", "вик", "во ", "гов", "дни", "е ч", "его", "и о", "ива", "иво", "ик ", "ине", "ини", "ипе", "кип", "лик", "ло ", "наш", "нос", "о т", "од ", "оди", "она", "оји", "поч", "про", "ра ", "рис", "род", "рст", "се ", "спо", "ста", "тић", "у д", "у н", "у о", "чин", "ша ", "јед", "јни", "ће ", " м ", " ме", " ни", " он", " па", " сл", " те", "а у", "ава", "аве", "авн", "ана", "ао ", "ати", "аци", "ају", "ања", "бск", "вор", "вос", "вск", "дин", "е у", "едн", "ези", "ека", "ено", "ето", "ења", "жив", "и г", "и и", "и к", "и т", "ику", "ичк", "ки ", "крс", "ла ", "лав", "лит", "ме ", "мен", "нац", "о н", "о п", "о у", "одн", "оли", "орн", "осн", "осп", "оче", "пск", "реч", "рпс", "сво", "ски", "сла", "срп", "су ", "та ", "тав", "тве", "у б", "јез", "ћи ", " ен", " жи", " им", " му", " од", " су", " та", " хр", " ча", " шт", " ње", "а д", "а з", "а к", "а т", "аду", "ало", "ани", "асо", "ван", "вач", "вањ", "вед", "ви ", "вно", "вот", "вој", "ву ", "доб", "дру", "дсе", "ду ", "е б", "е д", "е м", "ем ", "ема", "ент", "енц");
-$GLOBALS["ngrams"]['ss'] = array(" ku", " le", "la ", "eku", "a k", "nga", " ng", "a n", "nge", "a l", "lo ", " ne", "eti", "kwe", "ndz", "e n", "o l", " lo", "ela", "ema", "ent", "si ", " kw", "tsi", "i l", "wa ", "lel", "kut", "e k", "und", "ni ", "elo", "fun", "esi", " si", "ele", "tin", "tfo", " ti", "le ", "kha", "tse", "e l", "pha", "ung", "i k", " em", "ti ", "sa ", " um", "isa", "eli", "ndl", "ing", "set", "we ", "ise", "na ", "ang", "etf", "khe", "and", "o n", " we", "nti", "nye", "tfu", "ben", "a e", "uts", "let", "dza", "imi", "sek", "ko ", "lok", "eni", "ye ", "ba ", "nkh", "ebe", "alo", "o k", "lan", "ga ", "aba", "seb", " ye", "he ", "lwa", "kel", " te", " la", "kus", "wem", "ati", "ikh", "nek", "ala", "kuf", "i n", "oku", "ats", "mts", "hla", "wen", "a t", " na", "gek", "uhl", "kub", "ngu", "ka ", "aka", "fut", "kan", "kwa", " li", "kuc", "onk", "ban", "ana", "ulu", " se", " im", "akh", "ume", "a i", "les", "tim", "ula", "ini", "lwe", "za ", "fo ", "hul", " no", "han", "li ", "iph", "a s", "tis", "khu", "ta ", "dzi", "be ", "emi", "ma ", "end", "o t", "eke", "a u", " ka", "ane", "lek", "mel", "elw", "kun", "sis", "lon", "utf", "any", "kho", "kul", "hlo", " ba", "ufu", "aph", "lun", "e s", "hal", "ind", "isw", "o s", "use", "ekw", "me ", "ndv", "eng", "uph", "hat", "ne ", "so ", "lul", "nom", "te ", "lol", "awu", "nel", "lu ", "ha ", "wat", "men", "ete", " lw", "nem", "ako", "zin", "kuh", "sha", "bha", "gab", " in", "ale", "mis", "tem", "e e", "o e", "e t", "wek", "dze", "ome", "wel", " lu", "emb", "nis", " ek", "tsa", "u l", "o y", "dle", "ute", "len", "swa", "phe", "mkh", "ntf", "uke", "sit", "iny", "e i", "wo ", "ani", "phi", "wet", "sin", "nhl", "mal", "mba", "mfu", "fu ", "lab", "sik", "taw", "no ", "hle", "e u", "eki", "ase", "ali", "ulw", "ve ", "eka", "zel", "nta", "bon", "tek", "bo ", "sig", "ama", "ile", "ule", "tfw", "mph", "uma", "kup", "emt", "asi", "dlu", "ish", "umt", "gen", "o w", "ike", "iga", "hak", "abe", "net", "gan", "kis", "nde", "ngi", "ukh", "bek", "mo ", "phu", "sel", "elu", "i t", "ant", "dvo", "a y", "vo ", "hum", "lis", "dla", "gam", "ive", "jen", "ket");
-$GLOBALS["ngrams"]['st'] = array("ng ", "ho ", " le", "le ", " ho", " ts", "a m", "sa ", "la ", " ka", "a h", " di", "ya ", "ka ", " ya", "a t", "eng", "ets", " ba", " mo", "a l", " se", "lo ", " bo", "wa ", "tsa", "a b", "na ", "ba ", " e ", " a ", "a k", " ma", "ang", "tse", "se ", "o t", "a d", "a s", "ha ", "so ", "o l", "e h", "o y", "e t", "tla", "tsh", "olo", "e l", "e m", "o b", "o e", "seb", "ebe", "ela", "thu", "ele", "e k", "ana", "e b", " th", " ha", "tso", "o a", "o k", " wa", "kgo", "tsw", "tho", "o h", "ong", " la", "hut", "dit", "ane", " me", "a e", " tl", "ola", "edi", "elo", "di ", "ona", " ke", "wan", " o ", "a p", "apa", "tjh", "hlo", " sa", "she", "let", "aba", "lok", "lao", "eo ", "a a", "o s", "man", "to ", " hl", "a n", "isa", "e d", "swe", "set", "pa ", " na", "o m", "g l", "het", " kg", "got", "aha", "eth", "re ", "e e", "jha", "phe", "lan", "otl", "g k", "lek", "its", "ekg", "sen", "ao ", "dis", "g m", "oth", "e a", "ith", "hla", "e s", "ke ", "mol", "pel", "g h", "hab", "bet", "san", "ats", "mo ", "lwa", "we ", "ala", "len", "nts", "dip", "kap", "iso", " mm", "uto", "alo", "e n", "si ", "ta ", "o w", "emo", "swa", "tsi", "oke", "bed", "the", " ph", "a y", "wen", "ken", "ena", "hwa", "ne ", "ore", "atl", "ano", "hel", "mot", "bo ", "g t", "i b", "kga", "hor", "ngo", "nan", "no ", "o n", "tlh", "shw", "kel", "pha", "etj", "bon", "ell", "g s", "gol", "tha", "ale", "dik", "kol", "bak", " nt", "ika", "o d", " te", "ohl", "g y", " lo", "ti ", "his", "ile", "g b", "oko", " et", "han", "a o", "mat", "oho", "odi", "lel", "mel", "din", "kar", "o o", "uo ", "mon", "hah", "te ", "me ", " it", "o f", "nen", "heb", "ing", "bol", "bel", "hle", "puo", "lal", "tlo", "hal", "oph", "eba", "hat", "heo", "aro", "bat", "ko ", "ban", "leh", "o i", "ole", "tle", " fe", "kge", "pan", "ake", "g e", "aka", "eko", " pe", "rik", "e y", "mme", "ama", "lha", "eha", " fa", "ebo", "moh", "mae", "ete", "aem", "ots", "ahi", "o p", "uta", "okg", "ntl", "pal", "get", "i l", "e f", "oka", "sep", "lat", "ahl", "bot", "ese", "lah", "lon", "akg", "a f", " pu", "ase", "g a", "mor", "kan", "nah", "boh", "e p");
-$GLOBALS["ngrams"]['sv'] = array("en ", " de", "et ", "er ", "tt ", "om ", "för", "ar ", "de ", "att", " fö", "ing", " in", " at", " i ", "det", "ch ", "an ", "gen", " an", "t s", "som", "te ", " oc", "ter", " ha", "lle", "och", " sk", " so", "ra ", "r a", " me", "var", "nde", "är ", " ko", "on ", "ans", "int", "n s", "na ", " en", " fr", " på", " st", " va", "and", "nte", "på ", "ska", "ta ", " vi", "der", "äll", "örs", " om", "da ", "kri", "ka ", "nst", " ho", "as ", "stä", "r d", "t f", "upp", " be", "nge", "r s", "tal", "täl", "ör ", " av", "ger", "ill", "ng ", "e s", "ekt", "ade", "era", "ers", "har", "ll ", "lld", "rin", "rna", "säk", "und", "inn", "lig", "ns ", " ma", " pr", " up", "age", "av ", "iva", "kti", "lda", "orn", "son", "ts ", "tta", "äkr", " sj", " ti", "avt", "ber", "els", "eta", "kol", "men", "n d", "t k", "vta", "år ", "juk", "man", "n f", "nin", "r i", "rsä", "sju", "sso", " är", "a s", "ach", "ag ", "bac", "den", "ett", "fte", "hor", "nba", "oll", "rnb", "ste", "til", " ef", " si", "a a", "e h", "ed ", "eft", "ga ", "ig ", "it ", "ler", "med", "n i", "nd ", "så ", "tiv", " bl", " et", " fi", " sä", "at ", "des", "e a", "gar", "get", "lan", "lss", "ost", "r b", "r e", "re ", "ret", "sta", "t i", " ge", " he", " re", "a f", "all", "bos", "ets", "lek", "let", "ner", "nna", "nne", "r f", "rit", "s s", "sen", "sto", "tor", "vav", "ygg", " ka", " så", " tr", " ut", "ad ", "al ", "are", "e o", "gon", "kom", "n a", "n h", "nga", "r h", "ren", "t d", "tag", "tar", "tre", "ätt", " få", " hä", " se", "a d", "a i", "a p", "ale", "ann", "ara", "byg", "gt ", "han", "igt", "kan", "la ", "n o", "nom", "nsk", "omm", "r k", "r p", "r v", "s f", "s k", "t a", "t p", "ver", " bo", " br", " ku", " nå", "a b", "a e", "del", "ens", "es ", "fin", "ige", "m s", "n p", "någ", "or ", "r o", "rbe", "rs ", "rt ", "s a", "s n", "skr", "t o", "ten", "tio", "ven", " al", " ja", " p ", " r ", " sa", "a h", "bet", "cke", "dra", "e f", "e i", "eda", "eno", "erä", "ess", "ion", "jag", "m f", "ne ", "nns", "pro", "r t", "rar", "riv", "rät", "t e", "t t", "ust", "vad", "öre", " ar", " by", " kr", " mi", "arb");
-$GLOBALS["ngrams"]['sw'] = array(" wa", "wa ", "a k", "a m", " ku", " ya", "a w", "ya ", "ni ", " ma", "ka ", "a u", "na ", "za ", "ia ", " na", "ika", "ma ", "ali", "a n", " am", "ili", "kwa", " kw", "ini", " ha", "ame", "ana", "i n", " za", "a h", "ema", "i m", "i y", "kuw", "la ", "o w", "a y", "ata", "sem", " la", "ati", "chi", "i w", "uwa", "aki", "li ", "eka", "ira", " nc", "a s", "iki", "kat", "nch", " ka", " ki", "a b", "aji", "amb", "ra ", "ri ", "rik", "ada", "mat", "mba", "mes", "yo ", "zi ", "da ", "hi ", "i k", "ja ", "kut", "tek", "wan", " bi", "a a", "aka", "ao ", "asi", "cha", "ese", "eza", "ke ", "moj", "oja", " hi", "a z", "end", "ha ", "ji ", "mu ", "shi", "wat", " bw", "ake", "ara", "bw ", "i h", "imb", "tik", "wak", "wal", " hu", " mi", " mk", " ni", " ra", " um", "a l", "ate", "esh", "ina", "ish", "kim", "o k", " ir", "a i", "ala", "ani", "aq ", "azi", "hin", "i a", "idi", "ima", "ita", "rai", "raq", "sha", " ms", " se", "afr", "ama", "ano", "ea ", "ele", "fri", "go ", "i i", "ifa", "iwa", "iyo", "kus", "lia", "lio", "maj", "mku", "no ", "tan", "uli", "uta", "wen", " al", "a j", "aad", "aid", "ari", "awa", "ba ", "fa ", "nde", "nge", "nya", "o y", "u w", "ua ", "umo", "waz", "ye ", " ut", " vi", "a d", "a t", "aif", "di ", "ere", "ing", "kin", "nda", "o n", "oa ", "tai", "toa", "usa", "uto", "was", "yak", "zo ", " ji", " mw", "a p", "aia", "amu", "ang", "bik", "bo ", "del", "e w", "ene", "eng", "ich", "iri", "iti", "ito", "ki ", "kir", "ko ", "kuu", "mar", "mbo", "mil", "ngi", "ngo", "o l", "ong", "si ", "ta ", "tak", "u y", "umu", "usi", "uu ", "wam", " af", " ba", " li", " si", " zi", "a v", "ami", "atu", "awi", "eri", "fan", "fur", "ger", "i z", "isi", "izo", "lea", "mbi", "mwa", "nye", "o h", "o m", "oni", "rez", "saa", "ser", "sin", "tat", "tis", "tu ", "uin", "uki", "ur ", "wi ", "yar", " da", " en", " mp", " ny", " ta", " ul", " we", "a c", "a f", "ais", "apo", "ayo", "bar", "dhi", "e a", "eke", "eny", "eon", "hai", "han", "hiy", "hur", "i s", "imw", "kal", "kwe", "lak", "lam", "mak", "msa", "ne ", "ngu", "ru ", "sal", "swa", "te ", "ti ", "uku", "uma", "una", "uru");
-$GLOBALS["ngrams"]['tl'] = array("ng ", "ang", " na", " sa", "an ", "nan", "sa ", "na ", " ma", " ca", "ay ", "n g", " an", "ong", " ga", "at ", " pa", "ala", " si", "a n", "ga ", "g n", "g m", "ito", "g c", "man", "san", "g s", "ing", "to ", "ila", "ina", " di", " ta", "aga", "iya", "aca", "g t", " at", "aya", "ama", "lan", "a a", "qui", "a c", "a s", "nag", " ba", "g i", "tan", "'t ", " cu", "aua", "g p", " ni", "os ", "'y ", "a m", " n ", "la ", " la", "o n", "yan", " ay", "usa", "cay", "on ", "ya ", " it", "al ", "apa", "ata", "t n", "uan", "aha", "asa", "pag", " gu", "g l", "di ", "mag", "aba", "g a", "ara", "a p", "in ", "ana", "it ", "si ", "cus", "g b", "uin", "a t", "as ", "n n", "hin", " hi", "a't", "ali", " bu", "gan", "uma", "a d", "agc", "aqu", "g d", " tu", "aon", "ari", "cas", "i n", "niy", "pin", "a i", "gca", "siy", "a'y", "yao", "ag ", "ca ", "han", "ili", "pan", "sin", "ual", "n s", "nam", " lu", "can", "dit", "gui", "y n", "gal", "hat", "nal", " is", "bag", "fra", " fr", " su", "a l", " co", "ani", " bi", " da", "alo", "isa", "ita", "may", "o s", "sil", "una", " in", " pi", "l n", "nil", "o a", "pat", "sac", "t s", " ua", "agu", "ail", "bin", "dal", "g h", "ndi", "oon", "ua ", " ha", "ind", "ran", "s n", "tin", "ulo", "eng", "g f", "ini", "lah", "lo ", "rai", "rin", "ton", "g u", "inu", "lon", "o'y", "t a", " ar", "a b", "ad ", "bay", "cal", "gya", "ile", "mat", "n a", "pau", "ra ", "tay", "y m", "ant", "ban", "i m", "nas", "nay", "no ", "sti", " ti", "ags", "g g", "ta ", "uit", "uno", " ib", " ya", "a u", "abi", "ati", "cap", "ig ", "is ", "la'", " do", " pu", "api", "ayo", "gos", "gul", "lal", "tag", "til", "tun", "y c", "y s", "yon", "ano", "bur", "iba", "isi", "lam", "nac", "nat", "ni ", "nto", "od ", "pa ", "rgo", "urg", " m ", "adr", "ast", "cag", "gay", "gsi", "i p", "ino", "len", "lin", "m g", "mar", "nah", "to'", " de", "a h", "cat", "cau", "con", "iqu", "lac", "mab", "min", "og ", "par", "sal", " za", "ao ", "doo", "ipi", "nod", "nte", "uha", "ula", " re", "ill", "lit", "mac", "nit", "o't", "or ", "ora", "sum", "y p", " al", " mi", " um", "aco", "ada", "agd", "cab");
-$GLOBALS["ngrams"]['tlh'] = array("tlh", "e' ", "gh ", "i' ", " 'e", "u' ", " vi", "atl", "a' ", " gh", "ej ", " ho", " ch", " mu", " tl", "nga", "mey", "wi'", "be'", "an ", "ch ", "gan", "chu", "lh ", "ing", "'e'", "hin", "jat", "lhi", " da", " ja", "o' ", "ugh", "aq ", "cha", " po", "ey ", " 'a", " je", "'ej", " pa", "ng ", "ad ", " qa", "oh ", "eh ", "ah ", "gha", "je ", " lu", "hol", "aw'", " ji", "ong", "pu'", "aj ", "vad", "w' ", "' j", "ha'", "is ", "tah", "' '", "ang", "h '", "pon", "am ", "law", "mo'", "qu'", "hbe", "ol ", "vam", "agh", "mu'", "ahv", "bej", "ogh", "uch", "' v", "ach", "hug", " lo", " qu", "cho", "hva", "ij ", " la", "lu'", "vis", " ne", " pu", " so", " ta", " va", "'ac", "di'", "hu'", "lah", "moh", " 'o", "' m", "daq", "hah", "n h", "neh", "u'm", "ay'", "gho", "h v", "meh", "oy ", " ma", " nu", "'me", "el ", " ba", " be", " de", " ng", "' t", "h d", "hvi", "oq ", " wa", "' l", "'wi", "hme", "li'", "uq ", " bo", "bog", "del", "h p", "h t", "ich", "vil", " qe", " wi", "ahb", "ban", "eng", "haq", "hoh", "ov ", "viq", " ha", " ti", "' n", "' p", "'a'", "hwi", "igh", "lo'", "y' ", " du", " no", " yu", "'mo", "'va", "daj", "das", "egh", "hom", "muc", "om ", "otl", "us ", " bi", " tu", "' h", "chm", "h q", "hov", "nis", "qar", "uj ", "' q", "'ch", "h m", "hmo", "jih", "par", "wij", " hu", "' d", "'a ", "etl", "h g", "h j", "h l", "lod", "maq", "och", "wa'", "yuq", " di", " le", " pe", " ya", "'di", "che", "ech", "ih ", "ija", "in ", "j '", "j m", "lhw", "pa'", " 'i", " mi", " qi", " ro", " ru", "'be", "anp", "ghi", "ghu", "h b", "hay", "hch", "iq ", "npu", "od ", "paq", "qay", "rda", "soh", " do", " me", " qo", " sa", "' c", "' g", "' s", "'lu", "aml", "ard", "as ", "d p", "gme", "h n", "hta", "i'v", "j j", "jij", "len", "ngm", "qan", "qme", "vaj", "wiv", " mo", " ni", "'la", "'pu", "'qu", "ar ", "arm", "dwi", "g p", "ghd", "h c", "ham", "hla", "hqu", "ilo", "iqa", "iqi", "j p", "j t", "j v", "lad", "lho", "mar", "mug", "pus", "q s", "q t", "rgh", "rma", "sov", "ta'", "tin", "tu'", "u'd", "vet", "yli", "yu'", " to", "'oh", "aqq", "art", "at ", "ayl", "ayt", "et ", "haj", "har");
-$GLOBALS["ngrams"]['tn'] = array(" di", " le", "go ", "le ", " go", "ng ", " ts", "ya ", " ya", "sa ", "tlh", " mo", " bo", "a m", "lo ", "tsa", " e ", "o t", "a b", "wa ", " ka", "a k", "a t", "ka ", "a g", "eng", "olo", "o y", "la ", " a ", "a d", "ets", "mo ", "se ", " tl", " ba", "tsh", " ma", "ba ", "a l", "tse", "so ", "na ", "elo", " se", "ele", "e d", "o l", "lho", "e t", "di ", "e g", " kg", "dit", "kgo", "o k", "ang", "lha", "e m", "e e", "we ", "ane", "o m", "e k", "e l", "ong", "set", "wan", "ela", "tso", "tla", "o d", "e b", "ola", "ngw", "gwe", "o b", "aba", "atl", "a p", " o ", "a a", "o a", "otl", "a s", "o e", "dir", "thu", "ga ", " ga", "shw", "ots", "aka", "hab", "hwa", "aga", "o g", "gan", "tsw", "ana", "mol", " ke", "hut", " me", "ona", "lel", "its", "lao", "kga", "dik", "got", " fa", "let", " wa", "ose", "no ", "t h", "swe", "edi", "ats", "a n", "e s", "oko", "oth", "kwa", "kar", " th", "a e", "ala", "tir", "o n", "dip", "isa", "gat", "ti ", "ano", "bot", " nn", " ha", "len", "alo", "any", "aro", "iti", "iri", "o s", "sen", "net", "ke ", "ho ", "mai", "ika", "eka", "to ", "ith", "re ", "g m", "hat", "bo ", "g l", "et ", "emo", "ama", "iso", "rol", "fa ", "iwa", "kan", "she", "si ", "ao ", "g k", "wen", "lol", "o o", "bos", "itl", "a y", "the", "lwa", "e n", " la", "ore", " mm", "ko ", "tha", "e a", "eo ", "lhe", "bol", "ha ", " po", "isi", "i b", "lan", " na", "i t", "ale", "ne ", "gon", "ris", "ira", "bon", " sa", "g y", "g g", "pha", "oga", "mel", "ro ", "gol", "o w", " kw", "i l", " ti", "tlo", "log", "por", " ja", "a f", " ne", "hok", "lot", " pu", "e y", "uto", "g t", "hom", "okg", " ko", "o f", "ame", "gor", "ta ", " pe", "nts", " kh", "tho", "gel", "adi", "are", "ete", "ase", "mon", "heo", "oro", "omo", "nen", "nel", "ile", "nng", "ntl", "abo", "ogo", "ara", "nse", "ego", "hel", "uo ", "mog", "san", "ula", "rag", "kol", "te ", "etl", "bat", " te", "puo", "amo", "ofe", "lat", "ati", "ole", "rab", "tsi", "iro", "man", "ael", "ega", "lwe", "ra ", "din", "tle", "sek", "ing", "yo ", "a o", " re", "aot", "uso", "o r", "ere", "jwa", "aem", "lam", "lek", " jw", "gwa", "mok");
-$GLOBALS["ngrams"]['tr'] = array("lar", "en ", "ler", "an ", "in ", " bi", " ya", "eri", "de ", " ka", "ir ", "arı", " ba", " de", " ha", "ın ", "ara", "bir", " ve", " sa", "ile", "le ", "nde", "da ", " bu", "ana", "ini", "ını", "er ", "ve ", " yı", "lma", "yıl", " ol", "ar ", "n b", "nda", "aya", "li ", "ası", " ge", "ind", "n k", "esi", "lan", "nla", "ak ", "anı", "eni", "ni ", "nı ", "rın", "san", " ko", " ye", "maz", "baş", "ili", "rin", "alı", "az ", "hal", "ınd", " da", " gü", "ele", "ılm", "ığı", "eki", "gün", "i b", "içi", "den", "kar", "si ", " il", "e y", "na ", "yor", "ek ", "n s", " iç", "bu ", "e b", "im ", "ki ", "len", "ri ", "sın", " so", "ün ", " ta", "nin", "iği", "tan", "yan", " si", "nat", "nın", "kan", "rı ", "çin", "ğı ", "eli", "n a", "ır ", " an", "ine", "n y", "ola", " ar", "al ", "e s", "lik", "n d", "sin", " al", " dü", "anl", "ne ", "ya ", "ım ", "ına", " be", "ada", "ala", "ama", "ilm", "or ", "sı ", "yen", " me", "atı", "di ", "eti", "ken", "la ", "lı ", "oru", " gö", " in", "and", "e d", "men", "un ", "öne", "a d", "at ", "e a", "e g", "yar", " ku", "ayı", "dan", "edi", "iri", "ünü", "ği ", "ılı", "eme", "eği", "i k", "i y", "ıla", " ça", "a y", "alk", "dı ", "ede", "el ", "ndı", "ra ", "üne", " sü", "dır", "e k", "ere", "ik ", "imi", "işi", "mas", "n h", "sür", "yle", " ad", " fi", " gi", " se", "a k", "arl", "aşı", "iyo", "kla", "lığ", "nem", "ney", "rme", "ste", "tı ", "unl", "ver", " sı", " te", " to", "a s", "aşk", "ekl", "end", "kal", "liğ", "min", "tır", "ulu", "unu", "yap", "ye ", "ı i", "şka", "ştı", " bü", " ke", " ki", "ard", "art", "aşa", "n i", "ndi", "ti ", "top", "ı b", " va", " ön", "aki", "cak", "ey ", "fil", "isi", "kle", "kur", "man", "nce", "nle", "nun", "rak", "ık ", " en", " yo", "a g", "lis", "mak", "n g", "tir", "yas", " iş", " yö", "ale", "bil", "bul", "et ", "i d", "iye", "kil", "ma ", "n e", "n t", "nu ", "olu", "rla", "te ", "yön", "çık", " ay", " mü", " ço", " çı", "a a", "a b", "ata", "der", "gel", "i g", "i i", "ill", "ist", "ldı", "lu ", "mek", "mle", "n ç", "onu", "opl", "ran", "rat", "rdı", "rke", "siy", "son", "ta ", "tçı", "tın");
-$GLOBALS["ngrams"]['ts'] = array(" ku", "ku ", "na ", "ka ", "wa ", "a n", " sw", "a m", "ya ", "a k", " ti", "swi", "hi ", "la ", " ya", " le", " hi", "a t", "a v", " va", "ni ", " na", "ndz", " ma", "a h", " xi", "a s", "i n", "ele", "i k", "ana", "a l", "nga", "lo ", "va ", "le ", "aka", "ela", "irh", "eka", " vu", "iwa", "a x", " ka", "yi ", " wa", "isa", "sa ", "ko ", "ta ", "ga ", "wu ", "wi ", "tir", " ek", " mi", " ni", "o y", "elo", "awu", "isi", "swa", "i t", "hla", "a e", " ta", " ng", " la", "a y", "ri ", "eri", " ri", "rhi", "eke", "umb", "u t", "ndl", " yi", "lan", "i v", "esw", "mbe", "i l", "a r", "e k", "ang", "les", "ula", "ti ", "yon", "o w", "ona", "law", "xa ", "nel", "yo ", "lel", "iko", " lo", "amb", " a ", "i y", " xa", "ane", "wan", "i s", "ond", "fan", "end", "i h", "o l", "u k", "mbi", "n'w", "ke ", "dyo", " fa", "lam", "nhl", "o s", "ong", "no ", " ko", "u n", " ha", "ho ", "oko", "u h", "i m", "o n", " yo", "ngu", "o k", "u y", "ati", "u l", "van", "ulu", "and", "mba", "kum", "u v", "wo ", "be ", "ha ", "riw", "dza", "si ", " en", "o h", " hl", "o t", "eyi", " nt", "ila", "lok", "dzi", "nge", " mu", "ala", "to ", "a w", " by", "arh", "aku", "tsa", "wak", "rho", "'wa", " nd", "min", "lav", "tim", "ley", "tik", "dle", "tin", "mat", "ler", "let", "sel", "his", "mel", "lu ", "ika", "a a", "ngo", "eng", "o x", " nk", "amu", "siw", "ani", "eni", "ma ", " nh", "mi ", "swo", "eti", "tan", "mo ", "ham", "iwe", " kh", "han", "lek", "nti", "ung", "hak", "dzo", "ete", " ts", "ava", "hu ", "fum", "kar", "vul", " wu", "kul", "und", "i x", "nhu", "yis", "xik", "bis", "xi ", "e y", "ra ", "hle", " hu", "wek", "ano", "yen", "a d", "sis", "olo", "pfu", "i w", "nyi", "e n", "so ", "ki ", "fun", "iso", "tsh", "kon", "nku", "hel", "i b", "e h", "ari", "imi", "i e", "ind", "vum", "nts", "ime", "kom", "mfu", "ise", " mf", "hin", "dla", "vut", "gan", "i r", "ban", "bya", "mil", "int", "ats", " dy", "u s", "e x", "ile", "kel", "kwa", " no", "i f", "asi", "za ", "uri", "o m", "rha", "e l", "in'", "eta", "von", "i a", "kho", " wo", "iki", " ra", "u e", "o e", "zo ", "yin", "ink", "any", "ket");
-$GLOBALS["ngrams"]['uk'] = array(" на", " за", "ння", "ня ", "на ", " пр", "ого", "го ", "ськ", " по", " у ", "від", "ере", " мі", " не", "их ", "ть ", "пер", " ві", "ів ", " пе", " що", "льн", "ми ", "ні ", "не ", "ти ", "ати", "енн", "міс", "пра", "ува", "ник", "про", "рав", "івн", " та", "буд", "влі", "рів", " ко", " рі", "аль", "но ", "ому", "що ", " ви", "му ", "рев", "ся ", "інн", " до", " уп", "авл", "анн", "ком", "ли ", "лін", "ног", "упр", " бу", " з ", " ро", "за ", "и н", "нов", "оро", "ост", "ста", "ті ", "ють", " мо", " ні", " як", "бор", "ва ", "ван", "ень", "и п", "нь ", "ові", "рон", "сті", "та ", "у в", "ько", "іст", " в ", " ре", "до ", "е п", "заб", "ий ", "нсь", "о в", "о п", "при", "і п", " ку", " пі", " сп", "а п", "або", "анс", "аці", "ват", "вни", "и в", "ими", "ка ", "нен", "ніч", "она", "ої ", "пов", "ьки", "ьно", "ізн", "ічн", " ав", " ма", " ор", " су", " чи", " ін", "а з", "ам ", "ає ", "вне", "вто", "дом", "ент", "жит", "зни", "им ", "итл", "ла ", "них", "ниц", "ова", "ови", "ом ", "пор", "тьс", "у р", "ься", "ідо", "іль", "ісь", " ва", " ді", " жи", " че", " і ", "а в", "а н", "али", "вез", "вно", "еве", "езе", "зен", "ицт", "ки ", "ких", "кон", "ку ", "лас", "ля ", "мож", "нач", "ним", "ної", "о б", "ову", "оди", "ою ", "ро ", "рок", "сно", "спо", "так", "тва", "ту ", "у п", "цтв", "ьни", "я з", "і м", "ії ", " вс", " гр", " де", " но", " па", " се", " ук", " їх", "а о", "авт", "аст", "ают", "вар", "ден", "ди ", "ду ", "зна", "и з", "ико", "ися", "ити", "ког", "мен", "ном", "ну ", "о н", "о с", "обу", "ово", "пла", "ран", "рив", "роб", "ска", "тан", "тим", "тис", "то ", "тра", "удо", "чин", "чни", "і в", "ію ", " а ", " во", " да", " кв", " ме", " об", " ск", " ти", " фі", " є ", "а р", "а с", "а у", "ак ", "ані", "арт", "асн", "в у", "вик", "віз", "дов", "дпо", "дів", "еві", "енс", "же ", "и м", "и с", "ика", "ичн", "кі ", "ків", "між", "нан", "нос", "о у", "обл", "одн", "ок ", "оло", "отр", "рен", "рим", "роз", "сь ", "сі ", "тла", "тів", "у з", "уго", "уді", "чи ", "ше ", "я н", "я у", "ідп", "ій ", "іна", "ія ", " ка", " ни", " ос", " си", " то", " тр", " уг");
-$GLOBALS["ngrams"]['ur'] = array("یں ", " کی", "کے ", " کے", "نے ", " کہ", "ے ک", "کی ", "میں", " می", "ہے ", "وں ", "کہ ", " ہے", "ان ", "ہیں", "ور ", " کو", "یا ", " ان", " نے", "سے ", " سے", " کر", "ستا", " او", "اور", "تان", "ر ک", "ی ک", " اس", "ے ا", " پا", " ہو", " پر", "رف ", " کا", "ا ک", "ی ا", " ہی", "در ", "کو ", " ای", "ں ک", " مش", " مل", "ات ", "صدر", "اکس", "شرف", "مشر", "پاک", "کست", "ی م", " دی", " صد", " یہ", "ا ہ", "ن ک", "وال", "یہ ", "ے و", " بھ", " دو", "اس ", "ر ا", "نہی", "کا ", "ے س", "ئی ", "ہ ا", "یت ", "ے ہ", "ت ک", " سا", "لے ", "ہا ", "ے ب", " وا", "ار ", "نی ", "کہا", "ی ہ", "ے م", " سی", " لی", "انہ", "انی", "ر م", "ر پ", "ریت", "ن م", "ھا ", "یر ", " جا", " جن", "ئے ", "پر ", "ں ن", "ہ ک", "ی و", "ے د", " تو", " تھ", " گی", "ایک", "ل ک", "نا ", "کر ", "ں م", "یک ", " با", "ا ت", "دی ", "ن س", "کیا", "یوں", "ے ج", "ال ", "تو ", "ں ا", "ے پ", " چا", "ام ", "بھی", "تی ", "تے ", "دوس", "س ک", "ملک", "ن ا", "ہور", "یے ", " مو", " وک", "ائی", "ارت", "الے", "بھا", "ردی", "ری ", "وہ ", "ویز", "ں د", "ھی ", "ی س", " رہ", " من", " نہ", " ور", " وہ", " ہن", "ا ا", "است", "ت ا", "ت پ", "د ک", "ز م", "ند ", "ورد", "وکل", "گی ", "گیا", "ہ پ", "یز ", "ے ت", " اع", " اپ", " جس", " جم", " جو", " سر", "اپن", "اکث", "تھا", "ثری", "دیا", "ر د", "رت ", "روی", "سی ", "ملا", "ندو", "وست", "پرو", "چاہ", "کثر", "کلا", "ہ ہ", "ہند", "ہو ", "ے ل", " اک", " دا", " سن", " وز", " پی", "ا چ", "اء ", "اتھ", "اقا", "اہ ", "تھ ", "دو ", "ر ب", "روا", "رے ", "سات", "ف ک", "قات", "لا ", "لاء", "م م", "م ک", "من ", "نوں", "و ا", "کرن", "ں ہ", "ھار", "ہوئ", "ہی ", "یش ", " ام", " لا", " مس", " پو", " پہ", "انے", "ت م", "ت ہ", "ج ک", "دون", "زیر", "س س", "ش ک", "ف ن", "ل ہ", "لاق", "لی ", "وری", "وزی", "ونو", "کھن", "گا ", "ں س", "ں گ", "ھنے", "ھے ", "ہ ب", "ہ ج", "ہر ", "ی آ", "ی پ", " حا", " وف", " گا", "ا ج", "ا گ", "اد ", "ادی", "اعظ", "اہت", "جس ", "جمہ", "جو ", "ر س", "ر ہ", "رنے", "س م", "سا ", "سند", "سنگ", "ظم ", "عظم", "ل م", "لیے", "مل ", "موہ", "مہو", "نگھ", "و ص", "ورٹ", "وہن", "کن ", "گھ ", "گے ", "ں ج", "ں و", "ں ی", "ہ د", "ہن ", "ہوں", "ے ح", "ے گ", "ے ی", " اگ", " بع", " رو", " شا");
-$GLOBALS["ngrams"]['uz'] = array("ан ", "ган", "лар", "га ", "нг ", "инг", "нин", "да ", "ни ", "ида", "ари", "ига", "ини", "ар ", "ди ", " би", "ани", " бо", "дан", "лга", " ҳа", " ва", " са", "ги ", "ила", "н б", "и б", " кў", " та", "ир ", " ма", "ага", "ала", "бир", "ри ", "тга", "лан", "лик", "а к", "аги", "ати", "та ", "ади", "даг", "рга", " йи", " ми", " па", " бў", " қа", " қи", "а б", "илл", "ли ", "аси", "и т", "ик ", "или", "лла", "ард", "вчи", "ва ", "иб ", "ири", "лиг", "нга", "ран", " ке", " ўз", "а с", "ахт", "бўл", "иги", "кўр", "рда", "рни", "са ", " бе", " бу", " да", " жа", "а т", "ази", "ери", "и а", "илг", "йил", "ман", "пах", "рид", "ти ", "увч", "хта", " не", " со", " уч", "айт", "лли", "тла", " ай", " фр", " эт", " ҳо", "а қ", "али", "аро", "бер", "бил", "бор", "ими", "ист", "он ", "рин", "тер", "тил", "ун ", "фра", "қил", " ба", " ол", "анс", "ефт", "зир", "кат", "мил", "неф", "саг", "чи ", "ўра", " на", " те", " эн", "а э", "ам ", "арн", "ат ", "иш ", "ма ", "нла", "рли", "чил", "шга", " иш", " му", " ўқ", "ара", "ваз", "и у", "иқ ", "моқ", "рим", "учу", "чун", "ши ", "энг", "қув", "ҳам", " сў", " ши", "бар", "бек", "дам", "и ҳ", "иши", "лад", "оли", "олл", "ори", "оқд", "р б", "ра ", "рла", "уни", "фт ", "ўлг", "ўқу", " де", " ка", " қў", "а ў", "аба", "амм", "атл", "б к", "бош", "збе", "и в", "им ", "ин ", "ишл", "лаб", "лей", "мин", "н д", "нда", "оқ ", "р м", "рил", "сид", "тал", "тан", "тид", "тон", "ўзб", " ам", " ки", "а ҳ", "анг", "анд", "арт", "аёт", "дир", "ент", "и д", "и м", "и о", "и э", "иро", "йти", "нсу", "оди", "ор ", "си ", "тиш", "тоб", "эти", "қар", "қда", " бл", " ге", " до", " ду", " но", " пр", " ра", " фо", " қо", "а м", "а о", "айд", "ало", "ама", "бле", "г н", "дол", "ейр", "ек ", "ерг", "жар", "зид", "и к", "и ф", "ий ", "ило", "лди", "либ", "лин", "ми ", "мма", "н в", "н к", "н ў", "н ҳ", "ози", "ора", "оси", "рас", "риш", "рка", "роқ", "сто", "тин", "хат", "шир", " ав", " рў", " ту", " ўт", "а п", "авт", "ада", "аза", "анл", "б б", "бой", "бу ", "вто", "г э", "гин", "дар", "ден", "дун", "иде", "ион", "ирл", "ишг", "йха", "кел", "кўп", "лио");
-$GLOBALS["ngrams"]['ve'] = array("ha ", " vh", "a m", "na ", " u ", "a n", "tsh", "wa ", "a u", " na", "nga", "vha", " ts", " dz", " kh", "dza", "a v", "ya ", " ya", "a t", "ho ", "la ", " zw", " mu", "edz", "vhu", "ga ", "shi", "za ", "a k", " ng", "kha", " ma", "hum", "ne ", " nd", "o n", "lo ", "dzi", "shu", " ha", "a d", "o y", "nda", "ele", "zwi", "aho", "ang", "no ", " a ", "ela", "a z", "hu ", "sha", "i n", " wa", "ana", "hi ", "kan", "o d", "ano", "a h", "zwa", " th", " mi", "gan", "a l", "sa ", "han", "di ", "u t", "and", "ndi", "yo ", "the", "do ", "ri ", "vho", "ni ", "ka ", "uri", "si ", "o t", "mbe", "o w", "ane", "we ", "zo ", "i t", "e n", "i h", "she", "ush", "o k", "zi ", "da ", "a a", "thu", " la", "a p", "zan", " i ", "a s", "lwa", "ula", "i d", "aka", " do", "mis", "hed", "ita", "li ", " hu", "iwa", " lu", "i v", "he ", " ka", "elo", "so ", "amb", "avh", " sh", "o v", "i k", "lel", "u v", "dzo", "u s", " fh", "mo ", "nwe", "o l", "umi", "wah", "isi", "hel", "a i", "vel", "adz", "tan", "i m", "ath", "thi", "wi ", " ur", "hat", "ine", "le ", "vhe", "any", "a y", "hon", "isa", "ala", "o a", "alu", "udi", "umb", " bv", "ash", " te", " li", "lus", "nya", "has", "led", "swa", "hus", "o i", "umo", "one", "nde", "tha", " it", "kho", "ngo", "mus", "hak", "e y", "ea ", "ivh", "o m", "u n", "hin", "tho", "mut", "ayo", "fhi", " sa", "tel", "hul", "hun", "ulo", "ith", "ma ", " yo", "lan", "e v", " ph", "go ", "i a", "o u", "hud", " pf", "uka", "zhi", "uvh", "dzw", "ing", "elw", "ila", "wo ", "mbo", "u d", "ite", "isw", "asi", "e k", "ndu", "fhe", "o h", "mel", "u b", "ika", "bo ", "gud", "dzh", "kon", "ifh", " ta", "e d", "uth", " ho", "i z", "wan", "ulu", "mad", "inw", "oth", "ani", "dis", "wit", "ou ", "bve", "ets", "u i", "adi", "e m", "fha", "nah", "dal", "win", " si", "sho", " in", "yam", "lay", "eka", "a f", "i u", "end", "i y", "alo", "i l", "uso", "mul", "ta ", "del", "u k", " mb", "pha", " di", "dad", "ali", "o s", "pfu", "khw", "e a", " ko", " ne", "hen", "mas", "ume", "ini", "ish", "udz", "ira", "oni", "luk", "nel", "iso", "mba", "dzu", "hom", "i s", "zwo", "ngu", "ara", "unz");
-$GLOBALS["ngrams"]['xh'] = array("la ", " ku", "lo ", "nga", "a k", " ng", "oku", " kw", " uk", "a n", "uku", "ye ", "a i", "yo ", "ela", "ele", "a u", "nye", "we ", "wa ", "ama", "e n", "ise", "aba", "ba ", "ho ", "enz", "o n", "ngo", "kub", "nge", "ath", "fun", "o e", "lel", "ung", "uba", "ko ", "elo", "ezi", "o k", "the", "kwa", "na ", "kwe", "ang", "e i", "le ", "ka ", "esi", "o y", " na", "e k", "eth", "pha", " in", "kun", "nzi", "and", "ni ", "ban", " ye", " no", "lwa", "lun", " ok", "any", "zi ", "li ", " ne", "ulu", "a e", "eli", "gok", "o l", "ebe", "und", "isa", "seb", "ndo", " ez", "tho", "o i", "do ", "ben", "ing", "kwi", "ndl", "uny", "ala", "a a", "eyo", "e u", "kan", " ab", "thi", "i k", "i n", "o u", "o z", "elw", "sa ", "sek", "ayo", "het", "o o", "eka", " um", "hi ", "bo ", "so ", "isi", "wen", "lwe", "aph", "a l", "ya ", "eko", "ana", " yo", "kuf", "ini", "imi", "ali", "ha ", "awu", "wan", "ent", "uth", "tha", "za ", "ula", "kho", " ii", "ane", "e a", "iso", "uph", " le", "ile", "zin", "nts", " si", "eng", "nok", "ong", "hla", "zwe", " el", "oka", "eki", "lis", "azi", " lo", "tsh", " am", "ufu", "ant", "isw", "o a", "ngu", "o s", " ba", "int", "eni", "une", "wul", "hul", "sel", "i e", "use", "lan", "ke ", "nis", "emi", " li", " is", "iph", " im", "a o", "aka", "mfu", " zi", "ink", "mal", "ley", "man", "nya", "nek", "akh", "ume", " ko", "alo", "tu ", "i u", "ntu", "izw", "kel", "izi", "i i", "si ", "gan", "ase", "ind", "i a", "ndi", "nel", "alu", "sis", "ubo", "kut", "mth", "kus", "lek", "mis", "nde", " zo", " we", "ani", "ga ", "iko", "siz", "no ", "phu", "e e", "hon", "ond", "ne ", "ith", "kul", "gam", "gen", "pho", " iz", "phe", "hat", "khu", "iin", "han", "zo ", "lu ", "ulo", "nda", "qo ", "zik", "hel", "o m", " lw", "zis", "dle", "uhl", "men", "olo", "mel", "del", "nza", "oko", "okw", "olu", "kuk", "nte", "swa", "law", "enk", " ya", "i y", "gaq", "sha", "aqo", "e l", "ikh", "nkq", "ule", " ka", "onk", "thu", "wo ", "bon", "kup", "qub", "a y", "kqu", "dla", " es", "he ", "ano", "lum", "be ", "iga", " ze", "o w", "aku", "mga", "nke", "te ", " ol", "ze ", "kum", "emf", "esh");
-$GLOBALS["ngrams"]['zu'] = array("oku", "la ", "nga", " ng", "a n", " ku", "a k", "thi", " uk", "ezi", "e n", "uku", "le ", "lo ", "hi ", "wa ", " no", "a u", "ela", "we ", "a i", "ni ", "ele", "zin", "uth", "ama", "elo", "pha", "ing", "aba", "ath", "and", "enz", "eth", "esi", "ma ", "lel", " um", " ka", "the", "ung", "nge", "ngo", "tho", "nye", "kwe", "eni", "izi", "ye ", " kw", "ndl", "ho ", "a e", "na ", "zi ", "het", "kan", "e u", "e i", "und", "ise", "isi", "nda", "kha", "ba ", "i k", "nom", "fun", " ez", " iz", "ke ", "ben", "o e", "isa", "zwe", "kel", "ka ", "aka", "nzi", "o n", "e k", "oma", "kwa", " ne", "any", "ang", "hla", "i u", "mth", "kub", "o k", "ana", "ane", "ikh", "ebe", "kut", "ha ", " is", "azi", "ulu", "seb", "ala", "onk", "ban", "i e", "azw", "wen", " ab", "han", "a a", "i n", "imi", "lan", "hat", "lwa", " na", "ini", "akh", "li ", "ngu", "nke", "nok", "ume", "eke", "elw", "yo ", "aph", "kus", " es", " ok", "iph", " im", "mel", "i i", " lo", " in", " am", "kho", "za ", "gok", "sek", "lun", "kun", "lwe", "sha", "sik", "kuf", "hak", "a y", "thu", "sa ", "o u", "khu", "ayo", "hul", "e a", "ali", "eng", "lu ", "ne ", " ko", "eli", "uba", "dle", "e e", "ith", " yo", "a l", "nel", "mis", " si", "kul", "a o", "sis", "lok", "gen", "o z", "i a", "emi", "uma", "eka", "alo", "man", "isw", "tha", "o i", "lon", "so ", "uph", "uhl", "ntu", "zim", "mal", "ind", "wez", " ba", "o o", " yi", " we", "ula", "phe", "o y", "ile", "o l", "wo ", "wel", "ga ", "tu ", "hle", "okw", "fan", " le", "kaz", "ase", "ani", "nde", "bo ", "ngi", "ule", " em", "men", "iny", "amb", "mbi", "gan", "ifu", "o s", "ant", "hel", "ika", "ona", "i l", "fut", " fu", "ze ", "u a", "nhl", "nin", " zo", "end", "sig", "u k", "gab", "ufa", "ish", "ush", "kuz", "no ", "gam", "kuh", " ye", "nya", "nez", "zis", "dlu", "kat", "dla", "tsh", " se", "ike", "kuq", "gu ", "osi", "swa", "lul", " zi", "ima", "e l", "kup", "mo ", "nza", "asi", "ko ", "kum", "lek", "she", "umt", "uny", "yok", "wan", "wam", "ame", "ong", "lis", "mkh", "ahl", "ale", "use", "o a", "alu", "gap", "si ", "hlo", "nje", "omt", "o w", "okh", "he ", "kom", "i s");
-
-/**
- * Lister les ngrams contenus dans un texte
- * @param string $string
- * @param int $ng_number
- * @param int $ng_max_chars
- * @return array
- */
-function createNGrams($string, $ng_number = 300, $ng_max_chars = 4){
-
-       // Attention: $string n'est pas un mot, mais le texte complet
-       // On va le couper pour éviter les timeout, 
-       // mais il faut qu'il reste suffisamment long pour que la détection reste qualitative
-       // Au passage: on fait les calculs en multibyte.
-       $string = mb_substr($string, 0, 5000, "utf-8");
-
-       // Attention: il faut traiter les chaines en utf-8 !!!
-       //iterate over each word, each character, all possible n-grams
-       $word = " " . $string . " ";
-       $length = mb_strlen($word, "utf-8");
-       for ($pos = 0; $pos<$length; $pos++){ //start position within word
-               $chars = 3;
-               if (($pos+$chars)<$length){ //if not beyond end of word
-                       $array_ngram[] = mb_substr($word, $pos, $chars, "utf-8");
-               }
-       }
-       //count-> value(frequency, int)... key(ngram, string)
-       $ng_frequency = array_count_values($array_ngram);
-       //sort array by value(frequency) desc
-       arsort($ng_frequency);
-       //use only top frequent ngrams
-       $most_frequent = array_slice($ng_frequency, 0, $ng_number);
-       $sub_ng = array();
-       foreach ($most_frequent as $ng => $number_frequencey){
-               $sub_ng[] = $ng;
-       }
-
-       return $sub_ng;
-}
-
-
-/**
- * Trouver la langue la/les langues plausibles en fonction des ngrams trouves dans le texte et des ngrams possibles
- * @param array $sub_ng
- *   jeu de Ngrams trouves dans le texte
- * @param array $lm_ng
- *   jeu de Ngrams possibles
- * @param int $max_delta
- * @return string
- */
-function compareNGrams($sub_ng, $lm_ng, $max_delta = 140000){
-       foreach ($lm_ng as $lm_basename => $language){
-               $delta = 0;
-               //compare each ngram of input text to current lm-array
-               foreach ($sub_ng as $key => $existing_ngram){
-                       //match
-                       if (in_array($existing_ngram, $language)){
-                               $delta += abs($key-array_search($existing_ngram, $language));
-                               //no match
-                       } else {
-                               $delta += 400;
-                       }
-                       //abort: this language already differs too much
-                       if ($delta>$max_delta){
-                               break;
-                       }
-               } // End comparison with current language
-               //include only non-aborted languages in result array
-               if ($delta<($max_delta-400)){
-                       $result[$lm_basename] = $delta;
-               }
-       } //End comparison all languages
-       if (!isset($result)){
-               $result = '';
-       } else {
-               asort($result);
-       }
-       return $result;
-}
-
-/**
- * Retourne la proportion de texte qui n'est pas dans la plage utf cherchee
- * @param string $texte
- * @param string $plage
- * @return float
- */
-function tester_plage_utf($texte, $plage){
-
-       $total = mb_strlen($texte, "UTF-8");
-
-       $test = mb_strlen(
-               preg_replace("/" . $plage . "/ui", "", $texte),
-               "UTF-8"
-       );
-//     echo "<h4>".($test / $total)."<h4> ";
-       return ($test/$total);
-}
-
-/**
- * Reduire le jeu de langue possibles en fonction des plages utf8 utilisees dans le texte
- * @param string $texte
- * @return array|bool|string
- */
-function detecter_plages_utf($texte){
-
-       if (tester_plage_utf($texte, "[\x{0041}-\x{024F}\x{1E00}-\x{1EFF}]")<0.5){
-               // Latin
-               return array("fr", "en", "de", "it", "es", 'af', 'br', 'ca', 'ceb', "da", "fi", "nl", "nr", "pt", "pt_BR", "pt_PT", "sk", "ha", "haw", "hr", "pl", "cs", "az", "cy", "et", "ro", "eu", "hu", "id", "is", "la", "lt", "lv", "nb", "nso", "sl", "so", "sq", "ss", "st", "sv", "sw", "tl", "tlh", "tn", "tr", "ts", "ve", "xh", "zu");
-       } else if (tester_plage_utf($texte, "[\x{0400}-\x{0523}]")<0.5){
-               // Cyrillique
-               return array("ru", "bg", "kk", "uk", "ky", "mn", "uz", "mk", "sr");
-       } else if (tester_plage_utf($texte, "[\x{0370}-\x{03ff}\x{1F00}-\x{1FFE}]")<0.5){
-               // Grec/Copte
-               return "el";
-       } else if (tester_plage_utf($texte, "[\x{0530}-\x{058A}]")<0.5){
-               // Armenien
-               return "hy";
-       } else if (tester_plage_utf($texte, "[\x{0590}-\x{05F4}]")<0.5){
-               // Hebreux
-               return "he";
-       } else if (tester_plage_utf($texte, "[\x{0600}-\x{077F}]")<0.5){
-               // Arabe-farsi-pachtoune-urdu
-               return array("ar", "fa", "ps", "ur");
-       } else if (tester_plage_utf($texte, "[\x{3040}-\x{30FF}]")<0.7){
-               // Japonais (hiragana / katakana)
-               return "ja";
-       } else if (tester_plage_utf($texte, "[\x{4E00}-\x{9FBB}\x{4E00}–\x{9FBF}]")<0.7){
-               // Chinois
-               return "zh";
-       } else if (tester_plage_utf($texte, "[\x{0E00}-\x{0E5B}]")<0.5){
-               // Thai
-               return "th";
-       } else if (tester_plage_utf($texte, "[\x{1100}-\x{11F8}\x{3130}-\x{318E}\x{AC00}-\x{D7A3}]")<0.5){
-               // Hangul  - Koreen
-               return "ko";
-       }
-
-       return false;
-}
-
-
-/**
- * Detecter langue
- *
- * Premiere passe: detecter dans quel alphabet le texte est écrit
- * ce qui permet de limiter le nombre de réponse
- * (par exemple: des caractères «arabes» ne peuvent être que de l'arabe, du farsi, du pachtourne ou du urdu)
- * Deuxieme passe: faire un test classique sur les trigrams (uniquement sur les langues possibles de la première passe)
- *
- * @param string $texte
- * @return bool|string
- */
-function _detecter_langue($texte){
-       $texte = strip_tags($texte);
-       $texte = str_replace("’", "'", $texte);
-       $texte = str_replace("\"", " ", $texte);
-
-       // Si les fonctions mb_ ne sont pas disponibles
-       // ou si texte trop court, impossible de détecter la langue
-       if ( !function_exists('mb_strlen')
-         OR !function_exists('mb_substr')
-         OR mb_strlen($texte, "utf-8")<6 ){
-               return false;
-       }
-
-       $possibles = detecter_plages_utf($texte);
-
-       if (!$possibles){
-               return false;
-       } else if (!is_array($possibles)){
-               return $possibles;
-       } else {
-               $ngrams = array();
-               foreach ($possibles as $lang){
-                       $ngrams[$lang] = $GLOBALS["ngrams"][$lang];
-               }
-       }
-
-       $sub_ng = createNGrams($texte);
-       $result_array = compareNGrams($sub_ng, $ngrams, 140000);
-
-//     print_r($result_array);
-
-       $lang = false;
-       if (is_array($result_array) AND count($result_array)){
-               while (!$lang AND $r = each($result_array)){
-                       list($lang, $val) = $r;
-               }
-       }
-       return $lang;
-}
-
-?>
\ No newline at end of file
diff --git a/www/plugins/nospam/inc/nospam.php b/www/plugins/nospam/inc/nospam.php
deleted file mode 100644 (file)
index d3533ba..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-/**
- * Plugin No-SPAM
- * (c) 2008 Cedric Morin Yterium.net
- * Licence GPL
- *
- */
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-function nospam_hash_env() {
-       static $res ='';
-       if ($res) return $res;
-       $ip = explode('.',$GLOBALS['ip']);
-       array_pop($ip);
-       $ip = implode('.',$ip).".xxx";
-       $res = md5($ip. $_SERVER['HTTP_USER_AGENT']);
-       #spip_log("jeton $res pour ".$ip. $_SERVER['HTTP_USER_AGENT'],"jetons");
-       return $res;
-}
-
-
-/**
- * Calcule une cle de jeton pour un formulaire
- *
- * @param string $form
- *   nom du formulaire
- * @param string $qui
- *   identifiant du visiteur a qui est attribue le jeton
- * @return string
- *   cle calculee
- */
-function creer_jeton($form, $qui=NULL) {
-       $time = date('Y-m-d-H');
-       if (is_null($qui)){
-               if (isset($GLOBALS['visiteur_session']['id_auteur']) AND intval($GLOBALS['visiteur_session']['id_auteur']))
-                       $qui = ":".$GLOBALS['visiteur_session']['id_auteur'].":".$GLOBALS['visiteur_session']['nom'];
-               elseif (!defined('_IS_BOT') OR !_IS_BOT) { // pas de jeton pour les bots qui n'ont rien d'interessant a poster
-                       $qui = nospam_hash_env();
-               }
-       }
-       include_spip('inc/securiser_action');
-       // le jeton prend en compte l'heure et l'identite de l'internaute
-       return calculer_cle_action("jeton$form$time$qui");
-}
-
-/**
- * Verifie une cle de jeton pour un formulaire
- *
- * @param string $jeton
- *   cle recue
- * @param string $form nom du formulaire
- *   nom du formulaire
- * @param string $qui
- *   identifiant du visiteur a qui est attribue le jeton
- * @return bool cle correcte ?
- */
-function verifier_jeton($jeton, $form, $qui=NULL) {
-       $time = time();
-       $time_old = date('Y-m-d-H',$time-3600);
-       $time = date('Y-m-d-H',$time);
-
-       if (is_null($qui)){
-               if (isset($GLOBALS['visiteur_session']['id_auteur']) AND intval($GLOBALS['visiteur_session']['id_auteur']))
-                       $qui = ":".$GLOBALS['visiteur_session']['id_auteur'].":".$GLOBALS['visiteur_session']['nom'];
-               else {
-                       $qui = nospam_hash_env();
-               }
-       }
-       
-       $ok = (verifier_cle_action("jeton$form$time$qui",$jeton)
-                       or verifier_cle_action("jeton$form$time_old$qui",$jeton));
-       #if (!$ok)
-       #       spip_log("Erreur form:$form qui:$qui agent:".$_SERVER['HTTP_USER_AGENT']." ip:".$GLOBALS['ip'],'fauxjeton');
-       return $ok;
-}
-
-
-/**
- * Compte le nombre de caracteres d'une chaine,
- * mais en supprimant tous les liens 
- * (qu'ils soient ou non ecrits en raccourcis SPIP)
- * ainsi que tous les espaces en trop
- *
- * @param string $texte
- *   texte d'entree
- * @param bool $propre
- *   passer le texte dans propre ou non
- * @return int
- *   compte du texte nettoye
- */
-function compter_caracteres_utiles($texte, $propre=true) {
-       include_spip('inc/charsets');
-       if ($propre) $texte = propre($texte);
-       $u = $GLOBALS['meta']['pcre_u'];
-       // regarder si il y a du contenu en dehors des liens !
-       $texte = PtoBR($texte);
-       $texte = preg_replace(",<a.*</a>,{$u}Uims",'',$texte);
-       // \W matche tous les caracteres non ascii apres 0x80
-       // et vide donc les chaines constitues de caracteres unicodes uniquement
-       // on remplace par un match qui elimine uniquement
-       // les non \w  et les non unicodes
-       $texte = trim(preg_replace(",[^\w\x80-\xFF]+,ims",' ',$texte));
-
-       // on utilise spip_strlen pour compter la longueur correcte
-       // pour les chaines unicodes
-       return spip_strlen($texte);
-}
-
-
-/**
- * Retourne un tableau d'analyse du texte transmis
- * Cette analyse concerne principalement des statistiques sur les liens
- *
- * @param string $texte texte d'entree
- * @return array rapport d'analyse
- */
-function analyser_spams($texte) {
-       $infos = array(
-               'caracteres_utiles' => 0, // nombre de caracteres sans les liens
-               'nombre_liens' => 0, // nombre de liens
-               'caracteres_texte_lien_min' => 0, // nombre de caracteres du plus petit titre de lien
-               'contenu_cache' => false, // du contenu est caché en CSS ?
-       );
-
-       if (!$texte) return $infos;
-
-       // on travaille d'abord sur le texte 'brut' tel que saisi par
-       // l'utilisateur pour ne pas avoir les class= et style= que spip ajoute
-       // sur les raccourcis.
-       
-       // on ne tient pas compte des blocs <code> et <cadre> ni de leurs contenus
-       include_spip("inc/texte_mini");
-       if (!function_exists('echappe_html')) // SPIP 2.x
-               include_spip("inc/texte");
-       $texte_humain = echappe_html($texte);
-       // on repère dans ce qui reste la présence de style= ou class= qui peuvent
-       // servir à masquer du contenu
-       // les spammeurs utilisent le laxisme des navigateurs pour envoyer aussi style =
-       // soyons donc mefiant
-       // (mais en enlevant le base64 !)
-       $texte_humain = str_replace('class="base64"','',$texte_humain);
-       $hidden = ",(<(img|object)|\s(?:style|class)\s*=[^>]+>),UimsS";
-       if (preg_match($hidden,$texte_humain)) {
-               // suspicion de spam
-               $infos['contenu_cache'] = true;
-       }
-
-       include_spip('inc/texte');
-       $texte = propre($texte);
-
-       // caracteres_utiles
-       $infos['caracteres_utiles'] = compter_caracteres_utiles($texte, false);
-
-       // nombre de liens
-       $liens = array_filter(extraire_balises($texte,'a'),'pas_lien_ancre');
-       $infos['nombre_liens'] = count($liens);
-       $infos['liens'] = $liens;
-
-       // taille du titre de lien minimum
-       if (count($liens)) {
-               // supprimer_tags() s'applique a tout le tableau,
-               // mais attention a verifier dans le temps que ca continue a fonctionner
-               # $titres_liens = array_map('supprimer_tags', $liens);
-               $titres_liens = supprimer_tags($liens);
-               $titres_liens = array_map('strlen', $titres_liens);
-               $infos['caracteres_texte_lien_min'] = min($titres_liens);
-       }
-       return $infos;
-}
-
-/**
- * Vérifier si un lien est *n'est pas* une ancre : dans ce cas, ne pas le compte (ici, fonction de filtre de tableau)
- * Cette analyse concerne principalement des statistiques sur les liens
- *
- * @param string $texte lien
- * @return boolean : true -> 
- */
-function pas_lien_ancre($texte){
-       return substr(extraire_attribut($texte,'href'),0,1) == '#' ? false : true;
-               
-}
-
-/**
- * Compare les domaines des liens fournis avec la presence dans la base
- *
- * @param array $liens
- *   liste des liens html
- * @param int $seuil
- *   seuil de detection de presence : nombre d'enregistrement qui ont deja un lien avec le meme domaine
- * @param string $table
- *   table sql
- * @param array $champs
- *   champs a prendre en compte dans la detection
- * @param null|string $condstatut
- *   condition sur le statut='spam' pour ne regarder que les enregistrement en statut spam
- * @return bool
- */
-function rechercher_presence_liens_spammes($liens,$seuil,$table,$champs,$condstatut=null){
-       include_spip("inc/filtres");
-
-       if (is_null($condstatut))
-               $condstatut = "statut=".sql_quote('spam');
-       if ($condstatut)
-               $condstatut = "$condstatut AND ";
-
-       // limiter la recherche au mois precedent
-       $trouver_table = charger_fonction("trouver_table","base");
-       if ($desc = $trouver_table($table)
-         AND isset($desc['date'])){
-               $depuis = date('Y-m-d H:i:s',strtotime("-1 month"));
-               $condstatut .= $desc['date'].">".sql_quote($depuis)." AND ";
-       }
-
-       // ne pas prendre en compte les liens sur le meme domaine que celui du site
-       $allowed = array();
-       $tests = array($GLOBALS['meta']['adresse_site'],url_de_base());
-       foreach ($tests as $t){
-               if ($parse = parse_url($t)
-                       AND $parse['host']){
-                       $host = explode(".",$parse['host']);
-                       while (count($host)>2) array_shift($host);
-                       $allowed[] = implode(".",$host);
-               }
-       }
-       if (count($allowed)){
-               $allowed = array_map('preg_quote',$allowed);
-               $allowed = implode("|",$allowed);
-               $allowed = "/($allowed)$/";
-               spip_log("domaines whitelist pour les liens spams : $allowed","nospam");
-       }
-       else
-               $allowed = "";
-
-
-       $hosts = array();
-       foreach ($liens as $lien){
-               $url = extraire_attribut($lien,"href");
-               if ($parse = parse_url($url)
-                 AND $parse['host']
-                 AND (!$allowed OR !preg_match($allowed,$parse['host'])))
-                       $hosts[] = $parse['host'];
-       }
-
-       $hosts = array_unique($hosts);
-       $hosts = array_filter($hosts);
-
-       // pour chaque host figurant dans un lien, regarder si on a pas deja eu des spams avec ce meme host
-       // auquel cas on refuse poliment le message
-       foreach($hosts as $h){
-               $like = " LIKE ".sql_quote("%$h%");
-               $where = $condstatut . "(".implode("$like OR ",$champs)."$like)";
-               if (($n=sql_countsel($table,$where))>=$seuil){
-                       // loger les 10 premiers messages concernes pour aider le webmestre
-                       $all = sql_allfetsel(id_table_objet($table),$table,$where,'','','0,10');
-                       $all = array_map('reset',$all);
-                       spip_log("$n liens trouves $like dans table $table (".implode(",",$all).") [champs ".implode(',',$champs)."]","nospam");
-                       return $h;
-               }
-       }
-       return false;
-}
-?>
diff --git a/www/plugins/nospam/inclure/nobot.html b/www/plugins/nospam/inclure/nobot.html
deleted file mode 100644 (file)
index 5960e56..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[(#REM) Piege a robots spammeurs ]
-<[(#ENV{div,'div'})] class="editer saisie_session_email" style="display: none;">
-       <label for="give_me_your_email"><:antispam_champ_vide:></label>
-       <input type="text" class="text email" name="email_nobot" id="give_me_your_email" value="#ENV{email_nobot}" size="10" />
-</[(#ENV{div,'div'})]>
diff --git a/www/plugins/nospam/lang/nospam.xml b/www/plugins/nospam/lang/nospam.xml
deleted file mode 100644 (file)
index 2f810ca..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<traduction module="nospam" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/nospam/lang/" reference="fr">
-       <langue code="ar" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=ar" total="10" traduits="5" relire="0" modifs="0" nouveaux="5" pourcent="50.00">
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=de" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=en" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Benitron" lien="https://trad.spip.net/auteur/benitron" />
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=es" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fa" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=fa" total="10" traduits="5" relire="0" modifs="0" nouveaux="5" pourcent="50.00">
-               <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=fr" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=fr_tu" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=nl" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=pt_br" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="filipaun" lien="https://trad.spip.net/auteur/filipaun" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/nospam?lang_cible=sk" total="10" traduits="10" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/nospam/lang/nospam_ar.php b/www/plugins/nospam/lang/nospam_ar.php
deleted file mode 100644 (file)
index a2ef187..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_jeton' => 'غير قادر على مراعاة رسالتك. أشكركم للإعادة !',
-       'erreur_spam' => 'غير قادر على الأخذ في الاعتبار لرسالتك !',
-       'erreur_spam_doublon' => 'وجود رسالة مماثلة !',
-       'erreur_spam_ip' => 'تعليقات كثيرة جدا هي على حساب الجودة !',
-
-       // F
-       'forum_saisie_texte_info' => 'لتنسيق رسالتك، لا تدعم هذه الاستمارة الا اختصارات SPIP مثل <code>[-&gt;url] {{أسود}} {مائل}&lt;quote&gt; &lt;رموز برمجية&gt;</code> &lt;إطار&gt;</cadre> وعلامات HTML كـ<code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. لإنشاء فقرات، يكفي ترك أسطر فارغة.'
-);
diff --git a/www/plugins/nospam/lang/nospam_de.php b/www/plugins/nospam/lang/nospam_de.php
deleted file mode 100644 (file)
index 50b55cf..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'Bilder sowie die HTML-Attribute <tt>class</tt> und <tt>style</tt> sind verboten.',
-       'erreur_blacklist' => 'Sie wurden auf die Schwarze Liste gesetzt und können keine Beiträge posten..',
-       'erreur_jeton' => 'Ihr Beitrag konnte nicht verarbeitet werden. Bitte posten Sie ihn erneut!',
-       'erreur_spam' => 'Ihr Beitrag kann nicht berücksichtigt werden!',
-       'erreur_spam_doublon' => 'Es existiert bereits ein identischer Beitrag !',
-       'erreur_spam_ip' => 'Zuviele Kommentare sind nicht gut für die Qualität!',
-       'erreur_url_deja_spammee' => 'Dieser Beitrag enthält zuviele Links, die wie SPAM aussehen. Bitte entfernen.',
-
-       // F
-       'forum_saisie_texte_info' => 'Zur Formatierung Ihres Beitrag stehen Ihnen nur folgende SPIP-Tags zur Verfügung: <code>[-&gt;url] {{gras}} {italique} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> sowie als HTML <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>.',
-
-       // I
-       'info_ip_suspecte' => 'Ihre IP-Adresse setht unter SPAM-Verdacht. Bitte bestätign Sie Ihre guten Absichten.',
-
-       // L
-       'label_message_licite' => 'Dies ist kein mißbräuchlicher Beitrag.'
-);
diff --git a/www/plugins/nospam/lang/nospam_en.php b/www/plugins/nospam/lang/nospam_en.php
deleted file mode 100644 (file)
index 3cdbf44..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'It is not possible to insert images or use the html attributes <tt>class</tt> or <tt>style</tt>',
-       'erreur_blacklist' => 'You have been blacklisted, you can not post messages anymore.',
-       'erreur_jeton' => 'Unable to take account of your message. Thank you to resubmit!',
-       'erreur_spam' => 'Unable to take account of your message!',
-       'erreur_spam_doublon' => 'An identical message already exists!',
-       'erreur_spam_ip' => 'Too many comments detrimental to the quality!',
-       'erreur_url_deja_spammee' => 'This message contains suspicious links that look like SPAM. Thanks to delete them.',
-
-       // F
-       'forum_saisie_texte_info' => 'For the formatting of your message, this form only accepts SPIP shortcuts <code>[-&gt;url] {{bold}} {italic} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> et le code HTML <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. To create paragraphs, simply leave blank lines.',
-
-       // I
-       'info_ip_suspecte' => 'Your IP address is suspected to send SPAMs. Thank you to confirm your are not doing so.',
-
-       // L
-       'label_message_licite' => 'This is not an abusive post'
-);
diff --git a/www/plugins/nospam/lang/nospam_es.php b/www/plugins/nospam/lang/nospam_es.php
deleted file mode 100644 (file)
index 86dd066..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'No está permitido insertar imágenes ni el uso de atributos html <tt>class</tt> ou <tt>style</tt>',
-       'erreur_blacklist' => 'Usted ha sido metido en lista negra, no puede enviar más mensaje.',
-       'erreur_jeton' => 'Su mensaje no ha sido tomado en cuenta. ¡Gracias por enviarlo de nuevo!',
-       'erreur_spam' => '¡Imposible tomar en cuenta su mensaje!',
-       'erreur_spam_doublon' => '¡Un mensaje idéntico ya existe!',
-       'erreur_spam_ip' => '¡Demasiados comentarios perjudiciales para la calidad!',
-       'erreur_url_deja_spammee' => 'Este mensaje contiene enlaces sospechos de ser SPAM. Gracias por eliminarlos.',
-
-       // F
-       'forum_saisie_texte_info' => 'Para aplicar el formato de su mensaje, este formulario no acepta más que los atajos SPIP <code>[-&gt;url] {{gras}} {italique} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> et le code HTML <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. Para crear párrafos, deje simplemente una línea vacía entre los mismos.',
-
-       // I
-       'info_ip_suspecte' => 'Su dirección IP es sospechosa de generar SPAM. Gracias por confirmar sus buenas intenciones. ',
-
-       // L
-       'label_message_licite' => 'Éste no es un mensaje abusivo'
-);
diff --git a/www/plugins/nospam/lang/nospam_fa.php b/www/plugins/nospam/lang/nospam_fa.php
deleted file mode 100644 (file)
index e06a550..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_jeton' => 'روي پيام شما نمي‌توان حساب كرد. ممنون مكرر فرماييد!',
-       'erreur_spam' => 'نمي‌توان روي پيام شما حساب كرد!',
-       'erreur_spam_doublon' => 'يك پيام شناخته شده موجود است!',
-       'erreur_spam_ip' => 'نظرات زيادي به زيان كيفيت!',
-
-       // F
-       'forum_saisie_texte_info' => 'اين فرم ميان‌ برهاي اسپيپ  <code>[-&gt;url] {{gras}} {italique} &lt;quote&gt; &lt;code&gt;</code>و  كد اچ.تي.ام.ال را <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code> مي‌پذيرد . براي ساختن پارگراف فقط يك سطر خالي بگذاريد. '
-);
diff --git a/www/plugins/nospam/lang/nospam_fr.php b/www/plugins/nospam/lang/nospam_fr.php
deleted file mode 100644 (file)
index fc0bfc9..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/nospam/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'Il n’est pas permis d’insérer des images ni d’utiliser les attributs html <tt>class</tt> ou <tt>style</tt>',
-       'erreur_blacklist' => 'Vous avez été mis sur liste noire, vous ne pouvez plus poster de message.',
-       'erreur_jeton' => 'Impossible de prendre en compte votre message. Merci de le soumettre à nouveau !',
-       'erreur_spam' => 'Impossible de prendre en compte votre message !',
-       'erreur_spam_doublon' => 'Un message identique existe déjà !',
-       'erreur_spam_ip' => 'Trop de commentaires nuit à la qualité !',
-       'erreur_url_deja_spammee' => 'Ce message contient des liens suspects qui ressemblent à du SPAM. Merci de les retirer.',
-
-       // F
-       'forum_saisie_texte_info' => 'Pour la mise en forme de votre message, ce formulaire n’accepte que les raccourcis SPIP <code>[-&gt;url] {{gras}} {italique} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> et le code HTML <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. Pour créer des paragraphes, laissez simplement des lignes vides.',
-
-       // I
-       'info_ip_suspecte' => 'Votre adresse IP est suspectée de procéder à du SPAM. Merci de confirmer votre bonne intention.',
-
-       // L
-       'label_message_licite' => 'Ceci n’est pas un message abusif'
-);
diff --git a/www/plugins/nospam/lang/nospam_fr_tu.php b/www/plugins/nospam/lang/nospam_fr_tu.php
deleted file mode 100644 (file)
index 79d685e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'Il n’est pas permis d’insérer des images ni d’utiliser les attributs html <tt>class</tt> ou <tt>style</tt>',
-       'erreur_blacklist' => 'Tu as été mis sur liste noire, tu ne peux plus poster de message.',
-       'erreur_jeton' => 'Impossible de prendre en compte votre message. Merci de le soumettre à nouveau !',
-       'erreur_spam' => 'Impossible de prendre en compte ton message !',
-       'erreur_spam_doublon' => 'Un message identique existe déjà !',
-       'erreur_spam_ip' => 'Trop de commentaires nuit à la qualité !',
-       'erreur_url_deja_spammee' => 'Ce message contient des liens suspects qui ressemblent à du SPAM. Merci de les retirer.',
-
-       // F
-       'forum_saisie_texte_info' => 'Pour la mise en forme de ton message, ce formulaire n’accepte que les raccourcis SPIP <code>[-&gt;url] {{gras}} {italique} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> et le code HTML <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. Pour créer des paragraphes, laisse simplement des lignes vides.',
-
-       // I
-       'info_ip_suspecte' => 'Ton adresse IP est suspectée de procéder à du SPAM. Merci de confirmer ta bonne intention.',
-
-       // L
-       'label_message_licite' => 'Ceci n’est pas un message abusif'
-);
diff --git a/www/plugins/nospam/lang/nospam_nl.php b/www/plugins/nospam/lang/nospam_nl.php
deleted file mode 100644 (file)
index 0b29f28..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'HTML-attributen <tt>class</tt> of <tt>style</tt> zijn niet toegestaan!',
-       'erreur_blacklist' => 'U staat op de zwarte lijst en mag geen verdere berichten plaatsen.',
-       'erreur_jeton' => 'Dit bericht kan niet worden aanvaard. Voer het nogmaals in!',
-       'erreur_spam' => 'Dit bericht kan niet worden aanvaard!',
-       'erreur_spam_doublon' => 'Er bestaat al een identiek bericht!',
-       'erreur_spam_ip' => 'Trop de commentaires nuit à la qualité !',
-       'erreur_url_deja_spammee' => 'Dit bericht bevat koppelingen die op SPAM lijken. Verwijder ze aub.',
-
-       // F
-       'forum_saisie_texte_info' => 'Dit formulier accepteert alleen SPIP code <code>[-&gt;url] {{gras}} {italique} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> en HTML code <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. Op paragrafen aan te maken, kun je gewoon een paar regels leeg laten.',
-
-       // I
-       'info_ip_suspecte' => 'Uw IP-adres wordt ervan verdacht SPAM te verzenden. Laat uw goede bedoelingen blijken.',
-
-       // L
-       'label_message_licite' => 'Dit is geen verkeerd bericht'
-);
diff --git a/www/plugins/nospam/lang/nospam_pt_br.php b/www/plugins/nospam/lang/nospam_pt_br.php
deleted file mode 100644 (file)
index eab13de..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'Não é permitido inserir figuras nem utilizar atributos html <tt>class</tt> ou <tt>style</tt>',
-       'erreur_blacklist' => 'Você foi colocado na lista negra, você não pode mais postar mensagens.',
-       'erreur_jeton' => 'Impossível levar em conta a sua mensagem. Tente novamente!',
-       'erreur_spam' => 'Impossível levar em conta a sua mensagem!',
-       'erreur_spam_doublon' => 'Uma mensagem idêntica já existe!',
-       'erreur_spam_ip' => 'Muitos comentários prejudicam a qualidade!',
-       'erreur_url_deja_spammee' => 'Esta mensagem contem links suspeitos que se parecem com SPAM. Obrigado de os retirar.',
-
-       // F
-       'forum_saisie_texte_info' => 'Para a formatação da sua mensagem, este formulário aceita apenas os atalhos SPIP <code>[-&gt;url] {{negrito}} {itálico} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> e o código HTML <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. Para criar parágrafos , deixe simplesmente linhas vazias.',
-
-       // I
-       'info_ip_suspecte' => 'Seu endereço IP é suspeito de realizar SPAM. Obrigado de confirmar a sua boa intenção.',
-
-       // L
-       'label_message_licite' => 'Esta mensagem não é abusiva'
-);
diff --git a/www/plugins/nospam/lang/nospam_sk.php b/www/plugins/nospam/lang/nospam_sk.php
deleted file mode 100644 (file)
index 07e079b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/nospam?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_attributs_html_interdits' => 'Nie je povolené vkladať obrázky ani používať atribúty html <tt>class</tt> alebo <tt>style</tt>',
-       'erreur_blacklist' => 'Zaradili vás na čiernu listinu, nemôžete posielať správy.',
-       'erreur_jeton' => 'Vaša správa sa nedá posúdiť. Ďakujeme vám, že ju pošlete znova.',
-       'erreur_spam' => 'Vaša správa sa nedá posúdiť.',
-       'erreur_spam_doublon' => 'Rovnaká správa už existuje!',
-       'erreur_spam_ip' => 'Príliš veľa komentárov znižuje kvalitu!',
-       'erreur_url_deja_spammee' => 'V tejto správe sú podozrivé odkazy, ktoré vyzerajú ako spam. Ďakujeme vám za ich odstránenie.',
-
-       // F
-       'forum_saisie_texte_info' => 'Na formátovanie správy tento formulár akceptuje iba skratky SPIPu <code>[-&gt;url] {{tučné}} {kurzíva} &lt;quote&gt; &lt;code&gt;</code> &lt;cadre&gt;</cadre> a kód HTML <code>&lt;q&gt; &lt;del&gt; &lt;ins&gt;</code>. Ak chcete robiť odseky, jednoducho vynechajte niekoľko prázdnych riadkov.',
-
-       // I
-       'info_ip_suspecte' => 'Vaša IP adresa je podozrivá z vytvárania SPAMU. Ďakujeme, že potvrdíte svoj dobrý úmysel.',
-
-       // L
-       'label_message_licite' => 'Toto nie je nevhodná správa'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam.xml b/www/plugins/nospam/lang/paquet-nospam.xml
deleted file mode 100644 (file)
index 98222fc..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<traduction module="paquet-nospam" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/nospam/lang/" reference="fr">
-       <langue code="ar" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=ar" total="2" traduits="1" relire="0" modifs="0" nouveaux="1" pourcent="50.00">
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=de" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=es" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=fr_tu" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=nl" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=pt_br" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=sk" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/nospam/lang/paquet-nospam_ar.php b/www/plugins/nospam/lang/paquet-nospam_ar.php
deleted file mode 100644 (file)
index cb13016..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'توقف المتطفل! فلتر البريد المزعج في الرسائل ، دون ازعاج لمستخدم صادق.'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_de.php b/www/plugins/nospam/lang/paquet-nospam_de.php
deleted file mode 100644 (file)
index 403cfda..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'SPAM stoppen! Ein Filter ohne Nebenwirkungen für ehrliche Nutzer.',
-       'nospam_slogan' => 'Begrenzt das SPAM-Risiko in Foren'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_en.php b/www/plugins/nospam/lang/paquet-nospam_en.php
deleted file mode 100644 (file)
index b23b3f2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'Stop spam! Filter spam in messages, without nuisance to honest users.',
-       'nospam_slogan' => 'Reduce the risk of spams in the forums'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_es.php b/www/plugins/nospam/lang/paquet-nospam_es.php
deleted file mode 100644 (file)
index 88ccd70..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'Detenga el spam! Filtro de spam en los mensajes, sin molestias a los usuarios honestos.',
-       'nospam_slogan' => 'Limitar el riesgo de spams en los foros'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_fr.php b/www/plugins/nospam/lang/paquet-nospam_fr.php
deleted file mode 100644 (file)
index 0300ac7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/nospam/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'Halte au spam ! Filtrez les spams dans les messages, sans nuisance pour les utilisateurs honnêtes.',
-       'nospam_slogan' => 'Limiter le risque de spams dans les forums'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_fr_tu.php b/www/plugins/nospam/lang/paquet-nospam_fr_tu.php
deleted file mode 100644 (file)
index 4cb724f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'Halte au spam ! Filtre les spams dans les messages, sans nuisance pour les utilisateurs honnêtes.',
-       'nospam_slogan' => 'Limiter le risque de spams dans les forums'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_nl.php b/www/plugins/nospam/lang/paquet-nospam_nl.php
deleted file mode 100644 (file)
index 7da22cf..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'Stop SPAM! Filter berichten zonder oprechte gebruikers ermee lastig te vallen.',
-       'nospam_slogan' => 'Beperk het risico van SPAM in forums'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_pt_br.php b/www/plugins/nospam/lang/paquet-nospam_pt_br.php
deleted file mode 100644 (file)
index 9b1f71b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'Basta de spam! Filtre os spams nas mensagens, sem incomodar os usuários legítimos.',
-       'nospam_slogan' => 'Limitar o risco de spams nos fóruns'
-);
diff --git a/www/plugins/nospam/lang/paquet-nospam_sk.php b/www/plugins/nospam/lang/paquet-nospam_sk.php
deleted file mode 100644 (file)
index dc2607a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-nospam?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // N
-       'nospam_description' => 'Zastavte spam! Filtrujte spam v príspevkoch bez toho, aby ste si pohnevali čestných používateľov.',
-       'nospam_slogan' => 'Obmedzí nebezpečenstvo spamov v diskusných fórach'
-);
diff --git a/www/plugins/nospam/nospam/verifier_formulaire_ecrire_auteur.php b/www/plugins/nospam/nospam/verifier_formulaire_ecrire_auteur.php
deleted file mode 100644 (file)
index d284048..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/**
- * Plugin No-SPAM
- * (c) 2008 Cedric Morin Yterium.net
- * Licence GPL
- *
- */
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-/**
- * Verification supplementaire antispam sur le formulaire_ecrire_auteur
- *
- * @param array $flux
- * @return array
- */
-function nospam_verifier_formulaire_ecrire_auteur_dist($flux){
-       $form = $flux['args']['form'];
-       if (!isset($flux['data']['texte_message_auteur'])){
-               include_spip("inc/nospam");
-               include_spip("inc/texte");
-               // regarder si il y a du contenu en dehors des liens !
-               $texte_message_auteur = _request('texte_message_auteur');
-               $caracteres = compter_caracteres_utiles($texte_message_auteur);
-               if ($caracteres < 10){
-                       $flux['data']['texte_message_auteur'] = _T('forum_attention_dix_caracteres');
-                       unset($flux['data']['previsu']);
-               }
-               // on analyse le sujet
-               $infos_sujet = analyser_spams(_request('sujet_message_auteur'));
-               // si un lien dans le sujet = spam !
-               if ($infos_sujet['nombre_liens'] > 0){
-                       $flux['data']['sujet_message_auteur'] = _T('nospam:erreur_spam');
-                       unset($flux['data']['previsu']);
-               }
-
-               // on analyse le texte
-               $infos_texte = analyser_spams($texte_message_auteur);
-               if ($infos_texte['nombre_liens'] > 0) {
-                       // si un lien a un titre de moins de 3 caracteres = spam !
-                       if ($infos_texte['caracteres_texte_lien_min'] < 3) {
-                               $flux['data']['texte_message_auteur'] = _T('nospam:erreur_spam');
-                       }
-                       // si le texte contient plus de trois liens = spam !
-                       if ($infos_texte['nombre_liens'] >= 3)
-                               $flux['data']['texte_message_auteur'] = _T('nospam:erreur_spam');
-               }
-       }
-
-       return $flux;
-}
\ No newline at end of file
diff --git a/www/plugins/nospam/nospam/verifier_formulaire_forum.php b/www/plugins/nospam/nospam/verifier_formulaire_forum.php
deleted file mode 100644 (file)
index 9aae6d8..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-/**
- * Plugin No-SPAM
- * (c) 2008 Cedric Morin Yterium.net
- * Licence GPL
- *
- */
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-/**
- * Verification supplementaire antispam sur le formulaire_forum
- *
- * @param array $flux
- * @return array
- */
-function nospam_verifier_formulaire_forum_dist($flux){
-       $form = $flux['args']['form'];
-       if (!isset($flux['data']['texte'])
-               AND $GLOBALS['meta']['forums_texte'] == 'oui'){
-
-               $texte = _request('texte');
-               include_spip("inc/nospam");
-               // regarder si il y a du contenu en dehors des liens !
-               $caracteres = compter_caracteres_utiles($texte);
-               $min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10);
-               if ($caracteres < $min_length){
-                       $flux['data']['texte'] = _T('forum_attention_dix_caracteres');
-               }
-
-               // regarder si il y a du contenu cache
-               if (!isset($flux['data']['texte'])){
-                       $infos = analyser_spams($texte);
-                       if (isset($infos['contenu_cache']) AND $infos['contenu_cache']){
-                               $flux['data']['texte'] = _T('nospam:erreur_attributs_html_interdits');
-                       }
-               }
-
-               // regarder si il y a des liens deja references par des spammeurs
-               if (!isset($flux['data']['texte'])
-                 AND isset($infos['liens'])
-                 AND count($infos['liens'])){
-
-
-                       if ($h = rechercher_presence_liens_spammes($infos['liens'],_SPAM_URL_MAX_OCCURENCES,'spip_forum',array('texte'))){
-                               spip_log("Refus message de forum qui contient un lien vers $h","nospam");
-                               $flux['data']['texte'] = _T('nospam:erreur_url_deja_spammee');
-                       }
-               }
-
-               // on prend en compte la checkbox de confirmation
-               // si le flag en session est bien leve
-               if (_request('notabuse')){
-                       session_start();
-                       if ($_SESSION['notabuse_check']){
-                               unset($_SESSION['notabuse_check']);
-                               $_SESSION['notabuse_checked'] = true;
-                               // on leve une globale pour la fin de ce hit, a toute fin utile (puisque plus rien en $_SESSION)
-                               $GLOBALS['notabuse_checked'] = true;
-                       }
-               }
-               if (!count($flux['data'])){
-                       if (nospam_check_ip_status($GLOBALS['ip'])!=='ok'){
-                               session_start();
-                               if ($_SESSION['notabuse_checked']){
-                                       // ok on retire de la session le check qui ne sert qu'une fois
-                                       unset($_SESSION['notabuse_checked']);
-                                       // et on laisse passer
-                               }
-                               else {
-                                       $flux['data']['texte'] = _T('nospam:info_ip_suspecte')."<br />
-                                       <span class='choix'>
-                                       <input type='checkbox' name='notabuse' value='1' id='notabuse'/> <label for='notabuse'>"
-                                       ._T('nospam:label_message_licite')."</label>
-                                       </span>";
-                                       $_SESSION['notabuse_check'] = true;
-                                       spip_log("notabuse_check sur IP ".$GLOBALS['ip'],"nospam");
-                               }
-                       }
-               }
-
-
-               // si il y a une erreur, pas de previsu, on reste bloque a la premiere etape
-               if (isset($flux['data']['texte'])){
-                       unset($flux['data']['previsu']);
-               }
-               // sinon, si on est au moment du post final (confirmation apres previsu => pas de previsu ni d'erreur)
-               // on calcule la "popuparlite de post"
-               elseif(!count($flux['data'])) {
-                       $now = $_SERVER['REQUEST_TIME'];
-                       // calculer la "popularite" des POST forums et forums avec liens
-                       if (!isset($GLOBALS['meta']['nospam_pop_forum_post'])) $GLOBALS['meta']['nospam_pop_forum_post'] = 0;
-                       if (!isset($GLOBALS['meta']['nospam_pop_forum_postwlink'])) $GLOBALS['meta']['nospam_pop_forum_postwlink'] = 0;
-                       if (!isset($GLOBALS['meta']['nospam_pop_date'])) $GLOBALS['meta']['nospam_pop_date'] = date('Y-m-d H:i:s',$now);
-
-                       $duree = max($now-strtotime($GLOBALS['meta']['nospam_pop_date']),1);
-                       list($a,$b) = nospam_popularite_constantes($duree);
-                       spip_log("Pop forum : $duree, $a, $b","nospam");
-                       // decrementer
-                       if ($duree>1800){
-                               $GLOBALS['meta']['nospam_pop_date'] = date('Y-m-d H:i:s',$now);
-                               $GLOBALS['meta']['nospam_pop_forum_post'] = round(floatval($GLOBALS['meta']['nospam_pop_forum_post'])*$a,2);
-                               $GLOBALS['meta']['nospam_pop_forum_postwlink'] = round(floatval($GLOBALS['meta']['nospam_pop_forum_postwlink'])*$a,2);
-                               spip_log("Pop Decremente : ".$GLOBALS['meta']['nospam_pop_forum_post'].", ".$GLOBALS['meta']['nospam_pop_forum_postwlink'],"nospam");
-                       }
-                       // incrementer
-                       $GLOBALS['meta']['nospam_pop_forum_post']=round(floatval($GLOBALS['meta']['nospam_pop_forum_post'])+$b,2);
-                       if (isset($infos['liens']) AND count($infos['liens'])){
-                               $GLOBALS['meta']['nospam_pop_forum_postwlink']=round(floatval($GLOBALS['meta']['nospam_pop_forum_postwlink'])+$b,2);
-                       }
-                       ecrire_meta("nospam_pop_forum_post",$GLOBALS['meta']['nospam_pop_forum_post']);
-                       ecrire_meta("nospam_pop_forum_postwlink",$GLOBALS['meta']['nospam_pop_forum_postwlink']);
-                       ecrire_meta("nospam_pop_date",$GLOBALS['meta']['nospam_pop_date']);
-                       spip_log("Pop Incremente : ".$GLOBALS['meta']['nospam_pop_forum_post'].", ".$GLOBALS['meta']['nospam_pop_forum_postwlink'],"nospam");
-               }
-       }
-
-       return $flux;
-}
-
-//
-// Popularite, modele logarithmique
-//
-function nospam_popularite_constantes($duree){
-       // duree de demi-vie d'une visite dans le calcul de la popularite (en jours)
-       $demivie = 0.5;
-       // periode de reference en jours
-       $periode = 1;
-       // $a est le coefficient d'amortissement depuis la derniere mesure
-       $a = pow(2, - $duree / ($demivie * 24 * 3600));
-       // $b est la constante multiplicative permettant d'avoir
-       // une visite par jour (periode de reference) = un point de popularite
-       // (en regime stationnaire)
-       // or, magie des maths, ca vaut log(2) * duree journee/demi-vie
-       // si la demi-vie n'est pas trop proche de la seconde ;)
-       $b = log(2) * $periode / $demivie;
-
-       return array($a,$b);
-}
diff --git a/www/plugins/nospam/nospam/verifier_formulaire_signature.php b/www/plugins/nospam/nospam/verifier_formulaire_signature.php
deleted file mode 100644 (file)
index 7695e65..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * Plugin No-SPAM
- * (c) 2008 Cedric Morin Yterium.net
- * Licence GPL
- *
- */
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-/**
- * Verification supplementaire antispam sur le formulaire_signature
- *
- * @param array $flux
- * @return array
- */
-function nospam_verifier_formulaire_signature_dist($flux){
-       $form = $flux['args']['form'];
-       $id_article = $flux['args']['args'][0];
-       $row = sql_fetsel('*', 'spip_petitions', "id_article=".intval($id_article));
-       if ((!isset($flux['data']['message'])) && ($row['message']  == "oui")){
-               include_spip("inc/nospam");
-               include_spip("inc/texte");
-               // regarder si il y a du contenu en dehors des liens !
-               $message = _request('message');
-               // on analyse le texte
-               $infos_texte = analyser_spams($message);
-               if ($infos_texte['nombre_liens'] > 0) {
-                       // si un lien a un titre de moins de 3 caracteres = spam !
-                       if ($infos_texte['caracteres_texte_lien_min'] < 3) {
-                               $flux['data']['message_erreur'] = _T('nospam:erreur_spam');
-                       }
-                       // si le texte contient plus de trois liens = spam !
-                       if ($infos_texte['nombre_liens'] >= 2)
-                               $flux['data']['message_erreur'] = _T('nospam:erreur_spam');
-               }
-       }
-       // S'il y a un lien dans le champ session_nom => spam
-       if (!isset($flux['data']['session_nom'])){
-               include_spip("inc/nospam");
-               $infos_texte = analyser_spams(_request('session_nom'));
-               if ($infos_texte['nombre_liens'] > 0) {
-                       $flux['data']['message_erreur'] = _T('nospam:erreur_spam');
-                       spip_log("Lien dans le champ session_nom ".$flux['data']['message_erreur'],'nospam');
-               }
-       }
-       return $flux;
-}
\ No newline at end of file
diff --git a/www/plugins/nospam/nospam_pipelines.php b/www/plugins/nospam/nospam_pipelines.php
deleted file mode 100644 (file)
index d7a4f1e..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-<?php
-/**
- * Plugin No-SPAM
- * (c) 2008-2011 Cedric Morin Yterium.net
- * Licence GPL
- *
- */
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-if (!defined('_SPAM_URL_MAX_OCCURENCES')) define('_SPAM_URL_MAX_OCCURENCES', 3);
-if (!defined('_SPAM_ENCRYPT_NAME')) define('_SPAM_ENCRYPT_NAME', false);
-
-/**
- * Lister les formulaires a prendre en charge contre le SPAM
- * pour verifier le nobot et le jeton sur un formulaire, l'ajouter a cette liste
- * par le pipeline nospam_lister_formulaires
- * @return void
- */
-function nospam_lister_formulaires() {
-       if (!isset($GLOBALS['formulaires_no_spam']))
-               $GLOBALS['formulaires_no_spam'] = array();
-       $formulaires = array_merge($GLOBALS['formulaires_no_spam'], array('inscription', 'forum', 'ecrire_auteur', 'signature', 'recommander', 'newsletter_subscribe', 'newsletter_unsubscribe'));
-       return pipeline('nospam_lister_formulaires', $formulaires);
-}
-
-/**
- * Ajouter le champ de formulaire 'nobot' au besoin
- *
- * @param array $flux
- * @return array
- */
-function nospam_recuperer_fond($flux) {
-       // determiner le nom du formulaire
-       $fond = strval($flux['args']['fond']);
-       if (false !== $pos = strpos($fond, 'formulaires/')) {
-               $form = substr($fond, $pos + 12);
-               if (in_array($form, nospam_lister_formulaires())) {
-                       // on ajoute le champ 'nobot' si pas present dans le formulaire
-                       nospam_inserer_nobot($flux['data']['texte']);
-               }
-       }
-       return $flux;
-}
-
-/**
- * Ajouter le champ de formulaire 'nobot' au besoin
- *
- * @param array $flux
- * @return array
- */
-function nospam_formulaire_fond($flux) {
-       // determiner le nom du formulaire
-       $form = $flux['args']['form'];
-       if (in_array($form, nospam_lister_formulaires())) {
-               // on ajoute le champ 'nobot' si pas present dans le formulaire
-               nospam_inserer_nobot($flux['data']);
-       }
-       return $flux;
-}
-
-/**
- * Inserer un champ nobot au hasard dans le form
- * et crypter tous les name
- * @param string $texte
- */
-function nospam_inserer_nobot(&$texte) {
-       if ((false === strpos($texte, 'name="email_nobot"'))
-               AND (false !== $pos = strpos($texte, '</form>'))
-       ) {
-               // essayer de s'inserer au hasard entre 2 div/li du form
-               if (preg_match_all(",<(div|li)\b[^>]*class=['\"]editer[^>]*,ims", $texte, $m)
-                       AND $i = rand(0, count($m[0]) - 1)
-                       AND $p = strpos($texte, $m[0][$i])) {
-                       $nobot = recuperer_fond("inclure/nobot", array('email_nobot' => '', 'div' => $m[1][$i]));
-                       $texte = substr_replace($texte, $nobot, $p, 0);
-               } // et sinon a la fin juste avant la(les) balise(s) </form>
-               else {
-                       $nobot = recuperer_fond("inclure/nobot", array('email_nobot' => ''));
-                       $texte = str_replace('</form>', $nobot . '</form>', $texte);
-               }
-       }
-       if (_SPAM_ENCRYPT_NAME) {
-               // recuperer toutes les balises input, textarea, select
-               $balises = array_merge(extraire_balises($texte, 'input'));
-               foreach ($balises as $k => $b) {
-                       if (in_array(extraire_attribut($b, "type"), array("hidden", "file")))
-                               unset($balises[$k]);
-               }
-               $balises = array_merge($balises,
-                       extraire_balises($texte, 'textarea'),
-                       extraire_balises($texte, 'select'));
-
-               $key = "";
-               if (preg_match(",<input type='hidden' name='_jeton' value='([^>]*)' />,Uims", $texte, $m))
-                       $key = $m[1];
-
-               foreach ($balises as $k => $b) {
-                       if ($name = extraire_attribut($b, "name")
-                               AND strncmp($name, "session_", 8) !== 0) {
-                               // cas des truc[chose] : on ne brouille que truc
-                               $crypted_name = explode("[", $name);
-                               $crypted_name[0] = nospam_name_encode($crypted_name[0], $key);
-                               $crypted_name = implode("[", $crypted_name);
-                               $b_e = inserer_attribut($b, "name", $crypted_name);
-                               $texte = str_replace($b, $b_e, $texte);
-                       }
-               }
-       }
-}
-
-function nospam_name_encode($name, $key = "") {
-       static $private_key = array();
-       static $encoded = array();
-       if (isset($encoded[$key][$name]))
-               return $encoded[$key][$name];
-       if (!$name) return $name;
-       if (!isset($private_key[$key])) {
-               $private_key[$key] = nospam_private_key($key);
-               if (!function_exists('_xor'))
-                       include_spip("inc/filtres");
-       }
-       $cname = _xor("xx_$name", $key);
-       $cname = base64_encode($cname);
-       $cname = "x_" . rtrim(strtr(base64_encode($cname), '+/', '-_'), '=');
-       return $encoded[$key][$name] = $cname;
-}
-
-function nospam_name_decode($name, $key = "") {
-       static $private_key = array();
-       static $decoded = array();
-       if (isset($decoded[$key][$name]))
-               return $decoded[$key][$name];
-       if (!$name) return $name;
-       if (strncmp($name, "x_", 2) !== 0) return $name;
-       if (!isset($private_key[$key])) {
-               $private_key[$key] = nospam_private_key($key);
-               if (!function_exists('_xor'))
-                       include_spip("inc/filtres");
-       }
-       $cname = substr($name, 2);
-       $cname = base64_decode(str_pad(strtr($cname, '-_', '+/'), strlen($cname) % 4, '=', STR_PAD_RIGHT));
-       $cname = base64_decode($cname);
-       $cname = _xor($cname, $key);
-       if (strncmp($cname, "xx_", 3) !== 0) return $name;
-       return $decoded[$key][$name] = substr($cname, 3);
-}
-
-function nospam_private_key($key) {
-       $private_key = $key . __FILE__;
-       if (function_exists('sha1'))
-               $private_key = sha1($private_key);
-       else
-               $private_key = md5($private_key);
-       $private_key = pack("H*", $private_key);
-       return $private_key;
-}
-
-
-/**
- * Ajouter un jeton temporaire lie a l'heure et a l'IP pour limiter la reutilisation possible du formulaire
- *
- * @param array $flux
- * @return array
- */
-function nospam_formulaire_charger($flux) {
-       $form = $flux['args']['form'];
-       if (in_array($form, nospam_lister_formulaires())
-               AND $flux['data']
-               AND is_array($flux['data'])
-       ) {
-               include_spip("inc/nospam");
-               $jeton = creer_jeton($form);
-               if (!isset($flux['data']['_hidden'])) {
-                       $flux['data']['_hidden'] = "";
-               }
-               $flux['data']['_hidden'] .= "<input type='hidden' name='_jeton' value='$jeton' />";
-
-               if (_SPAM_ENCRYPT_NAME) {
-                       $flux['data']['_hidden'] .= "<input type='hidden' name='_encrypt' value='1' />";
-                       // recuperer les autosave encryptes si possible
-                       if (is_array($flux['data'])
-                               AND isset($flux['data']['_autosave_id'])
-                               AND $cle_autosave = $flux['data']['_autosave_id']
-                               AND include_spip("inc/cvt_autosave")
-                               AND function_exists("autosave_clean_value")) {
-
-                               $je_suis_poste = $flux['args']['je_suis_poste'];
-
-                               $cle_autosave = serialize($cle_autosave);
-                               $cle_autosave = $form . "_" . md5($cle_autosave);
-
-                               // si on a un backup en session et qu'on est au premier chargement, non poste
-                               // on restitue les donnees
-                               if (isset($GLOBALS['visiteur_session']['session_autosave_' . $cle_autosave])
-                                       AND !$je_suis_poste) {
-                                       parse_str($GLOBALS['visiteur_session']['session_autosave_' . $cle_autosave], $vars);
-                                       if (isset($vars['_jeton'])
-                                               AND $key = $vars['_jeton']) {
-                                               foreach ($vars as $name => $val) {
-                                                       if (($dname = nospam_name_decode($name, $key)) !== $name
-                                                               AND isset($flux['data'][$dname]))
-                                                               $flux['data'][$dname] = (is_string($val) ? autosave_clean_value($val) : array_map('autosave_clean_value', $val));
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       return $flux;
-}
-
-/**
- * Verifier le jeton temporaire lie a l'heure et a l'IP pour limiter la reutilisation possible du formulaire
- *
- * @param array $flux
- * @return array
- */
-function nospam_formulaire_verifier($flux) {
-       static $deja = false;
-       $form = $flux['args']['form'];
-       if (in_array($form, nospam_lister_formulaires())) {
-               include_spip("inc/nospam");
-               $jeton = _request('_jeton');
-               // y a-t-il des names encryptes a decrypter ?
-               // si oui on les decrypte puis on relance la verif complete
-               // attention, du coup verifier() est appele 2 fois dans ce cas (peut poser probleme ?)
-               // donc on repasse ici une deuxieme fois, et il ne faut pas relancer le decryptage
-               if (_request('_encrypt') AND !$deja) {
-                       $deja = true;
-                       $re_verifier = false;
-                       foreach ($_POST as $k => $v) {
-                               $kd = nospam_name_decode($k, $jeton);
-                               if ($kd !== $k) {
-                                       set_request($kd, $v);
-                                       $re_verifier = true;
-                               }
-                       }
-                       // si on a decode des champs, il faut relancer toute la chaine de verification et sortir
-                       if ($re_verifier) {
-                               $verifier = charger_fonction("verifier", "formulaires/$form/", true);
-                               $flux['data'] = pipeline(
-                                       'formulaire_verifier',
-                                       array(
-                                               'args' => array('form' => $form, 'args' => $flux['args']['args']),
-                                               'data' => $verifier ? call_user_func_array($verifier, $flux['args']['args']) : array())
-                               );
-                               $deja = false;
-                               return $flux;
-                       }
-               }
-               // si l'encrypt a ete active depuis l'affichage initial de ce form, on rebalance l'erreur technique
-               // pour reforcer un POST
-               if (_SPAM_ENCRYPT_NAME AND !_request('_encrypt')) {
-                       spip_log('SPAM_ENCRYPT_NAME active mais _encrypt manquant', 'nospam');
-                       $flux['data']['message_erreur'] = _T('nospam:erreur_jeton');
-               } // le jeton prend en compte l'heure et l'ip de l'internaute
-               elseif (_request('nobot') // trop facile !
-                       OR _request('email_nobot')
-                       OR (!verifier_jeton($jeton, $form))
-               ) {
-                       if (_request('email_nobot'))
-                               spip_log('email_nobot rempli : ' . _request('email_nobot'), 'nospam');
-                       if (_request('nobot'))
-                               spip_log('nobot rempli : ' . _request('email_nobot'), 'nospam');
-                       #spip_log('pas de jeton pour '.var_export($flux,true),'nospam');
-                       $flux['data']['message_erreur'] .= _T('nospam:erreur_jeton');
-                       if ($form == 'forum')
-                               unset($flux['data']['previsu']);
-               }
-
-               // pas la peine de filtrer les contenus postés par un admin
-               if (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut'] != '0minirezo') {
-                       if ($verifier_formulaire = charger_fonction("verifier_formulaire_$form", "nospam", true)) {
-                               $flux = $verifier_formulaire($flux);
-                               // recuperation de la liste des IPs blacklist/greylist
-                               // async si on renvoie la previsu ou si erreur
-                               $async = false;
-                               if (count($flux['data']))
-                                       $async = true;
-                               nospam_update_ip_list($async);
-                       }
-               }
-       }
-       return $flux;
-}
-
-/**
- * Au moment de decider du statut d'un forum,
- * quelques verifications et une moderation si necessaire !
- *
- * @param array $flux
- * @return array
- */
-function nospam_pre_edition($flux) {
-       if ($flux['args']['table'] == 'spip_forum'
-               AND $flux['args']['action'] == 'instituer'
-       ) {
-
-               // ne pas publier automatiquement certains messages suspects ...
-               // sauf si le posteur a de toute facon le pouvoir de moderer et de se publier
-               include_spip('inc/autoriser');
-               if (
-                       !empty($flux['data']['statut'])
-                       and in_array($flux['data']['statut'], array('prop', 'publie'))
-                       and (!isset($GLOBALS['visiteur_session']['statut']) OR !autoriser('modererforum'))
-               ) {
-                       // verifier le status de cette IP
-                       nospam_check_ip_status($GLOBALS['ip']);
-
-                       $email = strlen($flux['data']['email_auteur']) ? " OR email_auteur=" . sql_quote($flux['data']['email_auteur']) : "";
-                       $spammeur_connu = (!isset($GLOBALS['visiteur_session']['statut'])
-                               AND (
-                                       isset($GLOBALS['ip_greylist'][$GLOBALS['ip']])
-                                       OR isset($GLOBALS['ip_blacklist'][$GLOBALS['ip']])
-                                       OR sql_countsel('spip_forum', '(ip=' . sql_quote($GLOBALS['ip']) . "$email) AND statut='spam'") > 0
-                               )
-                       );
-
-                       // activer aussi le flag spammeur connu en cas de flood, meme si aucune detection spam jusqu'ici
-                       // on sera plus severe sur les liens dans ce cas
-                       // cas du spammeur qui envoie que des messages a 3 liens a haute frequence (passe a travers tous les filtres)
-                       // au bout du 5e message en <10min ou 10e en <30min on va moderer tout message avec un lien
-                       if (!$spammeur_connu) {
-                               if (($nb = sql_countsel('spip_forum', '(ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND ' . nospam_sql_date_proche('date_heure', '-30', 'minute'))) >= 7) {
-                                       spip_log("[Flood] $nb message pour (ip=" . $GLOBALS['ip'] . "$email) dans les 30 dernieres minutes", 'nospam');
-                                       $spammeur_connu = true;
-                               }
-                       }
-                       if (!$spammeur_connu) {
-                               if (($nb = sql_countsel('spip_forum', '(ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND ' . nospam_sql_date_proche('date_heure', '-10', 'minute'))) >= 3) {
-                                       spip_log("[Flood] $nb message pour (ip=" . $GLOBALS['ip'] . "$email) dans les 10 dernieres minutes", 'nospam');
-                                       $spammeur_connu = true;
-                               }
-                       }
-
-                       $lang_suspecte = false;
-                       // si c'est un spammeur connu,
-                       // verifier que cette ip n'en est pas a son N-ieme spam en peu de temps
-                       // a partir d'un moment on refuse carrement le spam massif, le posteur devra attendre pour reposter
-                       if ($spammeur_connu) {
-                               // plus de 30 spams dans les dernieres 2h, faut se calmer ...
-                               // ou plus de 10 spams dans la dernieres 1h, faut se calmer ...
-                               // ou IP blacklistee et plus de 5 messages prop/spam dans les dernieres 48h, faut se calmer ...
-                               if (
-                                       (isset($GLOBALS['ip_blacklist'][$GLOBALS['ip']])
-                                               AND ($nb = sql_countsel('spip_forum', sql_in('statut', array('spam')) . ' AND (ip=' . sql_quote($GLOBALS['ip']) . ') AND ' . nospam_sql_date_proche('date_heure', '-48', 'hour'))) >= 5
-                                               AND $h = 48
-                                       )
-                                       OR
-                                       (($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND ' . nospam_sql_date_proche('date_heure', '-120', 'minute'))) >= 30
-                                               AND $h = 2)
-                                       OR
-                                       (($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND ' . nospam_sql_date_proche('date_heure', '-60', 'minute'))) >= 10
-                                               AND $h = 1)
-                               ) {
-                                       $flux['data']['statut'] = ''; // on n'en veut pas !
-                                       spip_log("[Refuse] $nb spam pour (ip=" . $GLOBALS['ip'] . "$email) dans les $h dernieres heures", 'nospam');
-                                       return $flux;
-                               }
-                               spip_log("POST *suspect* spammeur_connu", "nospam");
-                       }
-                       // sinon regarder si l'objet a une langue, et si le post est dans la meme langue ou non
-                       // en cas de langue differente, on se mefie
-                       else {
-                               $lang_objet = ($GLOBALS['spip_lang'] ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
-                               if ($flux['data']['objet']) {
-                                       $table = table_objet_sql($flux['data']['objet']);
-                                       $trouver_table = charger_fonction("trouver_table", "base");
-                                       if ($desc = $trouver_table($table)
-                                               AND isset($desc['field']['lang'])) {
-                                               $primary = id_table_objet($flux['data']['objet']);
-                                               $lang_objet = sql_getfetsel("lang", $table, "$primary=" . intval($flux['data']['id_objet']));
-                                       }
-                               }
-                               include_spip("inc/detecter_langue");
-                               $lang_post = _detecter_langue($flux['data']['texte']);
-                               if ($lang_post !== $lang_objet)
-                                       $lang_suspecte = true;
-                               spip_log("POST " . ($lang_suspecte ? "*suspect* " : "") . "en langue [$lang_post] sur $primary=" . $flux['data']['id_objet'] . " en langue [$lang_objet]", "nospam");
-                       }
-
-                       // si c'est un message bourre de liens, on le modere
-                       // le seuil varie selon le champ et le fait que le spammeur est deja connu ou non
-                       $seuils = array(
-                               // seuils par defaut
-                               0 => array(
-                                       0 => array(1 => 'prop', 3 => 'spam'), // seuils par defaut
-                                       'url_site' => array(2 => 'spam'), // 2 liens dans le champ url, c'est vraiment louche
-                                       'texte' => array(4 => 'prop', 20 => 'spam') // pour le champ texte
-                               ),
-                               // seuils severises pour les suspects : modere en prop des qu'il y a un lien, spam si plus de 5
-                               'suspect' => array(
-                                       0 => array(1 => 'spam'),
-                                       'url_site' => array(2 => 'spam'), // 2 liens dans le champ url, c'est vraiment louche
-                                       'texte' => array(1 => 'prop', 5 => 'spam')
-                               ),
-                               // seuils pour les blacklist : si pas de lien on passe en prop par precaution, sinon en spam
-                               'blacklist' => array(
-                                       0 => array(1 => 'spam'),
-                                       'url_site' => array(2 => 'spam'), // 2 liens dans le champ url, c'est vraiment louche
-                                       'texte' => array(0 => 'prop', 1 => 'spam')
-                               )
-                       );
-
-                       $seuils = isset($GLOBALS['ip_blacklist'][$GLOBALS['ip']]) ? $seuils['blacklist'] : (($spammeur_connu OR $lang_suspecte) ? $seuils['suspect'] : $seuils[0]);
-                       include_spip("inc/nospam"); // pour analyser_spams()
-                       foreach ($flux['data'] as $champ => $valeur) {
-                               $infos = analyser_spams($valeur);
-                               if ($infos['contenu_cache']) {
-                                       // s'il y a du contenu caché avec des styles => spam direct
-                                       $flux['data']['statut'] = 'spam';
-                                       spip_log("\t" . $flux['data']['auteur'] . "\t" . $GLOBALS['ip'] . "\t" . "requalifié en spam car contenu cache", 'nospam');
-                               } elseif ($infos['nombre_liens'] > 0) {
-                                       // si un lien a un titre de moins de 3 caracteres, c'est louche...
-                                       if ($infos['caracteres_texte_lien_min'] < 3) {
-                                               $flux['data']['statut'] = 'prop'; // en dur en attendant une idee plus generique
-                                               spip_log("\t" . $flux['data']['auteur'] . "\t" . $GLOBALS['ip'] . "\t" . "requalifié en prop car moins de 3car hors liens", 'nospam');
-                                       }
-
-                                       if (isset($seuils[$champ]))
-                                               $seuil = $seuils[$champ];
-                                       else
-                                               $seuil = $seuils[0];
-
-                                       foreach ($seuil as $s => $stat)
-                                               if ($infos['nombre_liens'] >= $s) {
-                                                       $flux['data']['statut'] = $stat;
-                                                       spip_log("\t" . $flux['data']['auteur'] . "\t" . $GLOBALS['ip'] . "\t" . "requalifié en " . $stat . " car nombre_liens >= " . $s, 'nospam');
-                                               }
-
-                                       if ($flux['data']['statut'] != 'spam') {
-                                               $champs = array_unique(array('texte', $champ));
-                                               if ($h = rechercher_presence_liens_spammes($infos['liens'], _SPAM_URL_MAX_OCCURENCES, 'spip_forum', $champs)) {
-                                                       $flux['data']['statut'] = 'spam';
-                                                       spip_log("\t" . $flux['data']['auteur'] . "\t" . $GLOBALS['ip'] . "\t" . "requalifié en spam car lien $h deja dans un spam", 'nospam');
-                                               }
-                                       }
-                               }
-                       }
-
-
-                       // verifier qu'un message identique n'a pas ete publie il y a peu
-                       if ($flux['data']['statut'] != 'spam') {
-                               if (sql_countsel('spip_forum', 'texte=' . sql_quote($flux['data']['texte']) . " AND statut IN ('publie','off','spam')") > 0) {
-                                       $flux['data']['statut'] = 'spam';
-                                       spip_log("\t" . $flux['data']['auteur'] . "\t" . $GLOBALS['ip'] . "\t" . "requalifié en spam car message identique deja existant", 'nospam');
-                               }
-                       }
-                       // verifier que cette ip n'en est pas a son N-ieme post en peu de temps
-                       // plus de 5 messages en 5 minutes c'est suspect ...
-                       if ($flux['data']['statut'] != 'spam') {
-                               if (($nb = sql_countsel('spip_forum', 'ip=' . sql_quote($GLOBALS['ip']) . ' AND ' . nospam_sql_date_proche('date_heure', '-5', 'minute'))) >= 5) {
-                                       $flux['data']['statut'] = 'spam';
-                                       spip_log("[Flood2] $nb message pour (ip=" . $GLOBALS['ip'] . "$email) dans les 5 dernieres minutes : requalif en spam", 'nospam');
-                               }
-                       }
-               }
-       }
-       return $flux;
-}
-
-/**
- * @param $champ
- * @param $interval
- * @param $unite
- * @return string
- */
-function nospam_sql_date_proche($champ, $interval, $unite) {
-       if (function_exists("sql_date_proche"))
-               return sql_date_proche($champ, $interval, $unite);
-
-       return '('
-               . $champ
-               . (($interval <= 0) ? '>' : '<')
-               . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
-               . '('
-               . sql_quote(date('Y-m-d H:i:s'))
-               . ', INTERVAL '
-               . (($interval > 0) ? $interval : (0 - $interval))
-               . ' '
-               . $unite
-               . '))';
-}
-
-
-/**
- * Fermer la connexion pour que le visiteur n'attende pas apres le curl sur nospam.spip.net
- * @param $content
- * @return mixed
- */
-function nospam_flush_close($content) {
-       header("Content-Length: " . ($l = ob_get_length()));
-       header("Connection: close");
-       return $content;
-}
-
-/**
- * Flusher et lancer l'update de la liste des ip
- */
-function nospam_flush_and_update() {
-       chdir(_ROOT_CWD); // securite en cas de register_shutdown_function
-       // forcer le flush des tampons pas envoyes (declenche le content-length/conection:close envoye dans cache_cool_flush)
-       $flush_level = ob_get_level();
-       while ($flush_level--) ob_end_flush();
-       flush();
-       if (function_exists('fastcgi_finish_request'))
-               fastcgi_finish_request();
-       nospam_update_ip_list();
-}
-
-if (!defined('_NOSPAM_IP_LIST_CACHE')) define('_NOSPAM_IP_LIST_CACHE', 3600);
-/**
- * Recuperer la liste des IP black ou grey sur nospam.spip.net
- * si on a pas une liste a jour
- * et la stocker dans un fichier
- * @param bool $async
- */
-function nospam_update_ip_list($async = false) {
-       $file = _DIR_TMP . "nospam_ip_list.txt";
-       if (file_exists($file) AND filemtime($file) > time() - _NOSPAM_IP_LIST_CACHE)
-               return;
-       spip_log("nospam_update_ip_list:$async", "nospam");
-
-       if ($async) {
-               // indiquer de fermer la connexion dans la foulee
-               // pour faire le hit de recuperation async hors temps d'attente
-               ob_start("nospam_flush_close");
-               register_shutdown_function("nospam_flush_and_update");
-               return;
-       }
-
-       // on fait d'abord un touch car si le recuperer_page echoue (hebergeurs qui interdisent)
-       // on ne veut pas recommencer plein de fois de suite
-       @touch($file);
-       $url_api = "http://nospam.spip.net/spamsignal.api/list";
-       include_spip("inc/distant");
-       include_spip("inc/json");
-       $res = recuperer_page($url_api);
-       if (!$res AND file_exists($f = _DIR_TMP . "spamsignal-api-list.txt"))
-               lire_fichier($f, $res);
-       if ($res
-               AND function_exists("json_decode")
-               AND $liste = json_decode($res, true)) {
-               ecrire_fichier($file, serialize($liste));
-       }
-}
-
-/**
- * Verifier le status d'une IP et la noter dans la globale ip_blacklist ou ip_greylist si c'est une IP louche
- * @param $ip
- * @return string
- *   ok|grey|black
- */
-function nospam_check_ip_status($ip) {
-       $file = _DIR_TMP . "nospam_ip_list.txt";
-       if (!file_exists($file) OR filemtime($file) < time() - 2 * _NOSPAM_IP_LIST_CACHE)
-               return;
-
-       lire_fichier($file, $liste);
-       spip_log("nospam_check_ip_status:$ip", "nospam");
-       if ($liste = unserialize($liste)) {
-               #spip_log($liste,"nospam");
-               $now = date('Y-m-d H:i:s');
-               $ip_family = preg_replace(",([.:])[^.:]+$,", "$1*", $ip);
-               spip_log("ip $ip famille $ip_family", "nospam");
-               foreach (array("blacklist", "greylist") AS $l) {
-                       if (isset($liste[$l][$ip])
-                               AND $liste[$l][$ip] > $now) {
-                               $GLOBALS['ip_' . $l][$ip] = true;
-                               spip_log("$ip ajoute a ip_$l", "nospam");
-                               return ($l == "blacklist" ? "black" : "grey");
-                       }
-                       if (isset($liste[$l][$ip_family])
-                               AND $liste[$l][$ip_family] > $now) {
-                               $GLOBALS['ip_' . $l][$ip] = true;
-                               spip_log("$ip ajoute a ip_$l (famille $ip_family)", "nospam");
-                               return ($l == "blacklist" ? "black" : "grey");
-                       }
-               }
-       }
-       return "ok";
-}
-
-?>
diff --git a/www/plugins/nospam/paquet.xml b/www/plugins/nospam/paquet.xml
deleted file mode 100644 (file)
index 23e7570..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<paquet
-       prefix="nospam"
-       categorie="performance"
-       version="1.5.18"
-       etat="stable"
-       compatibilite="[2.0.0;3.2.*]"
-       logo="images/nospam-32.png"
-       documentation="https://contrib.spip.net/NoSPAM,1165"
->      
-
-       <nom>NoSPAM</nom>
-       <!-- Limiter le risque de spams dans les forums -->
-
-       <auteur lien="htpp://www.yterium.net">Yterium</auteur>
-
-       <copyright>2008</copyright>
-
-       <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
-
-       <pipeline nom="pre_edition" inclure="nospam_pipelines.php" />
-       <pipeline nom="formulaire_fond" inclure="nospam_pipelines.php" />
-       <pipeline nom="formulaire_charger" inclure="nospam_pipelines.php" />
-       <pipeline nom="formulaire_verifier" inclure="nospam_pipelines.php" />
-       <pipeline nom="nospam_lister_formulaires" action="" />
-</paquet>
diff --git a/www/plugins/nospam/plugin.xml b/www/plugins/nospam/plugin.xml
deleted file mode 100644 (file)
index e700ee7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<plugin>
-       <nom>NoSPAM</nom>
-       <slogan>
-               <multi>
-               [fr]Limiter le risque de spams dans les forums
-               [en]Reduce the risk of spams in the forums
-               </multi>
-       </slogan>
-       <auteur>Cedric Morin pour [Yterium->htpp://www.yterium.net], Superyms (Traduction)</auteur>
-       <icon>images/nospam-32.png</icon>
-       <licence>(c) 2008 GPL</licence>
-       <version>1.5.18</version>
-       <etat>stable</etat>
-       <description><multi>
-       [fr]Halte au spam ! Filtrez les spams dans les messages, sans nuisance pour les utilisateurs honn&#234;tes.
-       [en]Stop spam! Filter spam in messages, without nuisance to honest users.
-       [es]Detenga el spam! Filtro de spam en los mensajes, sin molestias a los usuarios honestos.
-       [ar]&#1578;&#1608;&#1602;&#1601; &#1575;&#1604;&#1605;&#1578;&#1591;&#1601;&#1604;&#33; &#1601;&#1604;&#1578;&#1585; &#1575;&#1604;&#1576;&#1585;&#1610;&#1583; &#1575;&#1604;&#1605;&#1586;&#1593;&#1580; &#1601;&#1610; &#1575;&#1604;&#1585;&#1587;&#1575;&#1574;&#1604; &#1548; &#1583;&#1608;&#1606; &#1575;&#1586;&#1593;&#1575;&#1580; &#1604;&#1605;&#1587;&#1578;&#1582;&#1583;&#1605; &#1589;&#1575;&#1583;&#1602;.
-       [de]SPAM stoppen&#33; Ein Filter ohne Nebenwirkungen f&#252;r ehrliche Nutzer.
-       </multi></description>
-       <lien>https://contrib.spip.net/NoSPAM,1165</lien>
-       <prefix>nospam</prefix>
-       <pipeline>
-               <nom>pre_edition</nom>
-               <inclure>nospam_pipelines.php</inclure>
-       </pipeline>
-       <pipeline>
-               <nom>recuperer_fond</nom>
-               <inclure>nospam_pipelines.php</inclure>
-       </pipeline>
-       <pipeline>
-               <nom>formulaire_charger</nom>
-               <inclure>nospam_pipelines.php</inclure>
-       </pipeline>
-       <pipeline>
-               <nom>formulaire_verifier</nom>
-               <inclure>nospam_pipelines.php</inclure>
-       </pipeline>
-       <pipeline>
-               <nom>nospam_lister_formulaires</nom>
-               <action></action>
-       </pipeline>
-       <categorie>performance</categorie>
-       <necessite id="SPIP" version="[2.0.0;3.2.99]" />
-</plugin>
diff --git a/www/plugins/nospam/svn.revision b/www/plugins/nospam/svn.revision
deleted file mode 100644 (file)
index bc25c4a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/nospam
-Revision: 107544
-Dernier commit: 2017-11-14 18:44:20 +0100 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/nospam</origine>
-<revision>107544</revision>
-<commit>2017-11-14 18:44:20 +0100 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/reservation_evenement b/www/plugins/reservation_evenement
new file mode 160000 (submodule)
index 0000000..ecbf24d
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit ecbf24dca55c692652cba0cdfdec199b62e3ce41
diff --git a/www/plugins/saisies b/www/plugins/saisies
new file mode 160000 (submodule)
index 0000000..8c22d9e
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 8c22d9e43598f0abbb3b67737a28de32f4dcb370
diff --git a/www/plugins/saisies/action/deplacer_saisie.php b/www/plugins/saisies/action/deplacer_saisie.php
deleted file mode 100644 (file)
index eeea9ee..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * Gestion de l'action déplacer saisie.
- *
- * @package SPIP\Saisies\Action
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Action de déplacement de saisies dans le constructeur de formulaires
- *
- * @return void
-**/
-function action_deplacer_saisie_dist() {
-       include_spip('inc/session');
-
-       $session         = _request('session');
-       $identifiant = _request('saisie');
-       $ou          = _request('ou');
-
-       // On récupère le formulaire à son état actuel
-       $formulaire_actuel = session_get($session);
-
-       if (!$formulaire_actuel) {
-               return '';
-       }
-
-       include_spip('inc/saisies');
-
-       $saisies_actuelles = saisies_lister_par_identifiant($formulaire_actuel);
-       if (!isset($saisies_actuelles[$identifiant])) {
-               return '';
-       }
-
-       // tester @id et [@id] (fieldset)
-       if ($ou and !isset($saisies_actuelles[$ou]) and !isset($saisies_actuelles[ substr($ou, 1, -1) ])) {
-               return '';
-       }
-
-       // on deplace ou c'est demande...
-       $formulaire_actuel = saisies_deplacer($formulaire_actuel, $identifiant, $ou);
-
-       // On sauve tout ca
-       $formulaire_actuel = session_set($session, $formulaire_actuel);
-}
diff --git a/www/plugins/saisies/aide/saisies.html b/www/plugins/saisies/aide/saisies.html
deleted file mode 100644 (file)
index 9b07f38..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<h1>Références complètes des saisies</h1>
-
-[(#ENV{format}|=={brut}|oui)<textarea style="width:100%; height:100%;">]
-[(#VAL|saisies_generer_aide)]
-[(#ENV{format}|=={brut}|oui)</textarea>]
diff --git a/www/plugins/saisies/balise/configurer_saisie.php b/www/plugins/saisies/balise/configurer_saisie.php
deleted file mode 100644 (file)
index 3d94544..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Déclaration de la balise `#CONFIGURER_SAISIE`
- *
- * @package SPIP\Saisies\Balises
- */
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Compile la balise `#CONFIGURER_SAISIE`
- *
- * @uses Pile::recuperer_et_supprimer_argument_balise()
- * @uses Pile::creer_et_ajouter_argument_balise()
- * @see balise_INCLURE_dist()
- *
- * @param Champ $p
- * @return Champ
-**/
-function balise_CONFIGURER_SAISIE_dist($p) {
-
-       // On recupere le premier argument : le nom de la saisie
-       $saisie = Pile::recuperer_et_supprimer_argument_balise(1, $p);
-
-       // On ajoute le squelette a inclure dans les parametres
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'fond', 'inclure/configurer_saisie');
-
-       // On ajoute l'environnement
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'env');
-
-       // On ajoute le nom recupere
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'saisie', $saisie);
-
-       // On redirige vers la balise INCLURE
-       if (function_exists('balise_INCLURE')) {
-               return balise_INCLURE($p);
-       } else {
-               return balise_INCLURE_dist($p);
-       }
-}
diff --git a/www/plugins/saisies/balise/generer_saisies.php b/www/plugins/saisies/balise/generer_saisies.php
deleted file mode 100644 (file)
index 1e91c64..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * Gestion de la balise `#GENERER_SAISIES`
- *
- * @package SPIP\Saisies\Balises
- */
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Compile la balise `#GENERER_SAISIES` qui retourne le code HTML des saisies de formulaire,
- * à partir du tableau des saisies transmises
- *
- * La balise accepte 1 paramètre qui est une liste de descriptions de saisies
- * dont on veut générer le HTML affichant les champs du formulaires
- *
- * Cette balise est un raccourcis :
- * - `#GENERER_SAISIES{#TABLEAU_DE_SAISIES}` est équivalent à
- * - `#INCLURE{fond=inclure/generer_saisies,env,saisies=#TABLEAU_DE_SAISIES}`
- *
- * @syntaxe `#GENERER_SAISIE{#TABLEAU_DE_SAISIES}`
- * @uses Pile::recuperer_et_supprimer_argument_balise()
- * @uses Pile::creer_et_ajouter_argument_balise()
- * @see balise_INCLURE_dist()
- *
- * @param Champ $p
- *     Pile au niveau de la balise
- * @return Champ
- *     Pile complété du code à générer
-**/
-function balise_GENERER_SAISIES_dist($p) {
-
-       // On recupere le premier (et seul) argument : le tableau decrivant ce qu'on veut generer
-       $config = Pile::recuperer_et_supprimer_argument_balise(1, $p);
-
-       // On ajoute le squelette a inclure dans les parametres
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'fond', 'inclure/generer_saisies');
-
-       // On ajoute l'environnement
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'env');
-
-       // On ajoute le tableau recupere
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'saisies', $config);
-
-       // On redirige vers la balise INCLURE
-       if (function_exists('balise_INCLURE')) {
-               return balise_INCLURE($p);
-       } else {
-               return balise_INCLURE_dist($p);
-       }
-}
diff --git a/www/plugins/saisies/balise/saisie.php b/www/plugins/saisies/balise/saisie.php
deleted file mode 100644 (file)
index 9957730..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-
-/**
- * Déclaration de la classe `Pile` et de la balise `#SAISIE`
- *
- * @package SPIP\Saisies\Balises
-**/
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// pour ne pas interferer avec d'eventuelles futures fonctions du core
-// on met le tout dans une classe ; les fonctions sont autonomes.
-
-/**
- * Conteneur pour modifier les arguments d'une balise SPIP (de classe Champ) à compiler
- *
- * @note
- *     Ces fonctions visent à modifier l'AST (Arbre de Syntaxe Abstraite) issues
- *     de l'analyse du squelette. Très utile pour créer des balises qui
- *     transmettent des arguments supplémentaires automatiquement, à des balises
- *     déjà existantes.
- *     Voir un exemple d'utilisation dans `balise_SAISIE_dist()`.
- *
- * @note
- *     Les arguments sont stockés sont dans l'entree 0 de la propriété `param`
- *     dans l'objet Champ (représenté par `$p`), donc dans `$p->param[0]`.
- *
- *     `param[0][0]` vaut toujours '' (ou presque ?)
- *
- * @see balise_SAISIE_dist() Pour un exemple d'utilisation
-**/
-class Pile {
-       /**
-        * Récupère un argument de balise
-        *
-        * @param int $pos
-        * @param Champ $p
-        * @return mixed|null Élément de l'AST représentant l'argument s'il existe
-       **/
-       static function recuperer_argument_balise($pos, $p) {
-               if (!isset($p->param[0])) {
-                       return null;
-               }
-               if (!isset($p->param[0][$pos])) {
-                       return null;
-               }
-               return $p->param[0][$pos];
-       }
-
-       /**
-        * Supprime un argument de balise
-        *
-        * @param int $pos
-        * @param Champ $p
-        * @return Champ
-       **/
-       static function supprimer_argument_balise($pos, $p) {
-               if (!isset($p->param[0])) {
-                       return null;
-               }
-               if (!isset($p->param[0][$pos])) {
-                       return null;
-               }
-               if ($pos == 0) {
-                       array_shift($p->param[0]);
-               } else {
-                       $debut = array_slice($p->param[0], 0, $pos);
-                       $fin   = array_slice($p->param[0], $pos+1);
-                       $p->param[0] = array_merge($debut, $fin);
-               }
-               return $p;
-       }
-
-
-       /**
-        * Retourne un argument de balise, et le supprime de la liste des arguments
-        *
-        * @uses Pile::recuperer_argument_balise()
-        * @uses Pile::supprimer_argument_balise()
-        *
-        * @param int $pos
-        * @param Champ $p
-        * @return mixed|null Élément de l'AST représentant l'argument s'il existe
-       **/
-       static function recuperer_et_supprimer_argument_balise($pos, &$p) {
-               $arg = Pile::recuperer_argument_balise($pos, $p);
-               $p   = Pile::supprimer_argument_balise($pos, $p);
-               return $arg;
-       }
-
-
-       /**
-        * Ajoute un argument de balise
-        *
-        * Empile l'argument à la suite des arguments déjà existants pour la balise
-        *
-        * @param mixed $element Élément de l'AST représentant l'argument à ajouter
-        * @param Champ $p
-        * @return Champ
-       **/
-       static function ajouter_argument_balise($element, $p) {
-
-               // Toujours un parametre 0 vide s'il n'existe pas.
-               if (!isset($p->param[0][0])) {
-                       if (!isset($p->param[0])) {
-                               $p->param[0] = array();
-                       }
-                       $p->param[0][0] = '';
-               }
-
-               $zero = array_shift($p->param[0]);
-               array_unshift($p->param[0], $element);
-               array_unshift($p->param[0], $zero);
-
-               return $p;
-       }
-
-
-       /**
-        * Crée l'élément de l'AST représentant un argument de balise.
-        *
-        * @example
-        *     ```
-        *     $nom = Pile::creer_argument_balise(nom);           // {nom}
-        *     $nom = Pile::creer_argument_balise(nom, 'coucou'); // {nom=coucou}
-        *
-        *     $balise = Pile::creer_balise('BALISE');
-        *     $nom = Pile::creer_argument_balise(nom, $balise);  // {nom=#BALISE}
-        *     ```
-        *
-        * @param string $nom
-        *     Nom de l'argument
-        * @param string|object $valeur
-        *     Valeur de l'argument. Peut être une chaîne de caractère ou un autre élément d'AST
-        * @return array
-       **/
-       static function creer_argument_balise($nom, $valeur = null) {
-               include_spip('public/interfaces');
-               $s = new Texte;
-               $s->texte = $nom;
-               $s->ligne=0;
-
-               // si #BALISE cree avec Pile::creer_balise(), le mettre en array, comme les autres
-               if (is_object($valeur)) {
-                       $valeur = array($valeur);
-               }
-
-               $res = null;
-
-               // {nom}
-               if (is_null($valeur)) {
-                       $res = array($s);
-               } elseif (is_string($valeur)) {
-                       // {nom=coucou}
-                       $s->texte .= "=$valeur";
-                       $res = array($s);
-               } elseif (is_array($valeur)) {
-                       // {nom=#BALISE}
-                       $s->texte .= '='; // /!\ sans cette toute petite chose, ça ne fait pas d'egalite :)
-                       $res = array_merge(array($s), $valeur);
-               }
-
-               return $res;
-       }
-
-
-       /**
-        * Crée et ajoute un argument à une balise
-        *
-        * @uses Pile::creer_argument_balise()
-        * @uses Pile::ajouter_argument_balise()
-        *
-        * @param Champ $p
-        * @param string $nom
-        *     Nom de l'argument
-        * @param string|object $valeur
-        *     Valeur de l'argument. Peut être une chaîne de caractère ou un autre élément d'AST
-        * @return Champ
-       **/
-       static function creer_et_ajouter_argument_balise($p, $nom, $valeur = null) {
-               $new = Pile::creer_argument_balise($nom, $valeur);
-               return Pile::ajouter_argument_balise($new, $p);
-       }
-
-
-
-       /**
-        * Crée l'AST d'une balise
-        *
-        * @example
-        *     ```
-        *     // Crée : #ENV*{titre}
-        *     $titre = Pile::recuperer_argument_balise(1, $p); // $titre, 1er argument de la balise actuelle
-        *     $env = Pile::creer_balise('ENV', array('param' => array($titre), 'etoile' => '*'));
-        *     ```
-        *
-        * @param string $nom
-        *     Nom de la balise
-        * @param array $opt
-        *     Options (remplira les propriétés correspondantes de l'objet Champ)
-        * @return Champ
-       **/
-       static function creer_balise($nom, $opt = array()) {
-               include_spip('public/interfaces');
-               $b = new Champ;
-               $b->nom_champ = strtoupper($nom);
-               foreach ($opt as $o => $val) {
-                       if (property_exists($b, $o)) {
-                               if ($o == 'param') {
-                                       array_unshift($val, '');
-                                       $b->$o = array($val);
-                               } else {
-                                       $b->$o = $val;
-                               }
-                       }
-               }
-               return $b;
-       }
-}
-
-
-
-/**
- * Compile la balise `#SAISIE` qui retourne le code HTML de la saisie de formulaire indiquée.
- *
- * Cette balise incluera le squelette `saisies/_base.html` et lui-même `saisies/{type}.html`
- *
- * La balise `#SAISIE` est un raccourci pour une écriture plus compliquée de la balise `#INCLURE`.
- * La balise calcule une série de paramètre récupérer et à transmettre à `#INCLURE`,
- * en fonction des valeurs des 2 premiers paramètres transmis.
- *
- * Les autres arguments sont transmis tels quels à la balise `#INCLURE`.
- *
- * Ainsi `#SAISIE{input,nom,label=Nom,...}` exécutera l'équivalent de
- * `#INCLURE{nom=nom,valeur=#ENV{nom},type_saisie=input,erreurs,fond=saisies/_base,label=Nom,...}`
- *
- * @syntaxe `#SAISIE{type,nom[,option=xx,...]}`
- *
- * @uses Pile::recuperer_et_supprimer_argument_balise()
- * @uses Pile::creer_balise()
- * @uses Pile::creer_et_ajouter_argument_balise()
- * @see balise_INCLURE_dist()
- *
- * @param Champ $p
- * @return Champ
- */
-function balise_SAISIE_dist($p) {
-
-       // on recupere les parametres sans les traduire en code d'execution php
-       $type_saisie = Pile::recuperer_et_supprimer_argument_balise(1, $p); // $type
-       $titre       = Pile::recuperer_et_supprimer_argument_balise(1, $p); // $titre
-
-       // creer #ENV*{$titre} (* pour les cas de tableau serialises par exemple, que l'on veut reutiliser)
-       $env_titre   = Pile::creer_balise('ENV', array('param' => array($titre), 'etoile' => '*')); // #ENV*{titre}
-
-       // on modifie $p pour ajouter des arguments
-       // {nom=$titre, valeur=#ENV{$titre}, erreurs, type_saisie=$type, fond=saisies/_base}
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'nom', $titre);
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'valeur', $env_titre);
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'type_saisie', $type_saisie);
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'erreurs');
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'fond', 'saisies/_base');
-
-       // on appelle la balise #INCLURE
-       // avec les arguments ajoutes
-       if (function_exists('balise_INCLURE')) {
-               return balise_INCLURE($p);
-       } else {
-               return balise_INCLURE_dist($p);
-       }
-}
diff --git a/www/plugins/saisies/balise/voir_saisie.php b/www/plugins/saisies/balise/voir_saisie.php
deleted file mode 100644 (file)
index 671175e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/**
- * Déclaration de la balise `#VOIR_SAISIE`
- *
- * @package SPIP\Saisies\Balises
-**/
-
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Compile la balise `#VOIR_SAISIE` qui retourne le code HTML de la vue d'une saisie indiquée
- *
- * Cette balise incluera le squelette `saisies-vues/_base.html` et lui-même `saisies-vues/{type}.html`
- *
- * @syntaxe `#VOIR_SAISIE{type,nom[,option=valeur,...]}`
- * @uses Pile::recuperer_et_supprimer_argument_balise()
- * @uses Pile::creer_et_ajouter_argument_balise()
- * @uses Pile::creer_balise()
- * @see balise_INCLURE_dist()
- *
- * @param Champ $p
- * @return Champ
- */
-function balise_VOIR_SAISIE_dist($p) {
-
-       // on recupere les parametres sans les traduire en code d'execution php
-       $type_saisie = Pile::recuperer_et_supprimer_argument_balise(1, $p);
-       $nom         = Pile::recuperer_et_supprimer_argument_balise(1, $p);
-
-       // creer #ENV*{$titre} (* pour les cas de tableau serialises par exemple, que l'on veut reutiliser)
-       $env_nom   = Pile::creer_balise('ENV', array('param' => array($nom), 'etoile' => '*')); // #ENV*{nom}
-
-       // on modifie $p pour ajouter des arguments
-       // {nom=$nom, valeur=#ENV{$nom}, type_saisie=$type, fond=saisies/_base}
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'nom', $nom);
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'valeur', $env_nom);
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'type_saisie', $type_saisie);
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'fond', 'saisies-vues/_base');
-
-       // on appelle la balise #INCLURE
-       // avec les arguments ajoutes
-       if (function_exists('balise_INCLURE')) {
-               return balise_INCLURE($p);
-       } else {
-               return balise_INCLURE_dist($p);
-       }
-}
diff --git a/www/plugins/saisies/balise/voir_saisies.php b/www/plugins/saisies/balise/voir_saisies.php
deleted file mode 100644 (file)
index ed750ff..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Déclaration de la balise `#VOIR_SAISIES`
- *
- * @package SPIP\Saisies\Balises
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Compile la balise `#VOIR_SAISIES` qui retourne le code HTML des vues de formulaire,
- * à partir du tableau des saisies transmises
- *
- * La balise accepte 1 paramètre qui est une liste de descriptions de saisies
- * dont on veut générer le HTML affichant les vues du formulaires
- *
- * Cette balise est un raccourcis :
- * - `#VOIR_SAISIES{#TABLEAU_DE_SAISIES}` est équivalent à
- * - `#INCLURE{fond=inclure/voir_saisies,env,saisies=#TABLEAU_DE_SAISIES}`
- *
- * @syntaxe `#VOIR_SAISIES{#TABLEAU_DE_SAISIES}`
- * @uses Pile::recuperer_et_supprimer_argument_balise()
- * @uses Pile::creer_et_ajouter_argument_balise()
- * @see balise_INCLURE_dist()
- *
- * @param Champ $p
- *     Pile au niveau de la balise
- * @return Champ
- *     Pile complété du code à générer
-**/
-function balise_VOIR_SAISIES_dist($p) {
-
-       // On recupere les arguments : les tableaux decrivant ce qu'on veut generer + les reponses
-       $saisies = Pile::recuperer_et_supprimer_argument_balise(1, $p);
-       $valeurs = Pile::recuperer_et_supprimer_argument_balise(1, $p);
-
-       // On ajoute le squelette a inclure dans les parametres
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'fond', 'inclure/voir_saisies');
-
-       // On ajoute l'environnement
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'env');
-
-       // On ajoute les tableaux recuperes
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'saisies', $saisies);
-       $p = Pile::creer_et_ajouter_argument_balise($p, 'valeurs', $valeurs);
-
-       // On redirige vers la balise INCLURE
-       if (function_exists('balise_INCLURE')) {
-               return balise_INCLURE($p);
-       } else {
-               return balise_INCLURE_dist($p);
-       }
-}
diff --git a/www/plugins/saisies/css/formulaires_constructeur.css b/www/plugins/saisies/css/formulaires_constructeur.css
deleted file mode 100644 (file)
index 4048651..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-
-.formulaire_spip .formulaire_spip{
-       border:none;
-       background:transparent;
-}
-#deplacable .ui-state-highlight { height: 5em; line-height: 1.2em; }
-#deplacable .ui-sortable {min-height:3em;}
-
-.formulaire_construire_formulaire .actions_formulaire{
-       margin:0;
-       padding:1em;
-       text-align:center;
-       border:0;
-}
-.formulaire_construire_formulaire .actions_formulaire img{
-       vertical-align:middle;
-}
-
-.formulaire_construire_formulaire .en_configuration{
-       border:5px solid #999;
-       border-radius:5px;
-       margin:.5em;
-}
-.formulaire_construire_formulaire .fieldset.configurable>fieldset>.editer-groupe {margin-left:30px;}
-
-.formulaire_construire_formulaire .formulaire_configurer{
-       border-top:3px dashed #999;
-       margin: 1em -8px 0 -138px;
-    padding: 1em .5em .5em .5em;
-    background:white;
-}
-.formulaire_construire_formulaire .fieldset > .formulaire_configurer{
-       margin: 1em -8px 0;
-}
-
-.formulaire_construire_formulaire .formulaire_configurer .formulaire_configurer-onglets {
-       overflow:auto;
-}
-.formulaire_construire_formulaire .formulaire_configurer .formulaire_configurer-onglets li{
-       float:left;
-       width:auto;
-       clear:none;
-       padding:0;
-       background:#eee;
-       border:1px solid #ddd;
-       margin-right:1px;
-       -moz-border-radius:5px 5px 0 0;
-       -webkit-border-radius:5px 5px 0 0;
-       -o-border-radius:5px 5px 0 0;
-       border-radius:5px 5px 0 0;
-}
-.formulaire_construire_formulaire .formulaire_configurer .formulaire_configurer-onglets li.actif{
-       background:white;
-       border-bottom:1px solid white;
-}
-.formulaire_construire_formulaire .formulaire_configurer .formulaire_configurer-onglets li.erreur a{
-       color:#CC3300;
-}
-.formulaire_construire_formulaire .formulaire_configurer .formulaire_configurer-onglets li a{
-       display:block;
-       padding:.5em;
-}
-.formulaire_construire_formulaire .formulaire_configurer .boutons { margin-bottom: -20px; }
-
-.formulaire_construire_formulaire .editer.obligatoire .formulaire_configurer label {
-    color: #666;
-    font-weight: normal;
-}
-.formulaire_construire_formulaire .editer.obligatoire .formulaire_configurer .obligatoire label {
-    color: black;
-    font-weight: bold;
-}
-
-
-.formulaire_configurer-contenus > .fieldset > fieldset:first-child {border-top:0;}
-.formulaire_configurer-contenus > .fieldset > fieldset {padding: 0}
-
-.formulaire_construire_formulaire .editer-groupe>.configurable {padding-top:30px; position:relative;}
-.formulaire_construire_formulaire .editer.saisie_explication > .explication { position:initial; }
-.formulaire_construire_formulaire .editer.pleine_largeur .formulaire_configurer { margin-left: 0px; }
-.formulaire_construire_formulaire .editer.pleine_largeur .formulaire_configurer > .formulaire_configurer-contenus { margin-left: -138px; }
-.formulaire_construire_formulaire .formulaire_configurer .fieldset {padding-top:0px;}
-.formulaire_construire_formulaire .formulaire_configurer fieldset fieldset>.editer-groupe>.editer:first-child {padding-top:0px;}
-
-/* SPIP 3.0 compat avec li.selecteur_item */
-.formulaire_construire_formulaire ul.editer-groupe > li.selecteur_item { background:transparent; padding-left:140px; }
-.formulaire_construire_formulaire ul.editer-groupe > li.selecteur_item label { margin-left:-130px; }
-.formulaire_construire_formulaire ul.editer-groupe > li.selecteur_item .choix label { margin-left:5px; }
-
-.formulaire_construire_formulaire .editer.hover {background-color:transparent;}
-
-.formulaire_construire_formulaire .actions{
-       position:absolute;
-       right:5px;
-       top:5px;
-}
-
-.formulaire_construire_formulaire .actions button{
-       cursor:pointer;
-       background:none;
-       border:none;
-       opacity:0.7;
-}
-.formulaire_construire_formulaire .actions button:hover{
-       opacity:1;
-}
-.formulaire_construire_formulaire .actions .move {
-       cursor:move;
-}
-
-.formulaire_construire_formulaire .ajouter_saisie{
-       width:45%;
-       margin:5px;
-       padding:0.5em 8px 0.5em 36px;
-       font-size:1em;
-       text-align:left;
-       color:black;
-       cursor:pointer;
-       background:white url() 8px center no-repeat;
-       border:1px solid #ccc;
-}
-
-.formulaire_construire_formulaire .ajouter_saisie img{
-       vertical-align:middle;
-}
-
diff --git a/www/plugins/saisies/demo/configurer_saisie.html b/www/plugins/saisies/demo/configurer_saisie.html
deleted file mode 100644 (file)
index aa3cb37..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<html>
-<head>
-       <title>Test de configuration de saisie</title>
-       [<link rel="stylesheet" href="(#CHEMIN{spip_formulaires.css})" type="text/css" media="all" title="formulaires" charset="utf-8" />]
-       <style type="text/css">
-               .formulaire_spip{
-                       width:40%;
-                       border:1px solid black;
-                       -moz-border-radius:10px;
-                       -webkit-border-radius:10px;
-                       border-radius:10px;
-               }
-               .formulaire_spip ul li{
-                       padding:0.5em;
-               }
-               .formulaire_spip li.fieldset{
-                       padding:0;
-               }
-               .formulaire_spip li.obligatoire{
-                       background:#ffcfcf;
-               }
-               .formulaire_spip .fieldset .legend{
-                       margin:0;
-                       font-style:italic;
-               }
-       </style>
-</head>
-<body>
-       <h1>Test pour générer le formulaire de configuration d'une saisie</h1>
-       
-       <h2>Par defaut, sans configuration du nom du champ</h2>
-       <form class="formulaire_spip" action="#SELF" method="post">
-               <ul>
-                       #CONFIGURER_SAISIE{#ENV{saisie, input}}
-                       <li class="boutons">
-                               <input type="submit" class="submit" />
-                       </li>
-               </ul>
-       </form>
-       
-       <h2>En forçant la configuration du nom</h2>
-       <form class="formulaire_spip" action="#SELF" method="post">
-               <ul>
-                       #CONFIGURER_SAISIE{#ENV{saisie, input}, avec_nom=oui}
-                       <li class="boutons">
-                               <input type="submit" class="submit" />
-                       </li>
-               </ul>
-       </form>
-</body>
-</html>
diff --git a/www/plugins/saisies/demo/generer_saisies.html b/www/plugins/saisies/demo/generer_saisies.html
deleted file mode 100644 (file)
index 4398eb6..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-<html>
-<head>
-       <title>Test de génération de saisies</title>
-       [<link rel="stylesheet" href="(#CHEMIN{spip_formulaires.css})" type="text/css" media="all" title="formulaires" charset="utf-8" />]
-       <style type="text/css">
-               .formulaire_spip{
-                       width:40%;
-                       border:1px solid black;
-                       -moz-border-radius:10px;
-                       -webkit-border-radius:10px;
-                       border-radius:10px;
-               }
-               .formulaire_spip ul li{
-                       padding:0.5em;
-               }
-               .formulaire_spip li.fieldset{
-                       padding:0;
-               }
-               .formulaire_spip li.obligatoire{
-                       background:#ffcfcf;
-               }
-               .formulaire_spip .fieldset .legend{
-                       margin:0;
-                       font-style:italic;
-               }
-       </style>
-</head>
-<body>
-       <h1>Test pour générer des saisies à partir d'une description</h1>
-
-       <h2>Génération d'une seule saisie</h2>
-       #SET{champ,
-               #ARRAY{
-                       saisie, input,
-                       options, #ARRAY{
-                               nom, test,
-                               label, Une sorte de titre,
-                               explication, Un sorte d'explication,
-                               obligatoire, oui
-                       }
-               }
-       }
-       <form class="formulaire_spip" action="#SELF" method="post">
-               <ul>
-                       [(#GET{champ}|saisies_generer_html{#ENV**|unserialize})]
-                       <li class="boutons">
-                               <input type="submit" class="submit" />
-                       </li>
-               </ul>
-       </form>
-
-       <h2>Génération complète du contenu (l'intérieur) d'un formulaire</h2>
-       #SET{saisies,
-               #ARRAY{
-                       0,#ARRAY{
-                               saisie, destinataires,
-                               options, #ARRAY{
-                                       nom, destinataires,
-                                       label, Destinataires,
-                                       choix_destinataires, #ARRAY{0,1,1,2},
-                                       type_choix, plusieurs,
-                                       obligatoire, oui
-                               }
-                       },
-                       1,#ARRAY{
-                               saisie, input,
-                               options, #ARRAY{
-                                       nom, prenom,
-                                       label, Prénom,
-                               }
-                       },
-                       2,#ARRAY{
-                               saisie, input,
-                               options, #ARRAY{
-                                       nom, nom,
-                                       label, Nom,
-                                       obligatoire, oui
-                               }
-                       },
-                       3,#ARRAY{
-                               saisie, input,
-                               options, #ARRAY{
-                                       nom, courriel,
-                                       label, Courriel,
-                                       obligatoire, oui
-                               },
-                               verifier, #ARRAY{
-                                       type, email
-                               }
-                       },
-                       4,#ARRAY{
-                               saisie, case,
-                               options, #ARRAY{
-                                       nom, case,
-                                       label, Une sorte de case à cocher,
-                                       label_case, Check la vibes
-                               }
-                       },
-                       5,#ARRAY{
-                               saisie, fieldset,
-                               options, #ARRAY{
-                                       nom, adresse,
-                                       label, Adresse
-                               },
-                               saisies, #ARRAY{
-                                       1,#ARRAY{
-                                               saisie, textarea,
-                                               options, #ARRAY{
-                                                       nom, voie,
-                                                       label, Voie,
-                                                       obligatoire, non,
-                                               }
-                                       },
-                                       2,#ARRAY{
-                                               saisie, input,
-                                               options, #ARRAY{
-                                                       nom, code_postal,
-                                                       label, Code postal,
-                                                       obligatoire, oui
-                                               }
-                                       },
-                                       3,#ARRAY{
-                                               saisie, input,
-                                               options, #ARRAY{
-                                                       nom, ville,
-                                                       label, Ville,
-                                                       obligatoire, oui
-                                               }
-                                       }
-                               }
-                       },
-                       6,#ARRAY{
-                               saisie, oui_non,
-                               options, #ARRAY{
-                                       nom, peutetre,
-                                       label, Tu veux ou tu veux pas ?,
-                                       obligatoire, oui,
-                                       info_obligatoire, " / obligatoire"
-                               }
-                       },
-               }
-       }
-       <form class="formulaire_spip" action="#SELF" method="post">
-               <ul>
-                       #GENERER_SAISIES{#GET{saisies}}
-                       <li class="boutons">
-                               <input type="submit" class="submit" />
-                       </li>
-               </ul>
-       </form>
-</body>
-</html>
diff --git a/www/plugins/saisies/demo/page-saisies_cvt.html b/www/plugins/saisies/demo/page-saisies_cvt.html
deleted file mode 100644 (file)
index 0d7a487..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<h1>CVT automatique avec Saisies</h1>
-<p>Démonstration d'un formulaire CVT généré uniquement à partir d'une déclaration de Saisies</p>
-
-#FORMULAIRE_SAISIES_CVT
diff --git a/www/plugins/saisies/demo/saisie.html b/www/plugins/saisies/demo/saisie.html
deleted file mode 100644 (file)
index 899d81a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Version PHP : <?php echo phpversion(); ?>
-
-
-<h1>Input</h1>
-[(#SAISIE{input,titre})]
-
-<h1>Textarea</h1>
-[(#SAISIE{textarea,texte})]
-
-<h1>Input obligatoire et label</h1>
-[(#SAISIE{input,titre,obligatoire=oui,label=Un vrai titre})]
diff --git a/www/plugins/saisies/demo/voir_saisie.html b/www/plugins/saisies/demo/voir_saisie.html
deleted file mode 100644 (file)
index d72f830..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<h1>Input et label</h1>
-[(#VOIR_SAISIE{input,titre,label=Un vrai titre,valeur=TRUC})]
-
-<h1>Textarea</h1>
-[(#VOIR_SAISIE{textarea,texte,valeur=Un super long texte<br/>sur plusieurs ligne})]
-
-<h1>Destinataires</h1>
-[(#VOIR_SAISIE{destinataires,destinataires, label=Destinataires,valeur=#ARRAY{0,1,1,2}})]
-
-
diff --git a/www/plugins/saisies/demo/voir_saisies.html b/www/plugins/saisies/demo/voir_saisies.html
deleted file mode 100644 (file)
index 3d7c50f..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<html>
-<head>
-       <title>Test de génération des vues de saisies</title>
-       [<link rel="stylesheet" href="(#CHEMIN{spip_formulaires.css})" type="text/css" media="all" title="formulaires" charset="utf-8" />]
-       <style type="text/css">
-               .formulaire_spip{
-                       width:40%;
-                       border:1px solid black;
-                       -moz-border-radius:10px;
-                       -webkit-border-radius:10px;
-                       border-radius:10px;
-               }
-               .formulaire_spip ul li{
-                       padding:0.5em;
-               }
-               .formulaire_spip li.fieldset{
-                       padding:0;
-               }
-               .formulaire_spip li.obligatoire{
-                       background:#ffcfcf;
-               }
-               .formulaire_spip .fieldset .legend{
-                       margin:0;
-                       font-style:italic;
-               }
-       </style>
-</head>
-<body>
-       <h1>Générer des vues de saisie</h1>
-
-       #SET{saisies,
-               #ARRAY{
-                       0,#ARRAY{
-                               saisie, destinataires,
-                               options, #ARRAY{
-                                       nom, destinataires,
-                                       label, Destinataires,
-                                       choix_destinataires, #ARRAY{0,1,1,2},
-                                       type_choix, plusieurs,
-                                       obligatoire, oui
-                               }
-                       },
-                       1,#ARRAY{
-                               saisie, input,
-                               options, #ARRAY{
-                                       nom, prenom,
-                                       label, Prénom,
-                               }
-                       },
-                       2,#ARRAY{
-                               saisie, input,
-                               options, #ARRAY{
-                                       nom, nom,
-                                       label, Nom,
-                                       obligatoire, oui
-                               }
-                       },
-                       3,#ARRAY{
-                               saisie, input,
-                               options, #ARRAY{
-                                       nom, courriel,
-                                       label, Courriel,
-                                       obligatoire, oui
-                               },
-                               verifier, #ARRAY{
-                                       type, email
-                               }
-                       },
-                       4,#ARRAY{
-                               saisie, case,
-                               options, #ARRAY{
-                                       nom, case,
-                                       label, Une sorte de case à cocher,
-                                       label_case, Check la vibes
-                               }
-                       },
-                       5,#ARRAY{
-                               saisie, fieldset,
-                               options, #ARRAY{
-                                       nom, adresse,
-                                       label, Adresse
-                               },
-                               saisies, #ARRAY{
-                                       1,#ARRAY{
-                                               saisie, textarea,
-                                               options, #ARRAY{
-                                                       nom, voie,
-                                                       label, Voie,
-                                                       obligatoire, non,
-                                               }
-                                       },
-                                       2,#ARRAY{
-                                               saisie, input,
-                                               options, #ARRAY{
-                                                       nom, code_postal,
-                                                       label, Code postal,
-                                                       obligatoire, oui
-                                               }
-                                       },
-                                       3,#ARRAY{
-                                               saisie, input,
-                                               options, #ARRAY{
-                                                       nom, ville,
-                                                       label, Ville,
-                                                       obligatoire, oui
-                                               }
-                                       }
-                               }
-                       },
-                       6,#ARRAY{
-                               saisie, oui_non,
-                               options, #ARRAY{
-                                       nom, peutetre,
-                                       label, Tu veux ou tu veux pas ?,
-                                       obligatoire, oui,
-                                       info_obligatoire, " / obligatoire"
-                               }
-                       },
-               }
-       }
-
-       <h2>Formulaire auquel on doit répondre</h2>
-       <div class="formulaire_spip">
-       <ul>
-       #GENERER_SAISIES{#GET{saisies}}
-       </ul>
-       </div>
-
-
-       #SET{valeurs,
-               #ARRAY{
-                       case, on,
-                       peutetre, '',
-                       prenom, Jean-Paul,
-                       code_postal, 22222,
-                       nom, Fitousi,
-                       ville, Deuville,
-                       courriel, robert@menard.com,
-                       destinataires, #ARRAY{1,1},
-                       voie, 2 rue du Deux,
-               }
-       }
-
-       <h2>Réponse à ce formulaire</h2>
-       #VOIR_SAISIES{#GET{saisies}, #GET{valeurs}}
-</body>
-</html>
diff --git a/www/plugins/saisies/formulaires/construire_formulaire.html b/www/plugins/saisies/formulaires/construire_formulaire.html
deleted file mode 100644 (file)
index d3bc093..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ (#ENV{formulaire_modifie}|oui) modifie]">
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
-       <p id="message_attention" class="message_reinitialiser reponse_formulaire reponse_formulaire_ok">#ENV*{_message_attention}</p>
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
-       
-       <BOUCLE_editable(CONDITION){si #ENV{editable}|oui}>
-       <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
-               [(#REM) declarer les hidden qui declencheront le service du formulaire 
-               parametre : url d'action ]
-               #ACTION_FORMULAIRE{#ENV{action}}
-               <input type="submit" class="submit noscroll invisible" name="enregistrer" value="<:bouton_enregistrer:>" />
-
-               <[(#DIV|sinon{ul})] class="editer-groupe" id="deplacable">
-                       
-                       <[(#DIV|sinon{li})] id="reinitialiser" class="actions_formulaire">
-                               <button type="submit" class="submit" name="reinitialiser" value="oui" onclick="return confirm('<:saisies:construire_reinitialiser_confirmer:>')">
-                                       <img src="#CHEMIN{images/formulaire-reinitialiser-24.png}" alt="" />
-                                       <:saisies:construire_reinitialiser:>
-                               </button>
-                       </[(#DIV|sinon{li})]>
-
-                       [(#REM)<!-- les choix de saisies -->]
-                       <BOUCLE_contenu(DATA){source tableau, #ENV{_contenu}}>
-                       [(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
-                               [(#VALEUR**|construire_formulaire_generer_saisie_configurable{#ENV**|unserialize})]
-                       ]
-                       </BOUCLE_contenu>
-                       <[(#DIV|sinon{li})] class="aucun"><em class="attention"><:saisies:construire_aucun_champs:></em></[(#DIV|sinon{li})]>
-                       <//B_contenu>
-                       
-                       <B_saisies_disponibles>
-                       <[(#DIV|sinon{li})] class="editer haut saisies_disponibles" id="attrapable">
-                               <label><:saisies:construire_ajouter_champ:></label>
-                               <BOUCLE_saisies_disponibles(DATA){source tableau, #ENV{_saisies_disponibles}}{par titre}>
-                               <button type="submit" name="ajouter_saisie" value="#CLE" class="submit noscroll ajouter_saisie"[ title="(#DESCRIPTION)"] [style="background-image:url((#ICONE|sinon{#CHEMIN{images/formulaire-saisie-defaut.png}}))"]>
-                                       <span>#TITRE</span>
-                               </button>
-                               </BOUCLE_saisies_disponibles>
-                       </[(#DIV|sinon{li})]>
-                       </B_saisies_disponibles>
-                       
-                       <B_saisies_groupes_disponibles>
-                       <[(#DIV|sinon{li})] class="editer haut saisies_groupes_disponibles" id="attrapable_bis">
-                               <label><:saisies:construire_ajouter_groupe:></label>
-                               <BOUCLE_saisies_groupes_disponibles(DATA){source tableau, #ENV{_saisies_groupes_disponibles}}{par titre}>
-                               <button type="submit" name="ajouter_groupe_saisie" value="#CLE" class="submit noscroll ajouter_saisie"[ title="(#DESCRIPTION)"] [style="background-image:url((#ICONE|sinon{#CHEMIN{images/formulaire-saisie-defaut.png}}))"]>
-                                       <span>#TITRE</span>
-                               </button>
-                               </BOUCLE_saisies_groupes_disponibles>
-                       </[(#DIV|sinon{li})]>
-                       </B_saisies_groupes_disponibles>
-                       
-               </[(#DIV|sinon{ul})]>
-
-               
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-               <!--extra-->
-               
-               <span class='image_loading'></span>
-       </div></form>
-
-       <style>
-               .message_reinitialiser,#reinitialiser {display: none}
-               .modifie .message_reinitialiser,.modifie #reinitialiser {display: block}
-       </style>
-       <script type="text/javascript">
-       (function($){
-
-               function formulaire_configurer_onglets() {
-                       var $formulaire_configurer = $('.formulaire_configurer');
-                       var $onglets = $('<ul class="formulaire_configurer-onglets"></ul>');
-                       var $contenus = $formulaire_configurer.find('> .editer-groupe > .fieldset');
-
-                       // On ajoute le conteneur des onglets
-                       $formulaire_configurer.prepend($onglets);
-
-                       // On parcourt les contenus pour générer les onglets
-                       $contenus.each(function(i){
-                               // On ajoute un identifiant et une classe
-                               $(this)
-                                       .attr('id', 'formulaire_configurer-contenu-'+i)
-                                       .addClass('formulaire_configurer-contenu');
-                               // On récupère le titre (en le cachant au passage)
-                               var titre = $(this).find('[(#VAL{"{{{ titre }}}"}|propre|replace{"\n",""}|replace{"<(\S*).*>",$1,i})]').eq(0).hide().text();
-
-                               // On crée un onglet
-                               var $onglet = $('<li><a href="#formulaire_configurer-contenu-'+i+'">'+titre+'</a></li>');
-                               $onglet
-                                       .click(function(){
-                                               $contenus.hide();
-                                               $(
-                                                       $(this)
-                                                               .siblings()
-                                                                       .removeClass('actif')
-                                                               .end()
-                                                               .addClass('actif')
-                                                               .find('a')
-                                                                       .attr('href')
-                                               ).show();
-                                               return false;
-                                       });
-
-                               // On active le premier onglet au démarrage
-                               if (i == 0) {
-                                       $onglet.addClass('actif');
-                               }
-
-                               // S'il y a des erreurs dans cette partie du contenu, on met une classe "erreurs" à l'onglet aussi
-                               if ($(this).find('.editer.erreur').length > 0) {
-                                       $onglet.addClass('erreur');
-                               }
-
-                               // On ajoute l'onglet
-                               $onglets.append($onglet);
-                       })
-                       .hide()
-                       .eq(0)
-                               .show();
-               }
-
-               /* enlever les required */
-               $('.formulaire_#FORM .editer.obligatoire').find('input, textarea, select').each(function(){
-                       if ($(this).prop('required')) {
-                               $(this).prop('required', false);
-                       }
-               });
-
-               $('.formulaire_#FORM .configurable')
-                       .hover(
-                               function(){
-                                       $(this)
-                                               .addClass('hover')
-                                               .find('> .actions')
-                                                       .show()
-                                               .end()
-                                               .parents('li.configurable:not(.en_configuration)')
-                                                       .mouseout();
-                               },
-                               function(){
-                                       if (!$(this).is('.en_configuration'))
-                                               $(this)
-                                                       .removeClass('hover')
-                                                       .find('> .actions')
-                                                               .hide()
-                                                       .end()
-                                                       .parents('.configurable').eq('0')
-                                                               .mouseover();
-                               }
-                       )
-                       .filter(':not(.en_configuration)')
-                               .find('> .actions')
-                                       .hide()
-                               .end()
-                       .end();
-
-               // On lance la création des onglets
-               formulaire_configurer_onglets();
-
-               // Gérer la liste des vérifications
-               $('.liste_verifications').each(function(){
-                       var $options = $(this).siblings('.options_verifier').hide();
-                       var $select  = $(this).find('select');
-
-                       $select
-                               .change(function(){
-                                       var montrer = $(this).val() ? $(this).val() : 'soigfeg';
-                                       $options.hide().filter('.'+montrer).show();
-                               })
-                               .change();
-               });
-
-               // On déplie toujours les fieldsets plés par défaut
-               $('.fieldset.plie').each(function(){
-                       $(this)
-                               .removeClass('plie')
-                               .find('> fieldset > .editer-groupe').show();
-               });
-
-               [(#ENV{erreurs}|non|et{#ENV{_jquery_ui_all}|ou{#ENV{_chemin_ui}}})
-                       var saisies_sortable = function() {
-                               $( "#deplacable, #deplacable .editer-groupe" ).sortable({
-                                       revert: true,
-                                       containment: '#deplacable',
-                                       connectWith: "#deplacable, #deplacable .editer-groupe",
-                                       placeholder: "ui-state-highlight",
-                                       handle: '>.actions .deplacer_saisie',
-                                       start: function(event, ui) {
-                                               $('.ui-state-highlight')
-                                                       .css('height', ui.item.css('height'))
-                                                       .css('height', '+=20px');
-                                       },
-                                       update: function(event, ui) {
-                                               id = ui.item.data('id');
-                                               ou = ui.item.next().data('id');
-                                               // avant le suivant
-                                               if (!ou) {
-                                                       // sinon dans le parent
-                                                       ou = ui.item.closest('.fieldset').data('id');
-                                                       if (ou) {
-                                                               ou = '\[' + ou + '\]';
-                                                       }
-                                               }
-                                               url = "#URL_ECRIRE";
-                                               $.get(url, {
-                                                       session: '#ENV{_identifiant_session}',
-                                                       action: 'deplacer_saisie',
-                                                       saisie: id,
-                                                       ou: ou
-                                               }, function() {
-                                                       //$('input.vide').submit();
-                                                       $('.formulaire_#ENV{form}').addClass('modifie').trigger('modifsaisies');
-                                               });
-                                       }
-                               });
-                       }
-                       if (!$.fn.sortable) {
-                       [
-                               $.getScript("(#ENV{_jquery_ui_all})", function(){
-                       ]
-                       [(#ENV{_chemin_ui}|oui)
-                               $.getScript("#CHEMIN{#ENV{_chemin_ui}core.js}", function(){
-                               $.getScript("#CHEMIN{#ENV{_chemin_ui}widget.js}", function(){
-                               $.getScript("#CHEMIN{#ENV{_chemin_ui}mouse.js}", function(){
-                               $.getScript("#CHEMIN{#ENV{_chemin_ui}sortable.js}", function(){
-                       ]
-                                       if ($.fn.sortable) {
-                                               saisies_sortable();
-                                       }
-                       });
-                       [(#ENV{_chemin_ui}|oui)
-                               });});});
-                       ]
-                       } else {
-                               saisies_sortable();
-                       }
-               ]
-
-       })(jQuery);
-       </script>
-       </BOUCLE_editable>
-</div>
diff --git a/www/plugins/saisies/formulaires/construire_formulaire.php b/www/plugins/saisies/formulaires/construire_formulaire.php
deleted file mode 100644 (file)
index 86138dc..0000000
+++ /dev/null
@@ -1,622 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function formulaires_construire_formulaire_charger($identifiant, $formulaire_initial = array(), $options = array()) {
-       include_spip('inc/saisies');
-       $contexte = array();
-
-       // On ajoute un préfixe devant l'identifiant, pour être sûr
-       $identifiant = 'constructeur_formulaire_'.$identifiant;
-       $contexte['_identifiant_session'] = $identifiant;
-
-       // On vérifie ce qui a été passé en paramètre
-       if (!is_array($formulaire_initial)) {
-               $formulaire_initial = array();
-       }
-
-       // On initialise la session si elle est vide
-       if (is_null($formulaire_actuel = session_get($identifiant))) {
-               session_set($identifiant, $formulaire_initial);
-               $formulaire_actuel = $formulaire_initial;
-       }
-
-       // Si le formulaire actuel est différent du formulaire initial on agite un drapeau pour le dire
-       if ($formulaire_actuel != $formulaire_initial) {
-               $contexte['formulaire_modifie'] = true;
-       }
-       $contexte['_message_attention'] = _T('saisies:construire_attention_modifie');
-
-       // On passe ça pour l'affichage
-       $contexte['_contenu'] = $formulaire_actuel;
-
-       // On passe ça pour la récup plus facile des champs
-       $contexte['_saisies_par_nom'] = saisies_lister_par_nom($formulaire_actuel);
-       // Pour déclarer les champs modifiables à CVT
-       foreach (array_keys($contexte['_saisies_par_nom']) as $nom) {
-               $contexte["saisie_modifiee_$nom"] = array();
-       }
-
-       // La liste des saisies
-       $saisies_disponibles = saisies_lister_disponibles();
-       $contexte['_saisies_disponibles'] = $saisies_disponibles;
-
-       // La liste des groupes de saisies
-       $saisies_groupes_disponibles = saisies_groupes_lister_disponibles('saisies/groupes');
-       $contexte['_saisies_groupes_disponibles'] = $saisies_groupes_disponibles;
-
-       $contexte['fond_generer'] = 'formulaires/inc-generer_saisies_configurables';
-
-       // On cherche jquery UI pour savoir si on pourra glisser-déplacer
-       $contexte['_jquery_ui_all'] = false;
-
-       // SPIP 3.2
-       if ($jquery_ui_all = find_in_path('javascript/ui/jquery-ui.js')) {
-               $contexte['_jquery_ui_all'] = $jquery_ui_all;
-       // SPIP 3.1
-       } elseif (find_in_path('javascript/ui/sortable.js') and find_in_path('javascript/ui/draggable.js')) {
-               $contexte['_chemin_ui'] = 'javascript/ui/';
-       // SPIP 3.0
-       } elseif (find_in_path('javascript/ui/jquery.ui.sortable.js') and find_in_path('javascript/ui/jquery.ui.draggable.js')) {
-               $contexte['_chemin_ui'] = 'javascript/ui/jquery.ui.';
-       // Plugin jquery-ui absent.
-       } else {
-               $contexte['_chemin_ui'] = false;
-       }
-
-       return $contexte;
-}
-
-function formulaires_construire_formulaire_verifier($identifiant, $formulaire_initial = array(), $options = array()) {
-       include_spip('inc/saisies');
-       $erreurs = array();
-       // l'une ou l'autre sera presente
-       $configurer_saisie = $enregistrer_saisie = '';
-
-       // Pas d'erreur si l'on ne demande rien
-       if (
-               !($nom_ou_id = $configurer_saisie  = _request('configurer_saisie')
-               or $nom_ou_id = $enregistrer_saisie = _request('enregistrer_saisie'))
-       ) {
-               return $erreurs;
-       }
-
-       // On ajoute un préfixe devant l'identifiant
-       $identifiant = 'constructeur_formulaire_'.$identifiant;
-       // On récupère le formulaire à son état actuel
-       $formulaire_actuel = session_get($identifiant);
-
-       // On récupère les saisies actuelles, par identifiant ou par nom
-       if ($nom_ou_id[0] == '@') {
-               $saisies_actuelles = saisies_lister_par_identifiant($formulaire_actuel);
-               $nom = $saisies_actuelles[$nom_ou_id]['options']['nom'];
-       }
-       else {
-               $saisies_actuelles = saisies_lister_par_nom($formulaire_actuel);
-               $nom = $nom_ou_id;
-       }
-       $noms_autorises = array_keys($saisies_actuelles);
-
-       // le nom (ou identifiant) doit exister
-       if (!in_array($nom_ou_id, $noms_autorises)) {
-               return $erreurs;
-       }
-
-       // La liste des saisies
-       $saisies_disponibles = saisies_lister_disponibles();
-
-       $saisie = $saisies_actuelles[$nom_ou_id];
-       $formulaire_config = $saisies_disponibles[$saisie['saisie']]['options'];
-       array_walk_recursive($formulaire_config, 'construire_formulaire_transformer_nom', "saisie_modifiee_${nom}[options][@valeur@]");
-       $formulaire_config = saisie_identifier(array('saisies'=>$formulaire_config));
-       $formulaire_config = $formulaire_config['saisies'];
-
-       // Si la saisie possede un identifiant, on l'ajoute
-       // au formulaire de configuration pour ne pas le perdre en route
-       if (isset($saisie['identifiant']) and $saisie['identifiant']) {
-               $formulaire_config = saisies_inserer(
-                       $formulaire_config,
-                       array(
-                               'saisie' => 'hidden',
-                               'options' => array(
-                                       'nom' => "saisie_modifiee_${nom}[identifiant]",
-                                       'defaut' => $saisie['identifiant']
-                               ),
-                       )
-               );
-       }
-
-       // S'il y a l'option adéquat, on ajoute le champ pour modifier le nom
-       if (
-               isset($options['modifier_nom']) and $options['modifier_nom']
-               and $chemin_nom = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true)
-       ) {
-               $chemin_nom[] = 'saisies';
-               $chemin_nom[] = '0';
-
-               $formulaire_config = saisies_inserer(
-                       $formulaire_config,
-                       array(
-                               'saisie' => 'input',
-                               'options' => array(
-                                       'nom' => "saisie_modifiee_${nom}[options][nom]",
-                                       'label' => _T('saisies:option_nom_label'),
-                                       'explication' => _T('saisies:option_nom_explication'),
-                                       'obligatoire' => 'oui',
-                                       'size' => 50
-                               ),
-                               'verifier' => array(
-                                       'type' => 'regex',
-                                       'options' => array(
-                                               'modele' => '/^[\w]+$/'
-                                       )
-                               )
-                       ),
-                       $chemin_nom
-               );
-       }
-
-       // liste des options de vérification
-       $verif_options = array();
-
-       // S'il y a un groupe "validation" alors on va construire le formulaire des vérifications
-       if ($chemin_validation = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][validation]", true)) {
-               include_spip('inc/verifier');
-               $liste_verifications = verifier_lister_disponibles();
-               
-               // La vérification fichiers ne sert que pour la saisie fichiers, et réciproquement, cette saisies n'utilise que cette vérification
-               if ($saisie['saisie'] == 'fichiers') {
-                       $liste_verifications = array('fichiers'=>$liste_verifications['fichiers']);
-               } else {
-                       unset($liste_verifications['fichiers']);
-               }
-               uasort ($liste_verifications,'verifier_trier_par_titre');
-               $chemin_validation[] = 'saisies';
-               $chemin_validation[] = 1000000; // à la fin
-
-               // On construit la saisie à insérer et les fieldset des options
-               if ($saisie['saisie'] == 'fichiers') {
-                       $saisie_liste_verif = array(
-                               'saisie' => 'hidden',
-                               'options' => array(
-                                       'nom' => "saisie_modifiee_${nom}[verifier][type]",
-                                       'defaut' => 'fichiers'  
-                               )
-                       );
-               } else {
-                       $saisie_liste_verif = array(
-                               'saisie' => 'selection',
-                               'options' => array(
-                                       'nom' => "saisie_modifiee_${nom}[verifier][type]",
-                                       'label' => _T('saisies:construire_verifications_label'),
-                                       'option_intro' => _T('saisies:construire_verifications_aucune'),
-                                       'conteneur_class' => 'liste_verifications',
-                                       'datas' => array()
-                               )
-                       );
-               }
-               foreach ($liste_verifications as $type_verif => $verif) {
-                       $saisie_liste_verif['options']['datas'][$type_verif] = $verif['titre'];
-                       // Si le type de vérif a des options, on ajoute un fieldset
-                       if (isset($verif['options']) and $verif['options'] and is_array($verif['options'])) {
-                               $groupe = array(
-                                       'saisie' => 'fieldset',
-                                       'options' => array(
-                                               'nom' => 'options',
-                                               'label' => $verif['titre'],
-                                               'conteneur_class' => "$type_verif options_verifier"
-                                       ),
-                                       'saisies' => $verif['options']
-                               );
-                               array_walk_recursive($groupe, 'construire_formulaire_transformer_nom', "saisie_modifiee_${nom}[verifier][$type_verif][@valeur@]");
-                               array_walk_recursive($groupe, 'construire_formulaire_transformer_afficher_si', "saisie_modifiee_${nom}[verifier][$type_verif]");
-                               $verif_options[$type_verif] = $groupe;
-                       }
-               }
-               $verif_options = array_merge(array($saisie_liste_verif), $verif_options);
-       }
-       
-       // Permettre d'intégrer des saisies et fieldset au formulaire de configuration.
-       // Si des vérifications sont à faire, elles seront prises en compte
-       // lors des tests de vérifications à l'enregistrement.
-       $formulaire_config = pipeline('saisies_construire_formulaire_config', array(
-               'data' => $formulaire_config,
-               'args' => array(
-                       'identifiant' => $identifiant,
-                       'action' => $enregistrer_saisie ? 'enregistrer' : 'configurer',
-                       'options' => $options,
-                       'nom' => $nom,
-                       'saisie' => $saisie,
-               ),
-       ));
-
-       if ($enregistrer_saisie) {
-               // La saisie modifié
-               $saisie_modifiee = _request("saisie_modifiee_${nom}");
-               // On cherche les erreurs de la configuration
-               $vraies_erreurs = saisies_verifier($formulaire_config);
-               
-               // Si on autorise à modifier le nom ET qu'il doit être unique : on vérifie
-               if (isset($options['modifier_nom']) and $options['modifier_nom']
-                       and isset($options['nom_unique']) and $options['nom_unique']) {
-                       $nom_modifie = $saisie_modifiee['options']['nom'];
-                       if ($nom_modifie != $enregistrer_saisie and saisies_chercher($formulaire_actuel, $nom_modifie)) {
-                               $vraies_erreurs["saisie_modifiee_${nom}[options][nom]"] = _T('saisies:erreur_option_nom_unique');
-                       }
-               }
-               
-               // On regarde s'il a été demandé un type de vérif
-               if (isset($saisie_modifiee['verifier']['type'])
-                       and (($type_verif = $saisie_modifiee['verifier']['type']) != '')
-                       and $verif_options[$type_verif]) {
-                       // On ne vérifie que les options du type demandé
-                       $vraies_erreurs = array_merge($vraies_erreurs, saisies_verifier($verif_options[$type_verif]['saisies']));
-               }
-       }
-
-       // On insère chaque saisie des options de verification
-       if ($verif_options) {
-               foreach ($verif_options as $saisie_verif) {
-                       $formulaire_config = saisies_inserer($formulaire_config, $saisie_verif, $chemin_validation);
-               }
-       }
-       $erreurs['configurer_'.$nom] = $formulaire_config;
-
-       if ($enregistrer_saisie) {
-               if ($vraies_erreurs) {
-                       $erreurs = array_merge($erreurs, $vraies_erreurs);
-                       $erreurs['message_erreur'] = singulier_ou_pluriel(count($vraies_erreurs), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
-               } else {
-                       $erreurs = array();
-               }
-       } else {
-               $erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique
-       }
-
-       return $erreurs;
-}
-
-function formulaires_construire_formulaire_traiter($identifiant, $formulaire_initial = array(), $options = array()) {
-       include_spip('inc/saisies');
-       $retours = array();
-       $saisies_disponibles = saisies_lister_disponibles();
-
-       // On ajoute un préfixe devant l'identifiant
-       $identifiant = 'constructeur_formulaire_'.$identifiant;
-       // On récupère le formulaire à son état actuel
-       $formulaire_actuel = session_get($identifiant);
-
-       // Si on demande à ajouter un groupe
-       if ($ajouter_saisie = _request('ajouter_groupe_saisie')) {
-               $formulaire_actuel = saisies_groupe_inserer($formulaire_actuel, $ajouter_saisie);
-       }
-
-       // Si on demande à ajouter une saisie
-       if ($ajouter_saisie = _request('ajouter_saisie')) {
-               $nom = saisies_generer_nom($formulaire_actuel, $ajouter_saisie);
-               $saisie = array(
-                       'saisie' => $ajouter_saisie,
-                       'options' => array(
-                               'nom' => $nom
-                       )
-               );
-               // S'il y a des valeurs par défaut pour ce type de saisie, on les ajoute
-               if (($defaut = $saisies_disponibles[$ajouter_saisie]['defaut']) and is_array($defaut)) {
-                       $defaut = _T_ou_typo($defaut, 'multi');
-
-                       //Compatibilite PHP<5.3.0
-                       //source : http://www.php.net/manual/en/function.array-replace-recursive.php#92574
-                       if (!function_exists('array_replace_recursive')) {
-                               function array_replace_recursive($array, $array1) {
-                                       function recurse($array, $array1) {
-                                               foreach ($array1 as $key => $value) {
-                                                       // create new key in $array, if it is empty or not an array
-                                                       if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))) {
-                                                               $array[$key] = array();
-                                                       }
-                                                       // overwrite the value in the base array
-                                                       if (is_array($value)) {
-                                                               $value = recurse($array[$key], $value);
-                                                       }
-                                                       $array[$key] = $value;
-                                               }
-                                               return $array;
-                                       }
-
-                                       // handle the arguments, merge one by one
-                                       $args = func_get_args();
-                                       $array = $args[0];
-                                       if (!is_array($array)) {
-                                               return $array;
-                                       }
-                                       for ($i = 1; $i < count($args); $i++) {
-                                               if (is_array($args[$i])) {
-                                                       $array = recurse($array, $args[$i]);
-                                               }
-                                       }
-                                       return $array;
-                               }
-                       }
-                       $saisie = array_replace_recursive($saisie, $defaut);
-               }
-               
-               $formulaire_actuel = saisies_inserer($formulaire_actuel, $saisie);
-       }
-
-       // Si on demande à dupliquer une saisie
-       if ($dupliquer_saisie = _request('dupliquer_saisie')) {
-               $formulaire_actuel = saisies_dupliquer($formulaire_actuel, $dupliquer_saisie);
-       }
-
-       // Si on demande à supprimer une saisie
-       if ($supprimer_saisie = _request('supprimer_saisie')) {
-               $formulaire_actuel = saisies_supprimer($formulaire_actuel, $supprimer_saisie);
-       }
-
-       // Si on enregistre la conf d'une saisie
-       if ($nom = _request('enregistrer_saisie')) {
-               // On récupère ce qui a été modifié
-               $saisie_modifiee = _request("saisie_modifiee_$nom");
-
-               // On regarde s'il y a une position à modifier
-               if (isset($saisie_modifiee['position'])) {
-                       $position = $saisie_modifiee['position'];
-                       unset($saisie_modifiee['position']);
-                       // On ne déplace que si ce n'est pas la même chose
-                       if ($position != $nom) {
-                               $formulaire_actuel = saisies_deplacer($formulaire_actuel, $nom, $position);
-                       }
-               }
-
-               // On regarde s'il y a des options de vérification à modifier
-               if (isset($saisie_modifiee['verifier']['type'])
-                       and ($type_verif = $saisie_modifiee['verifier']['type']) != '') {
-                       $saisie_modifiee['verifier'] = array(
-                               'type' => $type_verif,
-                               'options' => $saisie_modifiee['verifier'][$type_verif]
-                       );
-               } else {
-                       unset($saisie_modifiee['verifier']);
-               }
-
-               // On récupère les options postées en enlevant les chaines vides
-               $saisie_modifiee['options'] = array_filter($saisie_modifiee['options'], 'saisie_option_contenu_vide');
-               if (isset($saisie_modifiee['verifier']['options']) and $saisie_modifiee['verifier']['options']) {
-                       $saisie_modifiee['verifier']['options'] = array_filter($saisie_modifiee['verifier']['options'], 'saisie_option_contenu_vide');
-               }
-
-               // On désinfecte à la main
-               if (is_array($saisie_modifiee['options'])) {
-                       spip_desinfecte($saisie_modifiee['options']);
-               }
-
-               // On modifie enfin
-               $formulaire_actuel = saisies_modifier($formulaire_actuel, $nom, $saisie_modifiee);
-       }
-
-       // Si on demande à réinitialiser
-       if (_request('reinitialiser') == 'oui') {
-               $formulaire_actuel = $formulaire_initial;
-       }
-
-       // On enregistre en session la nouvelle version du formulaire
-       session_set($identifiant, $formulaire_actuel);
-
-       // Le formulaire reste éditable
-       $retours['editable'] = true;
-
-       return $retours;
-}
-
-// À utiliser avec un array_walk_recursive()
-// Applique une transformation à la @valeur@ de tous les champs "nom" d'un formulaire, y compris loin dans l'arbo
-function construire_formulaire_transformer_nom(&$valeur, $cle, $transformation) {
-       if ($cle == 'nom' and is_string($valeur)) {
-               $valeur = str_replace('@valeur@', $valeur, $transformation);
-       }
-}
-
-// À utiliser avec un array_walk_recursive()
-// Applique une transformation à la valeur de tous les champs "afficher_si" d'un formulaire, y compris loin dans l'arbo
-function construire_formulaire_transformer_afficher_si(&$valeur, $cle, $transformation) {
-       if ($cle == 'afficher_si' and is_string($valeur)) {
-               $valeur = preg_replace("#@(.*)@#", '@'.$transformation.'[${1}]@', $valeur);
-       }
-}
-
-// Préparer une saisie pour la transformer en truc configurable
-function construire_formulaire_generer_saisie_configurable($saisie, $env) {
-       // On récupère le nom
-       $nom = $saisie['options']['nom'];
-       $identifiant = isset($saisie['identifiant']) ? $saisie['identifiant'] : '';
-       // On cherche si ya un formulaire de config
-       $formulaire_config = isset($env['erreurs']['configurer_'.$nom]) ? $env['erreurs']['configurer_'.$nom] : '';
-       
-       // On ajoute une classe
-       if (!isset($saisie['options']['conteneur_class'])) {
-               $saisie['options']['conteneur_class'] = ''; // initialisation
-       }
-       // Compat ancien nom li_class
-       if (isset($saisie['options']['li_class'])) {
-               $saisie['options']['conteneur_class'] .= ' ' . $saisie['options']['li_class']; // initialisation
-       }
-       $saisie['options']['conteneur_class'] .= ' configurable';
-
-       // On ajoute l'option "tout_afficher"
-       $saisie['options']['tout_afficher'] = 'oui';
-
-       // On ajoute les boutons d'actions, mais seulement s'il n'y a pas de configuration de lancée
-       if (!$env['erreurs']) {
-               $saisie = saisies_inserer_html(
-                       $saisie,
-                       recuperer_fond(
-                               'formulaires/inc-construire_formulaire-actions',
-                               array(
-                                       'nom' => $nom,
-                                       'identifiant' => $identifiant,
-                                       'formulaire_config' => $formulaire_config,
-                                       'deplacable' => (!empty($env['_jquery_ui_all']) or !empty($env['_chemin_ui']))
-                               )
-                       ),
-                       'debut'
-               );
-       }
-
-       // On ajoute une ancre pour s'y déplacer
-       $saisie = saisies_inserer_html(
-               $saisie,
-               "\n<a id=\"configurer_$nom\"></a>\n",
-               'debut'
-       );
-
-       // Si ya un form de config on l'ajoute à la fin
-       if (is_array($formulaire_config)) {
-               // On double l'environnement
-               $env2 = $env;
-               // On ajoute une classe
-               $saisie['options']['conteneur_class'] .= ' en_configuration';
-
-               // Si possible on met en readonly
-               $saisie['options']['readonly'] = 'oui';
-
-               // On vire les sous-saisies s'il y en a
-               if (isset($saisie['saisies']) and $saisie['saisies'] and is_array($saisie['saisies'])) {
-                       $nb_champs_masques = count(saisies_lister_champs($saisie['saisies']));
-                       $saisie['saisies'] = array(
-                               array(
-                                       'saisie' => 'explication',
-                                       'options' => array(
-                                               'nom' => 'truc',
-                                               'texte' => _T('saisies:construire_info_nb_champs_masques', array('nb'=>$nb_champs_masques)),
-                                       )
-                               )
-                       );
-               }
-
-               // On va ajouter le champ pour la position
-               if (!($chemin_description = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true))) {
-                       $chemin_description = array(0);
-                       $formulaire_config = saisies_inserer(
-                               $formulaire_config,
-                               array(
-                                       'saisie' => 'fieldset',
-                                       'options' => array(
-                                               'nom' => "saisie_modifiee_${nom}[options][description]",
-                                               'label' => _T('saisies:option_groupe_description')
-                                       ),
-                                       'saisies' => array()
-                               ),
-                               0
-                       );
-               }
-               $chemin_description[] = 'saisies';
-               $chemin_description[] = '0'; // tout au début
-               $formulaire_config = saisies_inserer(
-                       $formulaire_config,
-                       array(
-                               'saisie' => 'position_construire_formulaire',
-                               'options' => array(
-                                       'nom' => "saisie_modifiee_${nom}[position]",
-                                       'label' => _T('saisies:construire_position_label'),
-                                       'explication' => _T('saisies:construire_position_explication'),
-                                       'formulaire' => $env['_contenu'],
-                                       'saisie_a_positionner' => $nom
-                               )
-                       ),
-                       $chemin_description
-               );
-
-               $env2['saisies'] = $formulaire_config;
-
-               // Un test pour savoir si on prend le _request ou bien
-               $erreurs_test = $env['erreurs'];
-               unset($erreurs_test['configurer_'.$nom]);
-               unset($erreurs_test['message_erreur']);
-
-               if ($erreurs_test) {
-                       // Là aussi on désinfecte à la main
-                       if (isset($env2["saisie_modifiee_$nom"]['options']) and is_array($env2["saisie_modifiee_$nom"]['options'])) {
-                               spip_desinfecte($env2["saisie_modifiee_$nom"]['options']);
-                       }
-               } else {
-                       $env2["saisie_modifiee_$nom"] = $env2['_saisies_par_nom'][$nom];
-                       // il n'y a pas toujours de verification...
-                       if (isset($env2["saisie_modifiee_$nom"]['verifier'])) {
-                               $env2["saisie_modifiee_$nom"]['verifier'][ $env2["saisie_modifiee_$nom"]['verifier']['type'] ]
-                                       = $env2["saisie_modifiee_$nom"]['verifier']['options'];
-                       }
-               }
-
-               $env2['fond_generer'] = 'inclure/generer_saisies';
-               $saisie = saisies_inserer_html(
-                       $saisie,
-                       '<div class="formulaire_configurer"><'.saisie_balise_structure_formulaire('ul').' class="editer-groupe formulaire_configurer-contenus">'
-                       .recuperer_fond(
-                               'inclure/generer_saisies',
-                               $env2
-                       )
-                       .'<'.saisie_balise_structure_formulaire('li').' class="boutons">
-                               <input type="hidden" name="enregistrer_saisie" value="'.$nom.'" />
-                               <button type="submit" class="submit link noscroll" name="enregistrer_saisie" value="">'._T('bouton_annuler').'</button>
-                               <input type="submit" class="submit noscroll" name="enregistrer" value="'._T('bouton_valider').'" />
-                       </'.saisie_balise_structure_formulaire('li').'>'
-                       .'</'.saisie_balise_structure_formulaire('ul').'></div>',
-                       'fin'
-               );
-       }
-       
-       // On génère le HTML de la saisie
-       $html = saisies_generer_html($saisie, $env);
-       
-       return $html;
-}
-
-/**
- * Callback d'array_filter()
- * Permet de retourner tout ce qui n'est pas un contenu vide.
- * La valeur '0' est par contre retournée.
- *
- * @param $var La variable a tester
- * @return bool L'accepte-t-on ?
-**/
-function saisie_option_contenu_vide($var) {
-       if (!$var) {
-               if (is_string($var) and strlen($var)) {
-                       return true;
-               }
-               return false;
-       }
-       return true;
-}
-
-function saisies_groupe_inserer($formulaire_actuel, $saisie) {
-       include_spip('inclure/configurer_saisie_fonctions');
-
-       //le groupe de saisies
-       $saisies_charger_infos = saisies_charger_infos($saisie, $saisies_repertoire = 'saisies/groupes');
-
-       //le tableau est-il en options ou en saisies ?
-       $classique_yaml=count($saisies_charger_infos['options']);
-       $formidable_yaml=count($saisies_charger_infos['saisies']);
-       if ($classique_yaml>0) {
-               $champ_options = 'options';
-       }
-       if ($formidable_yaml>0) {
-               $champ_options = 'saisies';
-       }
-
-       //les champs du groupe
-       foreach ($saisies_charger_infos[$champ_options] as $info_saisie) {
-               unset($info_saisie['identifiant']);
-               $saisies_disponibles = saisies_lister_disponibles();
-               $construire_nom = $info_saisie[$champ_options]['nom'] ? $info_saisie[$champ_options]['nom'] : $info_saisie['saisie'];
-               $nom = $info_saisie[$champ_options]['nom'] = saisies_generer_nom($formulaire_actuel, $construire_nom);
-
-               $formulaire_actuel = saisies_inserer($formulaire_actuel, $info_saisie);
-       }
-       
-       return $formulaire_actuel;
-}
diff --git a/www/plugins/saisies/formulaires/inc-construire_formulaire-actions.html b/www/plugins/saisies/formulaires/inc-construire_formulaire-actions.html
deleted file mode 100644 (file)
index d9552a7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<div class="actions">
-       #SET{nom,#ENV{identifiant,#ENV{nom}}}
-       [(#ENV{formulaire_config}|is_array|non)
-       [(#ENV{deplacable}|oui)
-       <span class="move deplacer_saisie" title="<:saisies:construire_action_deplacer:>">
-               <img src="[(#CHEMIN{images/formulaire-deplacer-16.png})]" alt="<:saisies:construire_action_deplacer:>"/>
-       </span>
-       ]
-       <button type="submit" class="submit noscroll configurer_saisie" name="configurer_saisie" value="#GET{nom}" title="<:saisies:construire_action_configurer:>">
-               <img src="[(#CHEMIN{images/formulaire-configurer-16.png})]" alt="<:saisies:construire_action_configurer:>"/>
-       </button>
-       <button type="submit" class="submit noscroll dupliquer_saisie" name="dupliquer_saisie" value="#GET{nom}" title="<:saisies:construire_action_dupliquer:>">
-               <img src="[(#CHEMIN{images/formulaire-dupliquer-16.png})]" alt="<:saisies:construire_action_dupliquer:>"/>
-       </button>
-       <button type="submit" class="submit noscroll supprimer_saisie" name="supprimer_saisie" value="#GET{nom}" title="<:saisies:construire_action_supprimer:>" onclick="javascript:return confirm('<:saisies:construire_confirmer_supprimer_champ:>');">
-               <img src="[(#CHEMIN{images/formulaire-supprimer-16.png})]" alt="<:saisies:construire_action_supprimer:>"/>
-       </button>
-       ]
-       [(#ENV{formulaire_config}|is_array|oui)
-       <button type="submit" class="submit enregistrer_saisie" name="enregistrer_saisie" value="#GET{nom}" title="<:bouton_enregistrer:>">
-               <img src="[(#CHEMIN{images/formulaire-enregistrer-16.png})]" alt="<:bouton_enregistrer:>"/>
-       </button>
-       <button type="submit" class="submit annuler" name="enregistrer_saisie" value="" title="<:saisies:construire_action_annuler:>">
-               <img src="[(#CHEMIN{images/formulaire-annuler-16.png})]" alt="<:saisies:construire_action_annuler:>"/>
-       </button>
-       ]
-</div>
diff --git a/www/plugins/saisies/formulaires/inc-generer_saisies_configurables.html b/www/plugins/saisies/formulaires/inc-generer_saisies_configurables.html
deleted file mode 100644 (file)
index 3a40f8f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[(#REM) 
-  Exemple d'appel :
-    #INCLURE{fond=formulaires/inc-generer_saisies_configurables, env, fond_generer=formulaires/inc-generer_saisies_configurables, saisies=#ENV{tableau}}
-]
-<BOUCLE_contenu(POUR){tableau #ENV{saisies}}>
-[(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
-       [(#VALEUR**|construire_formulaire_generer_saisie_configurable{#ENV{_env}|sinon{#ENV**|unserialize}})]
-]
-</BOUCLE_contenu>
diff --git a/www/plugins/saisies/formulaires/inc-saisies-cvt.html b/www/plugins/saisies/formulaires/inc-saisies-cvt.html
deleted file mode 100644 (file)
index 2b3e5b5..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<div class="formulaire_spip formulaire_#ENV{form}">\r
-       [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]\r
-       [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>]\r
-       \r
-       [(#ENV{editable}|oui)\r
-       <form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>\r
-               [(#REM) declarer les hidden qui declencheront le service du formulaire \r
-               parametre : url d'action ]\r
-               #ACTION_FORMULAIRE{#ENV{action}}\r
-               \r
-               <[(#DIV|sinon{ul})] class="editer-groupe">\r
-                       #GENERER_SAISIES{#ENV{_saisies}}\r
-               </[(#DIV|sinon{ul})]>\r
-               \r
-               [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]\r
-               <!--extra-->\r
-               \r
-               <p class="boutons">\r
-                       <span class="image_loading"></span>\r
-                       <input type="submit" class="submit" value="[(#ENV{_saisies/options/texte_submit, #ENV{saisies_texte_submit, <:bouton_enregistrer:>}})]" />\r
-               </p>\r
-       </div></form>\r
-       ]\r
-</div>\r
diff --git a/www/plugins/saisies/formulaires/saisies_cvt.html b/www/plugins/saisies/formulaires/saisies_cvt.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/www/plugins/saisies/formulaires/saisies_cvt.php b/www/plugins/saisies/formulaires/saisies_cvt.php
deleted file mode 100644 (file)
index f609a80..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function formulaires_saisies_cvt_saisies_dist() {
-       include_spip('inc/saisies');
-       
-       $saisies = array(
-               'options' => array(
-                       'texte_submit' => 'Prout !',
-                       'activer_etapes' => true,
-               ),
-               array(
-                       'saisie' => 'input',
-                       'options' => array(
-                               'nom' => 'nom',
-                               'label' => 'Nom'
-                       )
-               ),
-               array(
-                       'saisie' => 'input',
-                       'options' => array(
-                               'nom' => 'email',
-                               'obligatoire' => 'oui',
-                               'label' => 'E-mail'
-                       ),
-                       'verifier' => array(
-                               'type' => 'email'
-                       )
-               ),
-               array(
-                       'saisie' => 'input',
-                       'options' => array(
-                               'nom' => 'a_supprimer',
-                               'label' => 'Un champ à supprimer'
-                       )
-               ),
-               array(
-                       'saisie' => 'textarea',
-                       'options' => array(
-                               'nom' => 'message',
-                               'obligatoire' => 'oui',
-                               'label' => 'Un message'
-                       ),
-                       'verifier' => array(
-                               'type' => 'taille',
-                               'options' => array('min' => 10)
-                       )
-               )
-       );
-       
-       $chemin = saisies_chercher($saisies, 'a_supprimer', true);
-       $saisies = saisies_supprimer($saisies, $chemin);
-       $saisies = saisies_dupliquer($saisies, 'message');
-       $saisies = saisies_deplacer($saisies, 'email', 'nom');
-       var_dump($saisies);
-       
-       return $saisies;
-}
-
-function formulaires_saisies_cvt_charger() {
-       $contexte = array(
-               'saisies_texte_submit' => 'Caca !',
-       );
-       
-       return $contexte;
-}
diff --git a/www/plugins/saisies/images/formulaire-annuler-16.png b/www/plugins/saisies/images/formulaire-annuler-16.png
deleted file mode 100644 (file)
index a62df55..0000000
Binary files a/www/plugins/saisies/images/formulaire-annuler-16.png and /dev/null differ
diff --git a/www/plugins/saisies/images/formulaire-configurer-16.png b/www/plugins/saisies/images/formulaire-configurer-16.png
deleted file mode 100644 (file)
index 9602239..0000000
Binary files a/www/plugins/saisies/images/formulaire-configurer-16.png and /dev/null differ
diff --git a/www/plugins/saisies/images/formulaire-deplacer-16.png b/www/plugins/saisies/images/formulaire-deplacer-16.png
deleted file mode 100644 (file)
index ae1f378..0000000
Binary files a/www/plugins/saisies/images/formulaire-deplacer-16.png and /dev/null differ
diff --git a/www/plugins/saisies/images/formulaire-dupliquer-16.png b/www/plugins/saisies/images/formulaire-dupliquer-16.png
deleted file mode 100644 (file)
index 81b29b0..0000000
Binary files a/www/plugins/saisies/images/formulaire-dupliquer-16.png and /dev/null differ
diff --git a/www/plugins/saisies/images/formulaire-enregistrer-16.png b/www/plugins/saisies/images/formulaire-enregistrer-16.png
deleted file mode 100644 (file)
index a16058a..0000000
Binary files a/www/plugins/saisies/images/formulaire-enregistrer-16.png and /dev/null differ
diff --git a/www/plugins/saisies/images/formulaire-reinitialiser-24.png b/www/plugins/saisies/images/formulaire-reinitialiser-24.png
deleted file mode 100644 (file)
index 3753bdb..0000000
Binary files a/www/plugins/saisies/images/formulaire-reinitialiser-24.png and /dev/null differ
diff --git a/www/plugins/saisies/images/formulaire-saisie-defaut.png b/www/plugins/saisies/images/formulaire-saisie-defaut.png
deleted file mode 100644 (file)
index 7bc466f..0000000
Binary files a/www/plugins/saisies/images/formulaire-saisie-defaut.png and /dev/null differ
diff --git a/www/plugins/saisies/images/formulaire-supprimer-16.png b/www/plugins/saisies/images/formulaire-supprimer-16.png
deleted file mode 100644 (file)
index 6ac75b7..0000000
Binary files a/www/plugins/saisies/images/formulaire-supprimer-16.png and /dev/null differ
diff --git a/www/plugins/saisies/images/logo_saisie_48.png b/www/plugins/saisies/images/logo_saisie_48.png
deleted file mode 100644 (file)
index e2fb5cf..0000000
Binary files a/www/plugins/saisies/images/logo_saisie_48.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies-16.png b/www/plugins/saisies/images/saisies-16.png
deleted file mode 100644 (file)
index 8bb56ad..0000000
Binary files a/www/plugins/saisies/images/saisies-16.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies-24.png b/www/plugins/saisies/images/saisies-24.png
deleted file mode 100644 (file)
index 13c7ba6..0000000
Binary files a/www/plugins/saisies/images/saisies-24.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies-32.png b/www/plugins/saisies/images/saisies-32.png
deleted file mode 100644 (file)
index 4b7b57b..0000000
Binary files a/www/plugins/saisies/images/saisies-32.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_auteurs.png b/www/plugins/saisies/images/saisies_auteurs.png
deleted file mode 100644 (file)
index c499c62..0000000
Binary files a/www/plugins/saisies/images/saisies_auteurs.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_case.png b/www/plugins/saisies/images/saisies_case.png
deleted file mode 100644 (file)
index 5d58513..0000000
Binary files a/www/plugins/saisies/images/saisies_case.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_checkbox.png b/www/plugins/saisies/images/saisies_checkbox.png
deleted file mode 100644 (file)
index bd3a39f..0000000
Binary files a/www/plugins/saisies/images/saisies_checkbox.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_date.png b/www/plugins/saisies/images/saisies_date.png
deleted file mode 100644 (file)
index f12401b..0000000
Binary files a/www/plugins/saisies/images/saisies_date.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_email.png b/www/plugins/saisies/images/saisies_email.png
deleted file mode 100644 (file)
index 26e4958..0000000
Binary files a/www/plugins/saisies/images/saisies_email.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_explication.png b/www/plugins/saisies/images/saisies_explication.png
deleted file mode 100644 (file)
index 6bc9948..0000000
Binary files a/www/plugins/saisies/images/saisies_explication.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_fieldset.png b/www/plugins/saisies/images/saisies_fieldset.png
deleted file mode 100644 (file)
index 3648cf0..0000000
Binary files a/www/plugins/saisies/images/saisies_fieldset.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_hidden.png b/www/plugins/saisies/images/saisies_hidden.png
deleted file mode 100644 (file)
index 8af937e..0000000
Binary files a/www/plugins/saisies/images/saisies_hidden.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_input.png b/www/plugins/saisies/images/saisies_input.png
deleted file mode 100644 (file)
index f0d9278..0000000
Binary files a/www/plugins/saisies/images/saisies_input.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_oui_non.png b/www/plugins/saisies/images/saisies_oui_non.png
deleted file mode 100644 (file)
index 9445412..0000000
Binary files a/www/plugins/saisies/images/saisies_oui_non.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_radio.png b/www/plugins/saisies/images/saisies_radio.png
deleted file mode 100644 (file)
index c4d45d1..0000000
Binary files a/www/plugins/saisies/images/saisies_radio.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_selecteur_article.png b/www/plugins/saisies/images/saisies_selecteur_article.png
deleted file mode 100644 (file)
index e9f5cae..0000000
Binary files a/www/plugins/saisies/images/saisies_selecteur_article.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_selecteur_rubrique.png b/www/plugins/saisies/images/saisies_selecteur_rubrique.png
deleted file mode 100644 (file)
index 3ddb984..0000000
Binary files a/www/plugins/saisies/images/saisies_selecteur_rubrique.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_selecteur_rubrique_article.png b/www/plugins/saisies/images/saisies_selecteur_rubrique_article.png
deleted file mode 100644 (file)
index e976778..0000000
Binary files a/www/plugins/saisies/images/saisies_selecteur_rubrique_article.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_selection.png b/www/plugins/saisies/images/saisies_selection.png
deleted file mode 100644 (file)
index 40bbb60..0000000
Binary files a/www/plugins/saisies/images/saisies_selection.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_selection_multiple.png b/www/plugins/saisies/images/saisies_selection_multiple.png
deleted file mode 100644 (file)
index b353ba2..0000000
Binary files a/www/plugins/saisies/images/saisies_selection_multiple.png and /dev/null differ
diff --git a/www/plugins/saisies/images/saisies_textarea.png b/www/plugins/saisies/images/saisies_textarea.png
deleted file mode 100644 (file)
index 227036b..0000000
Binary files a/www/plugins/saisies/images/saisies_textarea.png and /dev/null differ
diff --git a/www/plugins/saisies/inc/saisies.php b/www/plugins/saisies/inc/saisies.php
deleted file mode 100644 (file)
index 8243fa6..0000000
+++ /dev/null
@@ -1,563 +0,0 @@
-<?php
-
-/**
- * Gestion de l'affichage des saisies
- *
- * @package SPIP\Saisies\Saisies
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// Différentes méthodes pour trouver les saisies
-include_spip('inc/saisies_lister');
-
-// Différentes méthodes pour manipuler une liste de saisies
-include_spip('inc/saisies_manipuler');
-
-// Les outils pour afficher les saisies et leur vue
-include_spip('inc/saisies_afficher');
-
-/**
- * Cherche la description des saisies d'un formulaire CVT dont on donne le nom
- *
- * @param string $form Nom du formulaire dont on cherche les saisies
- * @param array $args Tableau d'arguments du formulaire
- * @return array Retourne les saisies du formulaire sinon false
- */
-function saisies_chercher_formulaire($form, $args) {
-       if (
-               $fonction_saisies = charger_fonction('saisies', 'formulaires/'.$form, true)
-               and $saisies = call_user_func_array($fonction_saisies, $args)
-               and is_array($saisies)
-               // On passe les saisies dans un pipeline normé comme pour CVT
-               and $saisies = pipeline(
-                       'formulaire_saisies',
-                       array(
-                               'args' => array('form' => $form, 'args' => $args),
-                               'data' => $saisies
-                       )
-               )
-               // Si c'est toujours un tableau après le pipeline
-               and is_array($saisies)
-       ) {
-               return $saisies;
-       } else {
-               return false;
-       }
-}
-
-/**
- * Cherche une saisie par son id, son nom ou son chemin et renvoie soit la saisie, soit son chemin
- *
- * @param array $saisies Un tableau décrivant les saisies
- * @param unknown_type $id_ou_nom_ou_chemin L'identifiant ou le nom de la saisie à chercher ou le chemin sous forme d'une liste de clés
- * @param bool $retourner_chemin Indique si on retourne non pas la saisie mais son chemin
- * @return array Retourne soit la saisie, soit son chemin, soit null
- */
-function saisies_chercher($saisies, $id_ou_nom_ou_chemin, $retourner_chemin = false) {
-       if (is_array($saisies) and $id_ou_nom_ou_chemin) {
-               if (is_string($id_ou_nom_ou_chemin)) {
-                       $nom = $id_ou_nom_ou_chemin;
-                       // identifiant ? premier caractere @
-                       $id = ($nom[0] == '@');
-
-                       foreach ($saisies as $cle => $saisie) {
-                               $chemin = array($cle);
-                               // notre saisie est la bonne ?
-                               if ($nom == ($id ? $saisie['identifiant'] : $saisie['options']['nom'])) {
-                                       return $retourner_chemin ? $chemin : $saisie;
-                               // sinon a telle des enfants ? et si c'est le cas, cherchons dedans
-                               } elseif (isset($saisie['saisies']) and is_array($saisie['saisies']) and $saisie['saisies']
-                                       and ($retour = saisies_chercher($saisie['saisies'], $nom, $retourner_chemin))) {
-                                               return $retourner_chemin ? array_merge($chemin, array('saisies'), $retour) : $retour;
-                               }
-                       }
-               }
-               elseif (is_array($id_ou_nom_ou_chemin)) {
-                       $chemin = $id_ou_nom_ou_chemin;
-                       $saisie = $saisies;
-                       
-                       // On vérifie l'existence quand même
-                       foreach ($chemin as $cle) {
-                               if (isset($saisie[$cle])) {
-                                       $saisie = $saisie[$cle];
-                               } else {
-                                       return null;
-                               }
-                       }
-                       
-                       // Si c'est une vraie saisie
-                       if ($saisie['saisie'] and $saisie['options']['nom']) {
-                               return $retourner_chemin ? $chemin : $saisie;
-                       }
-               }
-       }
-
-       return null;
-}
-
-/**
- * Génère un nom unique pour un champ d'un formulaire donné
- *
- * @param array $formulaire
- *     Le formulaire à analyser
- * @param string $type_saisie
- *     Le type de champ dont on veut un identifiant
- * @return string
- *     Un nom unique par rapport aux autres champs du formulaire
- */
-function saisies_generer_nom($formulaire, $type_saisie) {
-       $champs = saisies_lister_champs($formulaire);
-
-       // Tant que type_numero existe, on incrémente le compteur
-       $compteur = 1;
-       while (array_search($type_saisie.'_'.$compteur, $champs) !== false) {
-               $compteur++;
-       }
-
-       // On a alors un compteur unique pour ce formulaire
-       return $type_saisie.'_'.$compteur;
-}
-
-/**
- * Crée un identifiant Unique
- * pour toutes les saisies donnees qui n'en ont pas
- *
- * @param Array $saisies Tableau de saisies
- * @param Bool $regenerer Régénère un nouvel identifiant pour toutes les saisies ?
- * @return Array Tableau de saisies complété des identifiants
- */
-function saisies_identifier($saisies, $regenerer = false) {
-       if (!is_array($saisies)) {
-               return array();
-       }
-       
-       foreach ($saisies as $k => $saisie) {
-               $saisies[$k] = saisie_identifier($saisie, $regenerer);
-       }
-       
-       return $saisies;
-}
-
-/**
- * Crée un identifiant Unique
- * pour la saisie donnee si elle n'en a pas
- * (et pour ses sous saisies éventuels)
- *
- * @param Array $saisie Tableau d'une saisie
- * @param Bool $regenerer Régénère un nouvel identifiant pour la saisie ?
- * @return Array Tableau de la saisie complété de l'identifiant
-**/
-function saisie_identifier($saisie, $regenerer = false) {
-       if (!isset($saisie['identifiant']) or !$saisie['identifiant']) {
-               $saisie['identifiant'] = uniqid('@');
-       } elseif ($regenerer) {
-               $saisie['identifiant'] = uniqid('@');
-       }
-       if (isset($saisie['saisies']) and is_array($saisie['saisies'])) {
-               $saisie['saisies'] = saisies_identifier($saisie['saisies'], $regenerer);
-       }
-       
-       return $saisie;
-}
-
-/**
- * Vérifier tout un formulaire tel que décrit avec les Saisies
- *
- * @param array $formulaire Le contenu d'un formulaire décrit dans un tableau de Saisies
- * @param bool $saisies_masquees_nulles Si TRUE, les saisies masquées selon afficher_si ne seront pas verifiées, leur valeur étant forcée a NULL. Cette valeur NULL est transmise à traiter (via set_request).
- * @param array &$erreurs_fichiers pour les saisies de type fichiers, un tableau qui va stocker champs par champs, puis fichier par fichier, les erreurs de chaque fichier, pour pouvoir ensuite éventuellement supprimer les fichiers erronées de $_FILES
- * @return array Retourne un tableau d'erreurs
- */
-function saisies_verifier($formulaire, $saisies_masquees_nulles = true, &$erreurs_fichiers = array()) {
-       include_spip('inc/verifier');
-       $erreurs = array();
-       $verif_fonction = charger_fonction('verifier', 'inc', true);
-
-       if ($saisies_masquees_nulles) {
-               $formulaire = saisies_verifier_afficher_si($formulaire);
-       }
-
-       $saisies = saisies_lister_par_nom($formulaire);
-       foreach ($saisies as $saisie) {
-               $obligatoire = isset($saisie['options']['obligatoire']) ? $saisie['options']['obligatoire'] : '';
-               $champ = $saisie['options']['nom'];
-               $file = (($saisie['saisie'] == 'input' and isset($saisie['options']['type']) and $saisie['options']['type'] == 'file') or $saisie['saisie'] == 'fichiers');
-               $verifier = isset($saisie['verifier']) ? $saisie['verifier'] : false;
-               
-               // Cas de la saisie 'fichiers':
-               if ($saisie['saisie'] == 'fichiers') {
-                       $infos_fichiers_precedents = _request('cvtupload_fichiers_precedents');
-                       if (isset($infos_fichiers_precedents[$champ])) { // si on a déjà envoyé des infos avants
-                               $valeur = $_FILES[$champ]; // on ne met pas true, car il faudra aussi vérifier les nouveaux fichiers du même champ qui viennent d'être envoyés.
-                       } elseif (isset($_FILES[$champ]['error'])) {//si jamais on a déja envoyé quelque chose dans le précédent envoi = ok
-                               $valeur = null; //On considère que par défaut on a envoyé aucun fichiers
-                               foreach ($_FILES[$champ]['error'] as $err) {
-                                       if ($err != 4) {
-                                               //Si un seul fichier a été envoyé, même avec une erreur,
-                                               // on considère que le critère obligatoire est rempli.
-                                               // Il faudrait que verifier/fichiers.php vérifier les autres types d'erreurs.
-                                               // Voir http://php.net/manual/fr/features.file-upload.errors.php
-                                               $valeur = $_FILES[$champ];
-                                               break;
-                                       }
-                               }
-                       } elseif (!isset($_FILES[$champ])) {
-                               $valeur = null;
-                       }
-               }
-               // Tout type de saisie, sauf fichiers
-               else {
-                       // Si le nom du champ est un tableau indexé, il faut parser !
-                       if (preg_match('/([\w]+)((\[[\w]+\])+)/', $champ, $separe)) {
-                               $valeur = _request($separe[1]);
-                               preg_match_all('/\[([\w]+)\]/', $separe[2], $index);
-                               // On va chercher au fond du tableau
-                               foreach ($index[1] as $cle) {
-                                       $valeur = isset($valeur[$cle]) ? $valeur[$cle] : null;
-                               }
-                       } else {
-                               // Sinon la valeur est juste celle du nom
-                               $valeur = _request($champ);
-                       }
-               }
-               
-               // Pour la saisie "destinataires" il faut filtrer si jamais on a mis un premier choix vide
-               if ($saisie['saisie'] == 'destinataires') {
-                       $valeur = array_filter($valeur);
-               }
-               
-               // On regarde d'abord si le champ est obligatoire
-               if (
-                       $obligatoire
-                       and $obligatoire != 'non'
-                       and (
-                               ($file and $valeur==null)
-                               or (!$file and (
-                                       is_null($valeur)
-                                       or (is_string($valeur) and trim($valeur) == '')
-                                       or (is_array($valeur) and count($valeur) == 0)
-                               ))
-                       )
-               ) {
-                       $erreurs[$champ] =
-                               (isset($saisie['options']['erreur_obligatoire']) and $saisie['options']['erreur_obligatoire'])
-                               ? $saisie['options']['erreur_obligatoire']
-                               : _T('info_obligatoire');
-               }
-
-               // On continue seulement si ya pas d'erreur d'obligation et qu'il y a une demande de verif
-               if ((!isset($erreurs[$champ]) or !$erreurs[$champ]) and is_array($verifier) and $verif_fonction) {
-                       // Si on fait une vérification de type fichiers, il n'y a pas vraiment de normalisation, mais un retour d'erreur fichiers par fichiers
-                       if ($verifier['type'] == 'fichiers') {
-                               $normaliser = array();
-                       } else {
-                               $normaliser = null;
-                       }
-                       
-                       // Si le champ n'est pas valide par rapport au test demandé, on ajoute l'erreur
-                       $options = isset($verifier['options']) ? $verifier['options'] : array();
-                       if ($erreur_eventuelle = $verif_fonction($valeur, $verifier['type'], $options, $normaliser)) {
-                               $erreurs[$champ] = $erreur_eventuelle;
-
-                               if ($verifier['type'] == 'fichiers') { // Pour les vérification/saisies de type fichiers, ajouter les erreurs détaillées par fichiers dans le tableau des erreurs détaillées par fichier
-                                       $erreurs_fichiers[$champ] = $normaliser;
-                               }
-
-                       }
-                       // S'il n'y a pas d'erreur et que la variable de normalisation a été remplie, on l'injecte dans le POST
-                       elseif (!is_null($normaliser) and $verifier['type'] != 'fichiers') {
-                               set_request($champ, $normaliser);
-                       }
-               }
-       }
-       
-       // Last but not least, on passe nos résultats à un pipeline
-       $erreurs = pipeline(
-               'saisies_verifier',
-               array(
-                       'args'=>array(
-                               'formulaire' => $formulaire,
-                               'saisies' => $saisies
-                       ),
-                       'data' => $erreurs
-               )
-       );
-       
-       return $erreurs;
-}
-
-/**
- * Applatie une description tabulaire
- * @param string $tab Le tableau à aplatir
- * @return $nouveau_tab
- */
-function saisies_aplatir_tableau($tab) {
-       $nouveau_tab = array();
-       
-       foreach ($tab as $entree => $contenu) {
-               if (is_array($contenu)) {
-                       foreach ($contenu as $cle => $valeur) {
-                               $nouveau_tab[$cle] = $valeur;
-                       }
-               } else {
-                       $nouveau_tab[$entree] = $contenu;
-               }
-       }
-       
-       return $nouveau_tab;
-}
-
-/**
- * Applatie une description chaînée, en supprimant les sous-groupes.
- * @param string $chaine La chaîne à aplatir
- * @return $chaine
- */
-function saisies_aplatir_chaine($chaine) {
-       return trim(preg_replace("#(?:^|\n)(\*(?:.*)|/\*)\n#i", "\n", $chaine));
-}
-
-/**
- * Transforme une chaine en tableau avec comme principe :
- *
- * - une ligne devient une case
- * - si la ligne est de la forme truc|bidule alors truc est la clé et bidule la valeur
- * - si la ligne commence par * alors on commence un sous-tableau
- * - si la ligne est égale à /*, alors on fini le sous-tableau
- *
- * @param string $chaine Une chaine à transformer
- * @param string $separateur Séparateur utilisé
- * @return array Retourne un tableau PHP
- */
-function saisies_chaine2tableau($chaine, $separateur = "\n") {
-       if ($chaine and is_string($chaine)) {
-               $tableau = array();
-               $soustab = false;
-               
-               // On découpe d'abord en lignes
-               $lignes = explode($separateur, $chaine);
-               foreach ($lignes as $i => $ligne) {
-                       $ligne = trim(trim($ligne), '|');
-                       // Si ce n'est pas une ligne sans rien
-                       if ($ligne !== '') {
-                               // si ca commence par * c'est qu'on va faire un sous tableau
-                               if (strpos($ligne, '*') === 0) {
-                                       $soustab=true;
-                                       $soustab_cle = _T_ou_typo(substr($ligne, 1), 'multi');
-                                       if (!isset($tableau[$soustab_cle])) {
-                                               $tableau[$soustab_cle] = array();
-                                       }
-                               } elseif ($ligne == '/*') {//si on finit sous tableau
-                                       $soustab=false;
-                               } else {
-                                       //sinon c'est une entrée normale
-                                       // Si on trouve un découpage dans la ligne on fait cle|valeur
-                                       if (strpos($ligne, '|') !== false) {
-                                               list($cle,$valeur) = explode('|', $ligne, 2);
-                                               // permettre les traductions de valeurs au passage
-                                               if ($soustab == true) {
-                                                       $tableau[$soustab_cle][$cle] = _T_ou_typo($valeur, 'multi');
-                                               } else {
-                                                       $tableau[$cle] = _T_ou_typo($valeur, 'multi');
-                                               }
-                                       } else {
-                                               // Sinon on génère la clé
-                                               if ($soustab == true) {
-                                                       $tableau[$soustab_cle][$i] = _T_ou_typo($ligne, 'multi');
-                                               } else {
-                                                       $tableau[$i] = _T_ou_typo($ligne, 'multi');
-                                               }
-                                       }
-                               }
-                       }
-               }
-               return $tableau;
-       }
-       elseif (is_array($chaine)) {
-               // Si c'est déjà un tableau on lui applique _T_ou_typo (qui fonctionne de manière récursive avant de le renvoyer
-               return _T_ou_typo($chaine, 'multi');
-       }
-       else {
-               return array();
-       }
-}
-
-/**
- * Transforme un tableau en chaine de caractères avec comme principe :
- *
- * - une case de vient une ligne de la chaine
- * - chaque ligne est générée avec la forme cle|valeur
- * - si une entrée du tableau est elle même un tableau, on met une ligne de la forme *clef
- * - pour marquer que l'on quitte un sous-tableau, on met une ligne commencant par /*, sauf si on bascule dans un autre sous-tableau.
- *
- * @param array $tableau Tableau à transformer
- * @return string Texte représentant les données du tableau
- */
-function saisies_tableau2chaine($tableau) {
-       if ($tableau and is_array($tableau)) {
-               $chaine = '';
-               $avant_est_tableau = false;
-               
-               foreach ($tableau as $cle => $valeur) {
-                       if (is_array($valeur)) {
-                               $avant_est_tableau = true;
-                               $ligne=trim("*$cle");
-                               $chaine .= "$ligne\n";
-                               $chaine .= saisies_tableau2chaine($valeur)."\n";
-                       } else {
-                               if ($avant_est_tableau == true) {
-                                       $avant_est_tableau = false;
-                                       $chaine.="/*\n";
-                               }
-                               $ligne = trim("$cle|$valeur");
-                               $chaine .= "$ligne\n";
-                       }
-               }
-               $chaine = trim($chaine);
-
-               return $chaine;
-       }
-       elseif (is_string($tableau)) {
-               // Si c'est déjà une chaine on la renvoie telle quelle
-               return $tableau;
-       }
-       else {
-               return '';
-       }
-}
-
-/**
- * Transforme une valeur en tableau d'élements si ce n'est pas déjà le cas
- *
- * @param mixed $valeur
- * @return array Tableau de valeurs
-**/
-function saisies_valeur2tableau($valeur) {
-       if (is_array($valeur)) {
-               return $valeur;
-       }
-
-       if (!strlen($valeur)) {
-               return array();
-       }
-
-       $t = saisies_chaine2tableau($valeur);
-       if (count($t) > 1) {
-               return $t;
-       }
-
-       // qu'une seule valeur, c'est qu'elle a peut etre un separateur a virgule
-       // et a donc une cle est 0 dans ce cas la d'ailleurs
-       if (isset($t[0])) {
-               $t = saisies_chaine2tableau($t[0], ',');
-       }
-
-       return $t;
-}
-
-/**
- * Pour les saisies multiples (type checkbox) proposant un choix alternatif,
- * retrouve à partir des data de choix proposés
- * et des valeurs des choix enregistrés
- * le texte enregistré pour le choix alternatif.
- *
- * @param array $data
- * @param array $valeur
- * @return string choix_alternatif
-**/
-function saisies_trouver_choix_alternatif($data, $valeur) {
-       if (!is_array($valeur)) {
-               $valeur = saisies_chaine2tableau($valeur) ;
-       }
-       if (!is_array($data)) {
-               $data = saisies_chaine2tableau($data) ;
-       }
-       
-       $choix_theorique = array_keys($data);
-       $choix_alternatif = array_values(array_diff($valeur, $choix_theorique));
-       if (isset($choix_alternatif[0])) {
-               return $choix_alternatif[0]; //on suppose que personne ne s'est amusé à proposer deux choix alternatifs
-       } else {
-               return '';
-       }
-}
-
-/**
- * Génère une page d'aide listant toutes les saisies et leurs options
- *
- * Retourne le résultat du squelette `inclure/saisies_aide` auquel
- * on a transmis toutes les saisies connues.
- *
- * @return string Code HTML
- */
-function saisies_generer_aide() {
-       // On a déjà la liste par saisie
-       $saisies = saisies_lister_disponibles();
-
-       // On construit une liste par options
-       $options = array();
-       foreach ($saisies as $type_saisie => $saisie) {
-               $options_saisie = saisies_lister_par_nom($saisie['options'], false);
-               foreach ($options_saisie as $nom => $option) {
-                       // Si l'option n'existe pas encore
-                       if (!isset($options[$nom])) {
-                               $options[$nom] = _T_ou_typo($option['options']);
-                       }
-                       // On ajoute toujours par qui c'est utilisé
-                       $options[$nom]['utilisee_par'][] = $type_saisie;
-               }
-               ksort($options_saisie);
-               $saisies[$type_saisie]['options'] = $options_saisie;
-       }
-       ksort($options);
-
-       return recuperer_fond(
-               'inclure/saisies_aide',
-               array(
-                       'saisies' => $saisies,
-                       'options' => $options
-               )
-       );
-}
-
-/**
- * Le tableau de saisies a-t-il une option afficher_si ?
- *
- * @param array $saisies Un tableau de saisies
- * @return boolean
- */
-function saisies_afficher_si($saisies) {
-       $saisies = saisies_lister_par_nom($saisies, true);
-       
-       // Dès qu'il y a au moins une option afficher_si, on l'active
-       foreach ($saisies as $saisie) {
-               if (isset($saisie['options']['afficher_si'])) {
-                       return true;
-               }
-       }
-       
-       return false;
-}
-
-
-/**
- * Le tableau de saisies a-t-il une option afficher_si_remplissage ?
- *
- * @param array $saisies Un tableau de saisies
- * @return boolean
- */
-function saisies_afficher_si_remplissage($saisies) {
-       $saisies = saisies_lister_par_nom($saisies, true);
-       
-       // Dès qu'il y a au moins une option afficher_si_remplissage, on l'active
-       foreach ($saisies as $saisie) {
-               if (isset($saisie['options']['afficher_si_remplissage'])) {
-                       return true;
-               }
-       }
-       
-       return false;
-}
diff --git a/www/plugins/saisies/inc/saisies_afficher.php b/www/plugins/saisies/inc/saisies_afficher.php
deleted file mode 100644 (file)
index 5c90e7d..0000000
+++ /dev/null
@@ -1,561 +0,0 @@
-<?php
-
-/**
- * Gestion de l'affichage des saisies.
- *
- * @return SPIP\Saisies\Afficher
- **/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Indique si une saisie peut être affichée.
- *
- * On s'appuie sur l'éventuelle clé "editable" du $champ.
- * Si editable vaut :
- *    - absent : le champ est éditable
- *    - 1, le champ est éditable
- *    - 0, le champ n'est pas éditable
- *    - -1, le champ est éditable s'il y a du contenu dans le champ (l'environnement)
- *         ou dans un de ses enfants (fieldsets)
- *
- * @param array $champ
- *                                 Tableau de description de la saisie
- * @param array $env
- *                                 Environnement transmis à la saisie, certainement l'environnement du formulaire
- * @param bool  $utiliser_editable
- *                                 - false pour juste tester le cas -1
- *
- * @return bool
- *              Retourne un booléen indiquant l'état éditable ou pas :
- *              - true si la saisie est éditable (peut être affichée)
- *              - false sinon
- */
-function saisie_editable($champ, $env, $utiliser_editable = true) {
-       if ($utiliser_editable) {
-               // si le champ n'est pas éditable, on sort.
-               if (!isset($champ['editable'])) {
-                       return true;
-               }
-               $editable = $champ['editable'];
-
-               if ($editable > 0) {
-                       return true;
-               }
-               if ($editable == 0) {
-                       return false;
-               }
-       }
-
-       // cas -1
-       // name de la saisie
-       if (isset($champ['options']['nom'])) {
-               // si on a le name dans l'environnement, on le teste
-               $nom = $champ['options']['nom'];
-               if (isset($env[$nom])) {
-                       return $env[$nom] ? true : false;
-               }
-       }
-       // sinon, si on a des sous saisies
-       if (isset($champ['saisies']) and is_array($champ['saisies'])) {
-               foreach ($champ['saisies'] as $saisie) {
-                       if (saisie_editable($saisie, $env, false)) {
-                               return true;
-                       }
-               }
-       }
-
-       // aucun des paramètres demandés n'avait de contenu
-       return false;
-}
-
-/**
- * Génère une saisie à partir d'un tableau la décrivant et de l'environnement.
- *
- * @param array $champ
- *                     Description de la saisie.
- *                     Le tableau doit être de la forme suivante :
- *                     array(
- *                     'saisie' => 'input',
- *                     'options' => array(
- *                     'nom' => 'le_name',
- *                     'label' => 'Un titre plus joli',
- *                     'obligatoire' => 'oui',
- *                     'explication' => 'Remplissez ce champ en utilisant votre clavier.'
- *                     )
- *                     )
- * @param array $env
- *                     Environnement du formulaire
- *                     Permet de savoir les valeurs actuelles des contenus des saisies,
- *                     les erreurs eventuelles présentes...
- *
- * @return string
- *                Code HTML des saisies de formulaire
- */
-function saisies_generer_html($champ, $env = array()) {
-       // Si le parametre n'est pas bon, on genere du vide
-       if (!is_array($champ)) {
-               return '';
-       }
-
-       // Si la saisie n'est pas editable, on sort aussi.
-       if (!saisie_editable($champ, $env)) {
-               return '';
-       }
-
-       $contexte = array();
-
-       // On sélectionne le type de saisie
-       $contexte['type_saisie'] = $champ['saisie'];
-       // Identifiant unique de saisie, si present
-       if (isset($champ['identifiant'])) {
-               $contexte['id_saisie'] = $champ['identifiant'];
-       }
-
-       // Peut-être des transformations à faire sur les options textuelles
-       $options = isset($champ['options']) ? $champ['options'] : array();
-       foreach ($options as $option => $valeur) {
-               if ($option == 'datas') {
-                       // exploser une chaine datas en tableau (applique _T_ou_typo sur chaque valeur)
-                       $options[$option] = saisies_chaine2tableau($valeur);
-               } else {
-                       $options[$option] = _T_ou_typo($valeur, 'multi');
-               }
-       }
-
-       // compatibilité li_class > conteneur_class
-       if (!empty($options['li_class'])) {
-               $options['conteneur_class'] = $options['li_class'];
-       }
-
-       // On ajoute les options propres à la saisie
-       $contexte = array_merge($contexte, $options);
-
-       // On ajoute aussi les infos de vérification, si cela peut se faire directement en HTML5
-       if (isset($champ['verifier'])) {
-               $contexte = array_merge($contexte, array('verifier'=>$champ['verifier']));
-       }
-
-       // Si env est définie dans les options ou qu'il y a des enfants, on ajoute tout l'environnement
-       if (isset($contexte['env']) or (isset($champ['saisies']) and is_array($champ['saisies']))) {
-               unset($contexte['env']);
-
-               // on sauve l'ancien environnement
-               // car les sous-saisies ne doivent pas être affectees
-               // par les modification sur l'environnement servant à generer la saisie mère
-               $contexte['_env'] = $env;
-
-               // À partir du moment où on passe tout l'environnement,
-               // il faut enlever certains éléments qui ne doivent absolument provenir que des options
-               unset($env['inserer_debut']);
-               unset($env['inserer_fin']);
-               $saisies_disponibles = saisies_lister_disponibles();
-               if (isset($saisies_disponibles[$contexte['type_saisie']])
-                       and isset($saisies_disponibles[$contexte['type_saisie']]['options'])
-                       and is_array($saisies_disponibles[$contexte['type_saisie']]['options'])) {
-                       $options_a_supprimer = saisies_lister_champs($saisies_disponibles[$contexte['type_saisie']]['options']);
-                       foreach ($options_a_supprimer as $option_a_supprimer) {
-                               unset($env[$option_a_supprimer]);
-                       }
-               }
-
-               $contexte = array_merge($env, $contexte);
-       } else {
-               // Sinon on ne sélectionne que quelques éléments importants
-               // On récupère la liste des erreurs
-               $contexte['erreurs'] = $env['erreurs'];
-               // On récupère la langue de l'objet si existante
-               if (isset($env['langue'])) {
-                       $contexte['langue'] = $env['langue'];
-               }
-               // On ajoute toujours le bon self
-               $contexte['self'] = self();
-       }
-
-       // Dans tous les cas on récupère de l'environnement la valeur actuelle du champ
-       // Si le nom du champ est un tableau indexé, il faut parser !
-       if (isset($contexte['nom']) and preg_match('/([\w]+)((\[[\w]+\])+)/', $contexte['nom'], $separe)
-                       and isset($env[$separe[1]])) {
-               $contexte['valeur'] = $env[$separe[1]];
-               preg_match_all('/\[([\w]+)\]/', $separe[2], $index);
-               // On va chercher au fond du tableau
-               foreach ($index[1] as $cle) {
-                       $contexte['valeur'] = isset($contexte['valeur'][$cle]) ? $contexte['valeur'][$cle] : null;
-               }
-       } elseif (isset($contexte['nom']) and isset($env[$contexte['nom']])) {
-               // Sinon la valeur est juste celle du nom si elle existe
-               $contexte['valeur'] = $env[$contexte['nom']];
-       } else {
-               // Sinon rien
-               $contexte['valeur'] = null;
-       }
-
-       // Si ya des enfants on les remonte dans le contexte
-       if (isset($champ['saisies']) and is_array($champ['saisies'])) {
-               $contexte['saisies'] = $champ['saisies'];
-       }
-
-       // On génère la saisie
-       return recuperer_fond(
-               'saisies/_base',
-               $contexte
-       );
-}
-
-/**
- * Génère une vue d'une saisie à partir d'un tableau la décrivant.
- *
- * @see saisies_generer_html()
- *
- * @param array $saisie
- *                               Tableau de description d'une saisie
- * @param array $env
- *                               L'environnement, contenant normalement la réponse à la saisie
- * @param array $env_obligatoire
- *                               ???
- *
- * @return string
- *                Code HTML de la vue de la saisie
- */
-function saisies_generer_vue($saisie, $env = array(), $env_obligatoire = array()) {
-       // Si le paramètre n'est pas bon, on génère du vide
-       if (!is_array($saisie)) {
-               return '';
-       }
-
-       $contexte = array();
-
-       // On sélectionne le type de saisie
-       $contexte['type_saisie'] = $saisie['saisie'];
-
-       // Peut-être des transformations à faire sur les options textuelles
-       $options = $saisie['options'];
-       foreach ($options as $option => $valeur) {
-               if ($option == 'datas') {
-                       // exploser une chaine datas en tableau (applique _T_ou_typo sur chaque valeur)
-                       $options[$option] = saisies_chaine2tableau($valeur);
-               } else {
-                       $options[$option] = _T_ou_typo($valeur, 'multi');
-               }
-       }
-
-       // On ajoute les options propres à la saisie
-       $contexte = array_merge($contexte, $options);
-
-       // Si env est définie dans les options ou qu'il y a des enfants, on ajoute tout l'environnement
-       if (isset($contexte['env']) or (isset($saisie['saisies']) and is_array($saisie['saisies']))) {
-               unset($contexte['env']);
-
-               // on sauve l'ancien environnement
-               // car les sous-saisies ne doivent pas être affectees
-               // par les modification sur l'environnement servant à generer la saisie mère
-               $contexte['_env'] = $env;
-
-               // À partir du moment où on passe tout l'environnement, il faut enlever
-               // certains éléments qui ne doivent absolument provenir que des options
-               $saisies_disponibles = saisies_lister_disponibles();
-
-               if (isset($saisies_disponibles[$contexte['type_saisie']]['options'])
-                       and is_array($saisies_disponibles[$contexte['type_saisie']]['options'])) {
-                       $options_a_supprimer = saisies_lister_champs($saisies_disponibles[$contexte['type_saisie']]['options']);
-                       foreach ($options_a_supprimer as $option_a_supprimer) {
-                               unset($env[$option_a_supprimer]);
-                       }
-               }
-
-               $contexte = array_merge($env, $contexte);
-       }
-
-       // Dans tous les cas on récupère de l'environnement la valeur actuelle du champ
-
-       // On regarde en priorité s'il y a un tableau listant toutes les valeurs
-       if (!empty($env['valeurs']) and is_array($env['valeurs']) and isset($env['valeurs'][$contexte['nom']])) {
-               $contexte['valeur'] = $env['valeurs'][$contexte['nom']];
-       } elseif (preg_match('/([\w]+)((\[[\w]+\])+)/', $contexte['nom'], $separe)) {
-               // Si le nom du champ est un tableau indexé, il faut parser !
-               $contexte['valeur'] = $env[$separe[1]];
-               preg_match_all('/\[([\w]+)\]/', $separe[2], $index);
-               // On va chercher au fond du tableau
-               foreach ($index[1] as $cle) {
-                       $contexte['valeur'] = $contexte['valeur'][$cle];
-               }
-       } else {
-               // Sinon la valeur est juste celle du nom
-               // certains n'ont pas de nom (fieldset)
-               $contexte['valeur'] = isset($env[$contexte['nom']]) ? $env[$contexte['nom']] : '';
-       }
-
-       // Si ya des enfants on les remonte dans le contexte
-       if (isset($saisie['saisies']) and is_array($saisie['saisies'])) {
-               $contexte['saisies'] = $saisie['saisies'];
-       }
-
-       if (is_array($env_obligatoire)) {
-               $contexte = array_merge($contexte, $env_obligatoire);
-       }
-
-       // On génère la saisie
-       return recuperer_fond(
-               'saisies-vues/_base',
-               $contexte
-       );
-}
-
-/**
- * Génère, à partir d'un tableau de saisie le code javascript ajouté à la fin de #GENERER_SAISIES
- * pour produire un affichage conditionnel des saisies ayant une option afficher_si ou afficher_si_remplissage.
- *
- * @param array  $saisies
- *                        Tableau de descriptions des saisies
- * @param string $id_form
- *                        Identifiant unique pour le formulaire
- *
- * @return text
- *              Code javascript
- */
-function saisies_generer_js_afficher_si($saisies, $id_form) {
-       $i = 0;
-       $saisies = saisies_lister_par_nom($saisies, true);
-       $code = '';
-       $code .= '(function($){';
-       $code .= "$(document).ready(function(){\n\tchargement=true;\n";
-       $code .= "\tverifier_saisies_".$id_form." = function(form){\n";
-       foreach ($saisies as $saisie) {
-               // on utilise comme selecteur l'identifiant de saisie en priorite s'il est connu
-               // parce que conteneur_class = 'tableau[nom][option]' ne fonctionne evidement pas
-               // lorsque le name est un tableau
-               if (isset($saisie['options']['afficher_si']) or isset($saisie['options']['afficher_si_remplissage'])) {
-                       ++$i;
-                       // retrouver la classe css probable
-                       switch ($saisie['saisie']) {
-                               case 'fieldset':
-                                       $class_li = 'fieldset_'.$saisie['options']['nom'];
-                                       break;
-                               case 'explication':
-                                       $class_li = 'explication_'.$saisie['options']['nom'];
-                                       break;
-                               default:
-                                       // Les [] dans le nom de la saisie sont transformés en _ dans le
-                                       // nom de la classe, il faut faire pareil
-                                       $class_li = 'editer_' . rtrim(
-                                               preg_replace('/[][]\[?/', '_', $saisie['options']['nom']),
-                                               '_'
-                                       );
-                       }
-                       $afficher_si = isset($saisie['options']['afficher_si']) ? $saisie['options']['afficher_si'] : '';
-                       $afficher_si_remplissage = isset($saisie['options']['afficher_si_remplissage']) ?
-                               $saisie['options']['afficher_si_remplissage'] : '';
-                       $condition = implode("\n", array_filter(array($afficher_si, $afficher_si_remplissage)));
-                       // retrouver l'identifiant
-                       $identifiant = '';
-                       if (isset($saisie['identifiant']) and $saisie['identifiant']) {
-                               $identifiant = $saisie['identifiant'];
-                       }
-                       // On gère le cas @plugin:non_plugin@
-                       preg_match_all('#@plugin:(.+)@#U', $condition, $matches);
-                       foreach ($matches[1] as $plug) {
-                               if (defined('_DIR_PLUGIN_'.strtoupper($plug))) {
-                                       $condition = preg_replace('#@plugin:'.$plug.'@#U', 'true', $condition);
-                               } else {
-                                       $condition = preg_replace('#@plugin:'.$plug.'@#U', 'false', $condition);
-                               }
-                       }
-                       // On gère le cas @config:plugin:meta@ suivi d'un test
-                       preg_match_all('#@config:(.+):(.+)@#U', $condition, $matches);
-                       foreach ($matches[1] as $plugin) {
-                               $config = lire_config($plugin);
-                               $condition = preg_replace('#@config:'.$plugin.':'.$matches[2][0].'@#U', '"'.$config[$matches[2][0]].'"', $condition);
-                       }
-                       // On transforme en une condition valide
-                       preg_match_all('#@(.+)@#U', $condition, $matches);
-                       foreach ($matches[1] as $nom) {
-                               switch ($saisies[$nom]['saisie']) {
-                                       case 'radio':
-                                       case 'oui_non':
-                                       case 'true_false':
-                                               $condition = preg_replace('#@'.preg_quote($nom).'@#U', '$(form).find("[name=\''.$nom.'\']:checked").val()', $condition);
-                                               break;
-                                       case 'case':
-                                               $condition = preg_replace('#@'.preg_quote($nom).'@#U', '($(form).find(".checkbox[name=\''.$nom.'\']").is(":checked") ? $(form).find(".checkbox[name=\''.$nom.'\']").val() : "")', $condition);
-                                               break;
-                                       case 'checkbox':
-                                               /**
-                                                * Faire fonctionner @checkbox_xx@ == 'valeur'
-                                                */
-                                               preg_match_all('#@(.+)@\s*==\s*[\'"](.*?)[\'"]$#U', $condition, $matches2);
-                                               foreach ($matches2[2] as $value) {
-                                                       $condition = preg_replace('#@'.preg_quote($nom).'@#U', '($(form).find(".checkbox[name=\''.$nom.'[]\'][value='.$value.']").is(":checked") ? $(form).find(".checkbox[name=\''.$nom.'[]\'][value='.$value.']").val() : "")', $condition);
-                                               }
-                                               /**
-                                                * Faire fonctionner @checkbox_xx@ IN 'valeur' ou @checkbox_xx@ !IN 'valeur'
-                                                */
-                                               preg_match_all('#@(.+)@\s*(!IN|IN)\s*[\'"](.*?)[\'"]$#U', $condition, $matches3);
-                                               foreach ($matches3[3] as $key => $value) {
-                                                       $not = '';
-                                                       if ($matches3[2][$key] == '!IN') {
-                                                               $not = '!';
-                                                       }
-                                                       $values = explode(',', $value);
-                                                       $new_condition = $not.'(';
-                                                       foreach ($values as $key2 => $cond) {
-                                                               if ($key2 > 0) {
-                                                                       $new_condition .= ' || ';
-                                                               }
-                                                               $new_condition .= '($(form).find(".checkbox[name=\''.$nom.'[]\'][value='.$cond.']").is(":checked") ? $(form).find(".checkbox[name=\''.$nom.'[]\'][value='.$cond.']").val() : "") == "'.$cond.'"';
-                                                       }
-                                                       $new_condition .= ')';
-                                                       $condition = str_replace($matches3[0][$key], $new_condition, $condition);
-                                               }
-                                               break;
-                                       default:
-                                               $condition = preg_replace('#@'.preg_quote($nom).'@#U', '$(form).find("[name=\''.$nom.'\']").val()', $condition);
-                               }
-                       }
-                       if ($identifiant) {
-                               $sel = "[data-id='$identifiant']";
-                       } else {
-                               $sel = ".$class_li";
-                       }
-                       $code .= "\tif (".$condition.") {\n"
-                                                        .      "\t\t$(form).find(\"$sel\").show(400);\n";
-                       if (html5_permis()) {
-                       $pour_html_5 =  "$sel.obligatoire > input, "// si le afficher_si porte directement sur le input
-                                                       ."$sel .obligatoire > input, "// si le afficher_si porte sur le fieldset
-                                                       ."$sel.obligatoire > textarea, "// si le afficher_si porte directement sur le textearea
-                                                       ."$sel .obligatoire > textarea, "// si le afficher_si porte sur le fiedset
-                                                       ."$sel.obligatoire > select, "//si le afficher_si porte directement sur le select
-                                                       ."$sel .obligatoire > select";//si le afficher_si porte sur le fieldset
-                       $code .=        "\t\t$(form).find("
-                                                       .'"'."$pour_html_5\")".
-                                                       ".attr(\"required\",true);\n";
-                       }
-                       $code .=        "\t}\n";
-                       $code .= "\telse {\n";
-                       if (html5_permis()) {
-                               $code .= "\t\t$(form).find(\n\t\t\t"
-                                                       .'"'."$pour_html_5\")\n"
-                                                       ."\t\t.attr(".'"required"'.",false);\n";
-                       }
-                       $code .= "\t\tif (chargement==true) {\n"
-                                       ."\t\t\t$(form).find(\"$sel\").hide(400).css".'("display","none")'.";\n"
-                                       ."\t\t}\n"
-                                       ."\t\telse {\n"
-                                       ."\t\t\t$(form).find(\"$sel\").hide(400);\n"
-                                       ."\t\t};\n"
-                                       ."\t}\n";
-               }
-       }
-       $code .= "$(form).trigger('saisies_afficher_si_js_ok');\n";
-       $code .= "};\n";
-       $code .= "\t".'$("#afficher_si_'.$id_form.'").parents("form").each(function(){'."\n\t\t".'verifier_saisies_'.$id_form.'(this);});'."\n";
-       $code .= "\t".'$("#afficher_si_'.$id_form.'").parents("form").change(function(){'."\n\t\t".'verifier_saisies_'.$id_form.'(this);});'."\n";
-       $code .= "\tchargement=false;})\n";
-       $code .= '})(jQuery);'."\n";
-
-       if (!defined('_SAISIES_AFFICHER_SI_JS_LISIBLE')) {
-               define('_SAISIES_AFFICHER_SI_JS_LISIBLE', false);
-       }
-       if (!_SAISIES_AFFICHER_SI_JS_LISIBLE) {
-               // il suffit de régler cette constante à TRUE pour afficher le js de manière plus lisible (et moins sibyllin)
-               $code = str_replace("\n", '', $code); //concatener
-               $code = str_replace("\t", '', $code); //concatener
-       }
-       return $i > 0 ? $code : '';
-}
-
-/**
- * Lorsque l'on affiche les saisies (#VOIR_SAISIES), les saisies ayant une option afficher_si
- * et dont les conditions ne sont pas remplies doivent être retirées du tableau de saisies.
- *
- * Cette fonction sert aussi lors de la vérification des saisies avec saisies_verifier().
- * À ce moment là, les saisies non affichées sont retirées de _request
- * (on passe leur valeur à NULL).
- *
- * @param array      $saisies
- *                            Tableau de descriptions de saisies
- * @param array|null $env
- *                            Tableau d'environnement transmis dans inclure/voi_saisies.html,
- *                            NULL si on doit rechercher dans _request (pour saisies_verifier()).
- *
- * @return array
- *               Tableau de descriptions de saisies
- */
-function saisies_verifier_afficher_si($saisies, $env = null) {
-       // eviter une erreur par maladresse d'appel :)
-       if (!is_array($saisies)) {
-               return array();
-       }
-       foreach ($saisies as $cle => $saisie) {
-               if (isset($saisie['options']['afficher_si']) or isset($saisie['options']['afficher_si_remplissage'])) {
-                       $condition = '';
-                       if (isset($saisie['options']['afficher_si_remplissage'])) {
-                               $condition .= $saisie['options']['afficher_si_remplissage'];
-                       }
-                       if (isset($saisie['options']['afficher_si'])) {
-                               $condition .= $saisie['options']['afficher_si'];
-                       }
-                       // On gère le cas @plugin:non_plugin@
-                       preg_match_all('#@plugin:(.+)@#U', $condition, $matches);
-                       foreach ($matches[1] as $plug) {
-                               if (defined('_DIR_PLUGIN_'.strtoupper($plug))) {
-                                       $condition = preg_replace('#@plugin:'.$plug.'@#U', 'true', $condition);
-                               } else {
-                                       $condition = preg_replace('#@plugin:'.$plug.'@#U', 'false', $condition);
-                               }
-                       }
-                       // On gère le cas @config:plugin:meta@ suivi d'un test
-                       preg_match_all('#@config:(.+):(.+)@#U', $condition, $matches);
-                       foreach ($matches[1] as $plugin) {
-                               $config = lire_config($plugin);
-                               $condition = preg_replace('#@config:'.$plugin.':'.$matches[2][0].'@#U', '"'.$config[$matches[2][0]].'"', $condition);
-                       }
-                       // On transforme en une condition PHP valide
-                       $condition_originale = $condition;
-                       if (is_null($env)) {
-                               $condition = preg_replace('#@(.+)@#U', '_request(\'$1\')', $condition);
-                       } else {
-                               $condition = preg_replace('#@(.+)@#U', '$env["valeurs"][\'$1\']', $condition);
-                       }
-
-                       /**
-                        * Tester si la condition utilise des champs qui sont des tableaux
-                        * Si le _request renvoie un tableau, changer == et != par in_array et !in_array
-                        * TODO: c'est vraiment pas terrible comme fonctionnement
-                        */
-                       preg_match_all("/(_request\('.*?'\))\s*(!=|==|IN|!IN)\s*['\"](.*?)['\"]/", $condition, $matches);
-                       foreach ($matches[1] as $key => $val) {
-                               eval('$requete = '.$val.';');
-                               if (is_array($requete)) {
-                                       $not = '>';
-                                       if (in_array($matches[2][$key], array('!=', '!IN'))) {
-                                               $not = '==';
-                                       }
-                                       $array = var_export(explode(',', $matches[3][$key]), true);
-                                       $condition = str_replace($matches[0][$key], "(count(array_intersect($val, $array)) $not 0)", $condition);
-                               }
-                       }
-                       // On vérifie que l'on a pas @toto@="valeur" qui fait planter l'eval(),
-                       // on annule cette condition dans ce cas pour éviter une erreur du type :
-                       // PHP Fatal error:  Can't use function return value in write context
-                       $type_condition = preg_replace('#@(.+)@#U', '', $condition_originale);
-                       if (trim($type_condition) != '=') {
-                               eval('$ok = '.$condition.';');
-                       }
-                       if (!$ok) {
-                               unset($saisies[$cle]);
-                               if (is_null($env)) {
-                                       set_request($saisie['options']['nom'], null);
-                               }
-                       }
-               }
-               if (isset($saisies[$cle]['saisies'])) {
-                       // S'il s'agit d'un fieldset ou equivalent, verifier les sous-saisies
-                       $saisies[$cle]['saisies'] = saisies_verifier_afficher_si($saisies[$cle]['saisies'], $env);
-               }
-       }
-
-       return $saisies;
-}
diff --git a/www/plugins/saisies/inc/saisies_lister.php b/www/plugins/saisies/inc/saisies_lister.php
deleted file mode 100644 (file)
index b9016cd..0000000
+++ /dev/null
@@ -1,430 +0,0 @@
-<?php
-
-/**
- * Gestion de listes des saisies.
- *
- * @return SPIP\Saisies\Listes
- **/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Prend la description complète du contenu d'un formulaire et retourne
- * les saisies "à plat" classées par identifiant unique.
- *
- * @param array $contenu        Le contenu d'un formulaire
- * @param bool  $avec_conteneur Indique si on renvoie aussi les saisies ayant des enfants, comme les fieldsets
- *
- * @return array Un tableau avec uniquement les saisies
- */
-function saisies_lister_par_identifiant($contenu, $avec_conteneur = true) {
-       $saisies = array();
-
-       if (is_array($contenu)) {
-               foreach ($contenu as $ligne) {
-                       if (is_array($ligne)) {
-                               $enfants_presents = (isset($ligne['saisies']) and is_array($ligne['saisies']));
-                               if (array_key_exists('saisie', $ligne) and (!$enfants_presents or $avec_conteneur)) {
-                                       $saisies[$ligne['identifiant']] = $ligne;
-                               }
-                               if ($enfants_presents) {
-                                       $saisies = array_merge($saisies, saisies_lister_par_identifiant($ligne['saisies']));
-                               }
-                       }
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Prend la description complète du contenu d'un formulaire et retourne
- * les saisies "à plat" classées par nom.
- *
- * @param array $contenu        Le contenu d'un formulaire
- * @param bool  $avec_conteneur Indique si on renvoie aussi les saisies ayant des enfants, comme les fieldset
- *
- * @return array Un tableau avec uniquement les saisies
- */
-function saisies_lister_par_nom($contenu, $avec_conteneur = true) {
-       $saisies = array();
-
-       if (is_array($contenu)) {
-               foreach ($contenu as $ligne) {
-                       if (is_array($ligne)) {
-                               if (
-                                       array_key_exists('saisie', $ligne)
-                                       and (!isset($ligne['saisies']) or !is_array($ligne['saisies']) or $avec_conteneur)
-                                       and isset($ligne['options'])
-                               ) {
-                                       $saisies[$ligne['options']['nom']] = $ligne;
-                               }
-                               if (isset($ligne['saisies']) and is_array($ligne['saisies'])) {
-                                       $saisies = array_merge($saisies, saisies_lister_par_nom($ligne['saisies']));
-                               }
-                       }
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Liste les saisies ayant une option X
- * # saisies_lister_avec_option('sql', $saisies);.
- *
- *
- * @param string $option  Nom de l'option cherchée
- * @param array  $saisies Liste de saisies
- * @param string $tri     tri par défaut des résultats (s'ils ne sont pas deja triés) ('nom', 'identifiant')
- *
- * @return liste de ces saisies triees par nom ayant une option X définie
- */
-function saisies_lister_avec_option($option, $saisies, $tri = 'nom') {
-       $saisies_option = array();
-       
-       // tri par nom si ce n'est pas le cas
-       $s = array_keys($saisies);
-       if (is_int(array_shift($s))) {
-               $trier = 'saisies_lister_par_'.$tri;
-               $saisies = $trier($saisies);
-       }
-       
-       foreach ($saisies as $nom_ou_id => $saisie) {
-               if (isset($saisie['options'][$option]) and $saisie['options'][$option]) {
-                       $saisies_option[$nom_ou_id] = $saisie;
-               }
-       }
-
-       return $saisies_option;
-}
-
-/**
- * Liste les saisies ayant une definition SQL.
- *
- * @param array  $saisies liste de saisies
- * @param string $tri     tri par défaut des résultats (s'ils ne sont pas deja triés) ('nom', 'identifiant')
- *
- * @return liste de ces saisies triees par nom ayant une option sql définie
- */
-function saisies_lister_avec_sql($saisies, $tri = 'nom') {
-       return saisies_lister_avec_option('sql', $saisies, $tri);
-}
-
-/**
- * Liste les saisies d'un certain type.
- *
- * @example `$saisies_date = saisies_lister_avec_type($saisies, 'date')`
- *
- * @param array  $saisies liste de saisies
- * @param string $type    Type de la saisie
- * @param string $tri     tri par défaut des résultats (s'ils ne sont pas deja triés) ('nom')
- *
- * @return liste de ces saisies triees par nom
- */
-function saisies_lister_avec_type($saisies, $type, $tri = 'nom') {
-       $saisies_type = array();
-       
-       // tri par nom si ce n'est pas le cas
-       $s = array_keys($saisies);
-       if (is_int(array_shift($s))) {
-               $trier = 'saisies_lister_par_'.$tri;
-               $saisies = $trier($saisies);
-       }
-       
-       foreach ($saisies as $nom_ou_id => $saisie) {
-               if ($saisie['saisie'] == $type) {
-                       $saisies_type[$nom_ou_id] = $saisie;
-               }
-       }
-
-       return $saisies_type;
-}
-
-/**
- * Prend la description complète du contenu d'un formulaire et retourne
- * les saisies "à plat" classées par type de saisie.
- * $saisie['input']['input_1'] = $saisie.
- *
- * @param array $contenu Le contenu d'un formulaire
- *
- * @return array Un tableau avec uniquement les saisies
- */
-function saisies_lister_par_type($contenu) {
-       $saisies = array();
-
-       if (is_array($contenu)) {
-               foreach ($contenu as $ligne) {
-                       if (is_array($ligne)) {
-                               if (array_key_exists('saisie', $ligne) and (!is_array($ligne['saisies']))) {
-                                       $saisies[ $ligne['saisie'] ][ $ligne['options']['nom'] ] = $ligne;
-                               }
-                               if (is_array($ligne['saisies'])) {
-                                       $saisies = array_merge_recursive($saisies, saisies_lister_par_type($ligne['saisies']));
-                               }
-                       }
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Prend la description complète du contenu d'un formulaire et retourne
- * une liste des noms des champs du formulaire.
- *
- * @param array $contenu        Le contenu d'un formulaire
- * @param bool  $avec_conteneur Indique si on renvoie aussi les saisies ayant des enfants, comme les fieldset
- *
- * @return array Un tableau listant les noms des champs
- */
-function saisies_lister_champs($contenu, $avec_conteneur = true) {
-       $saisies = saisies_lister_par_nom($contenu, $avec_conteneur);
-
-       return array_keys($saisies);
-}
-
-/**
- * A utiliser dans une fonction charger d'un formulaire CVT,
- * cette fonction renvoie le tableau de contexte correspondant
- * de la forme $contexte['nom_champ'] = ''.
- *
- * @param array $contenu Le contenu d'un formulaire (un tableau de saisies)
- *
- * @return array Un tableau de contexte
- */
-function saisies_charger_champs($contenu) {
-       // array_fill_keys est disponible uniquement avec PHP >= 5.2.0
-       // return array_fill_keys(saisies_lister_champs($contenu, false), '');
-       $champs = array();
-       foreach (saisies_lister_champs($contenu, false) as $champ) {
-               $champs[$champ] = '';
-       }
-
-       return $champs;
-}
-
-/**
- * Prend la description complète du contenu d'un formulaire et retourne
- * une liste des valeurs par défaut des champs du formulaire.
- *
- * @param array $contenu Le contenu d'un formulaire
- *
- * @return array Un tableau renvoyant la valeur par défaut de chaque champs
- */
-function saisies_lister_valeurs_defaut($contenu) {
-       $contenu = saisies_lister_par_nom($contenu, false);
-       $defauts = array();
-       
-       foreach ($contenu as $nom => $saisie) {
-               // Si le nom du champ est un tableau indexé, il faut parser !
-               if (preg_match('/([\w]+)((\[[\w]+\])+)/', $nom, $separe)) {
-                       $nom = $separe[1];
-                       // Dans ce cas on ne récupère que le nom,
-                       // la valeur par défaut du tableau devra être renseigné autre part
-                       $defauts[$nom] = array();
-               }
-               else {
-                       $defauts[$nom] = isset($saisie['options']['defaut']) ? $saisie['options']['defaut'] : '';
-               }
-       }
-
-       return $defauts;
-}
-
-/**
- * Compare deux tableaux de saisies pour connaitre les différences.
- *
- * @param array  $saisies_anciennes Un tableau décrivant des saisies
- * @param array  $saisies_nouvelles Un autre tableau décrivant des saisies
- * @param bool   $avec_conteneur    Indique si on veut prendre en compte dans la comparaison les conteneurs comme les fieldsets
- * @param string $tri               Comparer selon quel tri ? 'nom' / 'identifiant'
- *
- * @return array Retourne le tableau des saisies supprimées, ajoutées et modifiées
- */
-function saisies_comparer($saisies_anciennes, $saisies_nouvelles, $avec_conteneur = true, $tri = 'nom') {
-       $trier = "saisies_lister_par_$tri";
-       $saisies_anciennes = $trier($saisies_anciennes, $avec_conteneur);
-       $saisies_nouvelles = $trier($saisies_nouvelles, $avec_conteneur);
-
-       // Les saisies supprimées sont celles qui restent dans les anciennes quand on a enlevé toutes les nouvelles
-       $saisies_supprimees = array_diff_key($saisies_anciennes, $saisies_nouvelles);
-       // Les saisies ajoutées, c'est le contraire
-       $saisies_ajoutees = array_diff_key($saisies_nouvelles, $saisies_anciennes);
-       // Il reste alors les saisies qui ont le même nom
-       $saisies_restantes = array_intersect_key($saisies_anciennes, $saisies_nouvelles);
-       // Dans celles-ci, celles qui sont modifiées sont celles dont la valeurs est différentes
-       $saisies_modifiees = array_udiff(array_diff_key($saisies_nouvelles, $saisies_ajoutees), $saisies_restantes, 'saisies_comparer_rappel');
-       #$saisies_modifiees = array_udiff($saisies_nouvelles, $saisies_restantes, 'saisies_comparer_rappel');
-       // Et enfin les saisies qui ont le même nom et la même valeur
-       $saisies_identiques = array_diff_key($saisies_restantes, $saisies_modifiees);
-
-       return array(
-               'supprimees' => $saisies_supprimees,
-               'ajoutees' => $saisies_ajoutees,
-               'modifiees' => $saisies_modifiees,
-               'identiques' => $saisies_identiques,
-       );
-}
-
-/**
- * Compare deux saisies et indique si elles sont égales ou pas.
- *
- * @param array $a Une description de saisie
- * @param array $b Une autre description de saisie
- *
- * @return int Retourne 0 si les saisies sont identiques, 1 sinon.
- */
-function saisies_comparer_rappel($a, $b) {
-       if ($a === $b) {
-               return 0;
-       } else {
-               return 1;
-       }
-}
-
-/**
- * Compare deux tableaux de saisies pour connaitre les différences
- * en s'appuyant sur les identifiants de saisies.
- *
- * @see saisies_comparer()
- *
- * @param array $saisies_anciennes Un tableau décrivant des saisies
- * @param array $saisies_nouvelles Un autre tableau décrivant des saisies
- * @param bool  $avec_conteneur    Indique si on veut prendre en compte dans la comparaison
- *                                 les conteneurs comme les fieldsets
- *
- * @return array Retourne le tableau des saisies supprimées, ajoutées et modifiées
- */
-function saisies_comparer_par_identifiant($saisies_anciennes, $saisies_nouvelles, $avec_conteneur = true) {
-       return saisies_comparer($saisies_anciennes, $saisies_nouvelles, $avec_conteneur, 'identifiant');
-}
-
-/**
- * Liste toutes les saisies configurables (ayant une description).
- *
- * @return array Un tableau listant des saisies et leurs options
- */
-function saisies_lister_disponibles($saisies_repertoire = 'saisies') {
-       static $saisies = null;
-
-       if (is_null($saisies)) {
-               $saisies = array();
-               $liste = find_all_in_path("$saisies_repertoire/", '.+[.]yaml$');
-
-               if (count($liste)) {
-                       foreach ($liste as $fichier => $chemin) {
-                               $type_saisie = preg_replace(',[.]yaml$,i', '', $fichier);
-                               $dossier = str_replace($fichier, '', $chemin);
-
-                               // On ne garde que les saisies qui ont bien le HTML avec !
-                               if (
-                                       file_exists("$dossier$type_saisie.html")
-                                       and (
-                                               is_array($saisie = saisies_charger_infos($type_saisie))
-                                       )
-                               ) {
-                                       $saisies[$type_saisie] = $saisie;
-                               }
-                       }
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Liste tous les groupes de saisies configurables (ayant une description).
- *
- * @return array Un tableau listant des saisies et leurs options
- */
-function saisies_groupes_lister_disponibles($saisies_repertoire = 'saisies') {
-       static $saisies = null;
-
-       if (is_null($saisies)) {
-               $saisies = array();
-               $liste = find_all_in_path("$saisies_repertoire/", '.+[.]yaml$');
-
-               if (count($liste)) {
-                       foreach ($liste as $fichier => $chemin) {
-                               $type_saisie = preg_replace(',[.]yaml$,i', '', $fichier);
-                               $dossier = str_replace($fichier, '', $chemin);
-                               
-                               if (is_array($saisie = saisies_charger_infos($type_saisie, $saisies_repertoire))) {
-                                       $saisies[$type_saisie] = $saisie;
-                               }
-                       }
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Lister les saisies existantes ayant une définition SQL.
- *
- * @return array Un tableau listant des saisies et leurs options
- */
-function saisies_lister_disponibles_sql($saisies_repertoire = 'saisies') {
-       $saisies = array();
-       $saisies_disponibles = saisies_lister_disponibles($saisies_repertoire);
-       
-       foreach ($saisies_disponibles as $type => $saisie) {
-               if (isset($saisie['defaut']['options']['sql']) and $saisie['defaut']['options']['sql']) {
-                       $saisies[$type] = $saisie;
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Charger les informations contenues dans le YAML d'une saisie.
- *
- * @param string $type_saisie Le type de la saisie
- *
- * @return array Un tableau contenant le YAML décodé
- */
-function saisies_charger_infos($type_saisie, $saisies_repertoire = 'saisies') {
-       if (defined('_DIR_PLUGIN_YAML')) {
-               include_spip('inc/yaml');
-               $fichier = find_in_path("$saisies_repertoire/$type_saisie.yaml");
-               $saisie = yaml_decode_file($fichier);
-               
-               if (is_array($saisie)) {
-                       $saisie['titre'] = (isset($saisie['titre']) and $saisie['titre'])
-                               ? _T_ou_typo($saisie['titre']) : $type_saisie;
-                       $saisie['description'] = (isset($saisie['description']) and $saisie['description'])
-                               ? _T_ou_typo($saisie['description']) : '';
-                       $saisie['icone'] = (isset($saisie['icone']) and $saisie['icone'])
-                               ? find_in_path($saisie['icone']) : '';
-               }
-       }
-       else {
-               $saisie = array();
-       }
-
-       return $saisie;
-}
-
-/**
- * Quelles sont les saisies qui se débrouillent toutes seules, sans le _base commun.
- *
- * @return array Retourne un tableau contenant les types de saisies qui ne doivent pas utiliser le _base.html commun
- */
-function saisies_autonomes() {
-       $saisies_autonomes = pipeline(
-               'saisies_autonomes',
-               array(
-                       'fieldset',
-                       'hidden',
-                       'destinataires',
-                       'explication',
-               )
-       );
-
-       return $saisies_autonomes;
-}
diff --git a/www/plugins/saisies/inc/saisies_manipuler.php b/www/plugins/saisies/inc/saisies_manipuler.php
deleted file mode 100644 (file)
index 3449926..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php
-
-/**
- * Gestion de l'affichage des saisies.
- *
- * @return SPIP\Saisies\Manipuler
- **/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Supprimer une saisie dont on donne l'identifiant, le nom ou le chemin.
- *
- * @param array        $saisies             Tableau des descriptions de saisies
- * @param string|array $id_ou_nom_ou_chemin
- *     L'identifiant unique
- *     ou le nom de la saisie à supprimer
- *     ou son chemin sous forme d'une liste de clés
- *
- * @return array
- *               Tableau modifié décrivant les saisies
- */
-function saisies_supprimer($saisies, $id_ou_nom_ou_chemin) {
-       // On enlève les options générales avant de manipuler
-       if (isset($saisies['options'])) {
-               $options_generales = $saisies['options'];
-               unset($saisies['options']);
-       }
-       
-       // Si la saisie n'existe pas, on ne fait rien
-       if ($chemin = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true)) {
-               // La position finale de la saisie
-               $position = array_pop($chemin);
-
-               // On va chercher le parent par référence pour pouvoir le modifier
-               $parent = &$saisies;
-               foreach ($chemin as $cle) {
-                       $parent = &$parent[$cle];
-               }
-
-               // On supprime et réordonne
-               unset($parent[$position]);
-               $parent = array_values($parent);
-       }
-       
-       // On remet les options générales après avoir manipulé
-       if (isset($options_generales)) {
-               $saisies['options'] = $options_generales;
-       }
-
-       return $saisies;
-}
-
-/**
- * Insère une saisie à une position donnée.
- *
- * @param array $saisies     Tableau des descriptions de saisies
- * @param array $saisie     Description de la saisie à insérer
- * @param array $chemin
- *     Position complète où insérer la saisie.
- *     En absence, insère la saisie à la fin.
- *
- * @return array
- *     Tableau des saisies complété de la saisie insérée
- */
-function saisies_inserer($saisies, $saisie, $chemin = array()) {
-       // On enlève les options générales avant de manipuler
-       if (isset($saisies['options'])) {
-               $options_generales = $saisies['options'];
-               unset($saisies['options']);
-       }
-       
-       // On vérifie quand même que ce qu'on veut insérer est correct
-       if ($saisie['saisie'] and $saisie['options']['nom']) {
-               // ajouter un identifiant
-               $saisie = saisie_identifier($saisie);
-
-               // Par défaut le parent c'est la racine
-               $parent = &$saisies;
-               // S'il n'y a pas de position, on va insérer à la fin du formulaire
-               if (!$chemin) {
-                       $position = count($parent);
-               } elseif (is_array($chemin)) {
-                       $position = array_pop($chemin);
-                       foreach ($chemin as $cle) {
-                               // Si la clé est un conteneur de saisies "saisies" et qu'elle n'existe pas encore, on la crée
-                               if ($cle == 'saisies' and !isset($parent[$cle])) {
-                                       $parent[$cle] = array();
-                               }
-                               $parent = &$parent[$cle];
-                       }
-                       // On vérifie maintenant que la position est cohérente avec le parent
-                       if ($position < 0) {
-                               $position = 0;
-                       } elseif ($position > count($parent)) {
-                               $position = count($parent);
-                       }
-               }
-               // Et enfin on insère
-               array_splice($parent, $position, 0, array($saisie));
-       }
-       
-       // On remet les options générales après avoir manipulé
-       if (isset($options_generales)) {
-               $saisies['options'] = $options_generales;
-       }
-       
-       return $saisies;
-}
-
-/**
- * Duplique une saisie (ou groupe de saisies)
- * en placant la copie à la suite de la saisie d'origine.
- * Modifie automatiquement les identifiants des saisies.
- *
- * @param array        $saisies             Un tableau décrivant les saisies
- * @param unknown_type $id_ou_nom_ou_chemin L'identifiant unique ou le nom ou le chemin de la saisie a dupliquer
- *
- * @return array Retourne le tableau modifié des saisies
- */
-function saisies_dupliquer($saisies, $id_ou_nom_ou_chemin) {
-       // On récupère le contenu de la saisie à déplacer
-       $saisie = saisies_chercher($saisies, $id_ou_nom_ou_chemin);
-       if ($saisie) {
-               list($clone) = saisies_transformer_noms_auto($saisies, array($saisie));
-               // insertion apres quoi ?
-               $chemin_validation = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true);
-               // 1 de plus pour mettre APRES le champ trouve
-               ++$chemin_validation[count($chemin_validation) - 1];
-               // On ajoute "copie" après le label du champs
-               $clone['options']['label'] .= ' '._T('saisies:construire_action_dupliquer_copie');
-
-               // Création de nouveau identifiants pour le clone
-               $clone = saisie_identifier($clone, true);
-
-               $saisies = saisies_inserer($saisies, $clone, $chemin_validation);
-       }
-
-       return $saisies;
-}
-
-/**
- * Déplace une saisie existante autre part.
- *
- * @param array        $saisies             Un tableau décrivant les saisies
- * @param unknown_type $id_ou_nom_ou_chemin L'identifiant unique ou le nom ou le chemin de la saisie à déplacer
- * @param string       $ou                  Le nom de la saisie devant laquelle on déplacera OU le nom d'un conteneur entre crochets [conteneur]
- *
- * @return array Retourne le tableau modifié des saisies
- */
-function saisies_deplacer($saisies, $id_ou_nom_ou_chemin, $ou) {
-       // On récupère le contenu de la saisie à déplacer
-       $saisie = saisies_chercher($saisies, $id_ou_nom_ou_chemin);
-
-       // Si on l'a bien trouvé
-       if ($saisie) {
-               // On cherche l'endroit où la déplacer
-               // Si $ou est vide, c'est à la fin de la racine
-               if (!$ou) {
-                       $saisies = saisies_supprimer($saisies, $id_ou_nom_ou_chemin);
-                       $chemin = array(count($saisies));
-               } elseif (preg_match('/^\[(@?[\w]*)\]$/', $ou, $match)) {
-                       // Si l'endroit est entre crochet, c'est un conteneur
-                       $parent = $match[1];
-                       // Si dans les crochets il n'y a rien, on met à la fin du formulaire
-                       if (!$parent) {
-                               $saisies = saisies_supprimer($saisies, $id_ou_nom_ou_chemin);
-                               $chemin = array(count($saisies));
-                       } elseif (saisies_chercher($saisies, $parent, true)) {
-                               // Sinon on vérifie que ce conteneur existe
-                               // S'il existe on supprime la saisie et on recherche la nouvelle position
-                               $saisies = saisies_supprimer($saisies, $id_ou_nom_ou_chemin);
-                               $parent = saisies_chercher($saisies, $parent, true);
-                               $chemin = array_merge($parent, array('saisies', 1000000));
-                       } else {
-                               $chemin = false;
-                       }
-               } else {
-                       // Sinon ça sera devant un champ
-                       // On vérifie que le champ existe
-                       if (saisies_chercher($saisies, $ou, true)) {
-                               // S'il existe on supprime la saisie
-                               $saisies = saisies_supprimer($saisies, $id_ou_nom_ou_chemin);
-                               // Et on recherche la nouvelle position qui n'est plus forcément la même maintenant qu'on a supprimé une saisie
-                               $chemin = saisies_chercher($saisies, $ou, true);
-                       } else {
-                               $chemin = false;
-                       }
-               }
-
-               // Si seulement on a bien trouvé un nouvel endroit où la placer, alors on déplace
-               if ($chemin) {
-                       $saisies = saisies_inserer($saisies, $saisie, $chemin);
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Modifie une saisie.
- *
- * @param array        $saisies             Un tableau décrivant les saisies
- * @param unknown_type $id_ou_nom_ou_chemin L'identifiant unique ou le nom ou le chemin de la saisie à modifier
- * @param array        $modifs              Le tableau des modifications à apporter à la saisie
- *
- * @return Retourne le tableau décrivant les saisies, mais modifié
- */
-function saisies_modifier($saisies, $id_ou_nom_ou_chemin, $modifs) {
-       $chemin = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true);
-       $position = array_pop($chemin);
-       $parent = &$saisies;
-       foreach ($chemin as $cle) {
-               $parent = &$parent[$cle];
-       }
-
-       // On récupère le type tel quel
-       $modifs['saisie'] = $parent[$position]['saisie'];
-       // On récupère le nom s'il n'y est pas
-       if (!isset($modifs['options']['nom'])) {
-               $modifs['options']['nom'] = $parent[$position]['options']['nom'];
-       }
-       // On récupère les enfants tels quels s'il n'y a pas des enfants dans la modif
-       if (!isset($modifs['saisies'])
-               and isset($parent[$position]['saisies'])
-               and is_array($parent[$position]['saisies'])
-       ) {
-               $modifs['saisies'] = $parent[$position]['saisies'];
-       }
-
-       // Si une option 'nouveau_type_saisie' est donnee, c'est que l'on souhaite
-       // peut être changer le type de saisie !
-       if (isset($modifs['options']['nouveau_type_saisie']) and $type = $modifs['options']['nouveau_type_saisie']) {
-               $modifs['saisie'] = $type;
-               unset($modifs['options']['nouveau_type_saisie']);
-       }
-
-       // On remplace tout
-       $parent[$position] = $modifs;
-
-       // Cette méthode ne marche pas trop
-       //$parent[$position] = array_replace_recursive($parent[$position], $modifs);
-
-       return $saisies;
-}
-
-/**
- * Transforme tous les noms du formulaire avec un preg_replace.
- *
- * @param array  $saisies      Un tableau décrivant les saisies
- * @param string $masque       Ce que l'on doit chercher dans le nom
- * @param string $remplacement Ce par quoi on doit remplacer
- *
- * @return array               Retourne le tableau modifié des saisies
- */
-function saisies_transformer_noms($saisies, $masque, $remplacement) {
-       if (is_array($saisies)) {
-               foreach ($saisies as $cle => $saisie) {
-                       $saisies[$cle]['options']['nom'] = preg_replace($masque, $remplacement, $saisie['options']['nom']);
-                       if (isset($saisie['saisies']) and is_array($saisie['saisies'])) {
-                               $saisies[$cle]['saisies'] = saisies_transformer_noms($saisie['saisies'], $masque, $remplacement);
-                       }
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Transforme les noms d'une liste de saisies pour qu'ils soient
- * uniques dans le formulaire donné.
- *
- * @param array $formulaire  Le formulaire à analyser
- * @param array $saisies     Un tableau décrivant les saisies.
- *
- * @return array
- *     Retourne le tableau modifié des saisies
- */
-function saisies_transformer_noms_auto($formulaire, $saisies) {
-       if (is_array($saisies)) {
-               foreach ($saisies as $cle => $saisie) {
-                       $saisies[$cle]['options']['nom'] = saisies_generer_nom($formulaire, $saisie['saisie']);
-                       // il faut prendre en compte dans $formulaire les saisies modifiees
-                       // sinon on aurait potentiellement 2 champs successifs avec le meme nom.
-                       // on n'ajoute pas les saisies dont les noms ne sont pas encore calculees.
-                       $new = $saisies[$cle];
-                       unset($new['saisies']);
-                       $formulaire[] = $new;
-
-                       if (isset($saisie['saisies']) and is_array($saisie['saisies'])) {
-                               $saisies[$cle]['saisies'] = saisies_transformer_noms_auto($formulaire, $saisie['saisies']);
-                       }
-               }
-       }
-
-       return $saisies;
-}
-
-/**
- * Insère du HTML au début ou à la fin d'une saisie.
- *
- * @param array  $saisie    La description d'une seule saisie
- * @param string $insertion Du code HTML à insérer dans la saisie
- * @param string $ou        L'endroit où insérer le HTML : "debut" ou "fin"
- *
- * @return array            Retourne la description de la saisie modifiée
- */
-function saisies_inserer_html($saisie, $insertion, $ou = 'fin') {
-       if (!in_array($ou, array('debut', 'fin'))) {
-               $ou = 'fin';
-       }
-
-       if ($ou == 'debut') {
-               $saisie['options']['inserer_debut'] =
-                       $insertion.(isset($saisie['options']['inserer_debut']) ? $saisie['options']['inserer_debut'] : '');
-       } elseif ($ou == 'fin') {
-               $saisie['options']['inserer_fin'] =
-                       (isset($saisie['options']['inserer_fin']) ? $saisie['options']['inserer_fin'] : '').$insertion;
-       }
-
-       return $saisie;
-}
diff --git a/www/plugins/saisies/inclure/configurer_saisie.html b/www/plugins/saisies/inclure/configurer_saisie.html
deleted file mode 100644 (file)
index 70991bb..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-[(#REM) 
-  
-  ### /!\ necessite le plugin YAML ###
-  
-  Genere l'intérieur d'un formulaire permettant de configurer une saisie.
-  
-  Par defaut, ne permet pas de configurer le "name" de la saisie car dans la
-  plupart des cas c'est une valeur qui sera automatique. On utilise le parametre
-  "avec_nom=oui" pour forcer le champ.
-  
-  Exemples d'appels :
-    #INCLURE{fond=inclure/configurer_saisie, env, saisie=input}
-    #INCLURE{fond=inclure/configurer_saisie, env, saisie=input, avec_nom=oui}
-
-]
-
-[(#SET{config, #ENV{saisie}|construire_configuration_saisie{#ENV{avec_nom}}})]
-
-#GENERER_SAISIES{#GET{config}}
diff --git a/www/plugins/saisies/inclure/configurer_saisie_fonctions.php b/www/plugins/saisies/inclure/configurer_saisie_fonctions.php
deleted file mode 100644 (file)
index 07e988f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function construire_configuration_saisie($saisie, $avec_nom = 'non') {
-       include_spip('inc/yaml');
-       $configuration_saisie = yaml_decode_file(find_in_path('saisies/'.$saisie.'.yaml'));
-
-       if (is_array($configuration_saisie)) {
-               $configuration_saisie = $configuration_saisie['options'];
-               // On ne met le premier champ permettant de configurer le "name" seulement si on le demande explicitement
-               if ($avec_nom == 'oui') {
-                       array_unshift(
-                               $configuration_saisie[0]['contenu'],
-                               array(
-                                       'saisie' => 'input',
-                                       'options' => array(
-                                               'nom' => 'nom',
-                                               'label' => '<:saisies:option_nom_label:>',
-                                               'explication' => '<:saisies:option_nom_explication:>',
-                                               'obligatoire' => 'oui'
-                                       ),
-                                       'verifier' => array(
-                                               'type' => 'regex',
-                                               'options' => array(
-                                                       'modele' => '/^[\w]+$/'
-                                               )
-                                       )
-                               )
-                       );
-               }
-       } else {
-               $configuration_saisie = array();
-       }
-       return $configuration_saisie;
-}
diff --git a/www/plugins/saisies/inclure/fieldset_legend.html b/www/plugins/saisies/inclure/fieldset_legend.html
deleted file mode 100644 (file)
index 2b47f93..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[(#ENV{icone}|oui)
-[(#REM) en SPIP 3 on cherche avant tout dans le chemin des images
-]#SET{icone,''}[(#SPIP_VERSION|version_compare{2.9, >}|oui)#SET{icone,#CHEMIN_IMAGE{#ENV{icone}}]
-[<img src="(#GET{icone}|sinon{#CHEMIN{#ENV{icone}}}
-                                        |image_reduire{#ENV{taille_icone}|sinon{16}}
-                                        |extraire_attribut{src})" alt="#ENV*{label}" /> ]
-]
-<span>#ENV*{label}</span>
diff --git a/www/plugins/saisies/inclure/generer_saisies.html b/www/plugins/saisies/inclure/generer_saisies.html
deleted file mode 100644 (file)
index 9acd758..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-[(#REM) 
-  
-  ### /!\ boucle POUR (spip Bonux) ###
-  
-  Génère le contenu (l'intérieur) d'un formulaire, à partir d'une description dans un tableau PHP.
-  Le tableau doit être de la forme suivante :
-  
-  // Chaque ligne est elle-même un tableau
-  array(
-       // Ligne de type "explication"
-       array(
-               'explication' => 'Ceci est un bloc d'explication général.'
-       ),
-       // Ligne classique, cad un champ de formulaire
-       array(
-               'saisie' => 'input',
-               'options => array(
-                       'nom' => 'mon_champ',
-                       'label' => 'Un joli titre',
-                       'obligatoire' => 'oui'
-               )
-       ),
-       // Ligne contenant un fieldset
-       array(
-               'groupe' => 'Ceci est le titre du groupe de champs (fieldset)',
-               'css' => 'eventuelles classes css',
-               'contenu' => array(
-                       // On recommence ici suivant le même formalisme que le tableau général.
-               )
-       )
-  )
-  
-  
-  Exemples d'appels :
-    # INCLURE{fond=inclure/generer_saisies, env, saisies=#ENV{tableau}}
-
-]
-
-<BOUCLE_contenu(POUR){tableau #ENV{saisies}}>
-[(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
-[(#VALEUR**|saisies_generer_html{#ENV{_env}|sinon{#ENV**|unserialize}})]
-]
-</BOUCLE_contenu>
-
-[(#REM) Ajout du script js pour les options si des saisies ]
-[(#ENV{from_fieldset}|non|et{#ENV{saisies}|saisies_afficher_si|ou{#ENV{saisies}|saisies_afficher_si_remplissage}}) #INCLURE{fond=inclure/js_afficher_si,env}]
diff --git a/www/plugins/saisies/inclure/js_afficher_si.html b/www/plugins/saisies/inclure/js_afficher_si.html
deleted file mode 100644 (file)
index 90e648d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-[(#REM) Ajout d'un marqueur unique pour identifier le formulaire]\r
-[(#SET{id_unique,#EVAL{'rand();'}})]\r
-\r
-<[(#DIV|sinon{li})] id="afficher_si_#GET{id_unique}" style="display:none;" >\r
-<script type="text/javascript">// <![CDATA[\r
-[(#ENV**{saisies}|saisies_generer_js_afficher_si{#GET{id_unique}})]\r
- //]]></script> </[(#DIV|sinon{li})]>\r
diff --git a/www/plugins/saisies/inclure/saisies_aide.html b/www/plugins/saisies/inclure/saisies_aide.html
deleted file mode 100644 (file)
index c3b6061..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-
-Sauter à : <a href="#liste_saisies">Toutes les saisies</a>, <a href="#liste_options_saisies">Toutes les options</a>
-
-<h2 class="h2 spip">Utilisation des options</h2>
-<B_options_tableau>
-<div style="overflow:auto;">
-<table class="spip">
-<thead>
-       <tr class="first_row">
-               <th>Options \ Saisies</th>
-               <BOUCLE_saisies_tableau_th(POUR){tableau #ENV{saisies}}>
-               <th><a href="#saisie_#CLE">#CLE</a></th>
-               </BOUCLE_saisies_tableau_th>
-       </tr>
-</thead>
-<tbody>
-       <BOUCLE_options_tableau(DATA){source tableau, #ENV{options}}>
-       <tr class="tr_liste [(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
-               <th><a href="#option_#CLE">#CLE</a></th>
-               <BOUCLE_saisies_tableau(DATA){source tableau, #ENV{saisies}}>
-               <td>[(#CLE|in_array{#_options_tableau:UTILISEE_PAR}|?{'X','-'})]</td>
-               </BOUCLE_saisies_tableau>
-       </tr>
-       </BOUCLE_options_tableau>
-</tbody>
-</table>
-</div>
-</B_options_tableau>
-
-<h2 class="h2 spip" id="liste_saisies">Toutes les saisies</h2>
-<BOUCLE_saisies(DATA){source tableau, #ENV{saisies}}>
-<h3 class="h3 spip" id="saisie_#CLE">#TITRE (#CLE)</h3>
-<p class="description">
-       <strong>Description :</strong> #DESCRIPTION
-</p>
-<p class="options">
-       <strong>Options :</strong>
-       <BOUCLE_options_saisie(DATA){source tableau, #OPTIONS}{", "}><a href="#option_#CLE">#CLE</a></BOUCLE_options_saisie>
-</p>
-</BOUCLE_saisies>
-
-<h2 class="h2 spip" id="liste_options_saisies">Toutes les options</h2>
-<BOUCLE_options(DATA){source tableau, #ENV{options}}>
-[(#SET{label, #LABEL|sinon{#LABEL_CASE}})]
-<h3 class="h3 spip" id="option_#CLE">[(#GET{label}|?{#GET{label} [ ((#CLE))], #CLE})]</h3>
-[<p class="description">
-       <strong>Description :</strong> (#EXPLICATION|sinon{#LABEL|?{#LABEL_CASE}})
-</p>]
-<B_utilisee_par>
-<p class="utilisee_par">
-       <strong>Utilisée par :</strong>
-       <BOUCLE_utilisee_par(DATA){source tableau, #UTILISEE_PAR}{", "}><a href="#saisie_#VALEUR">#VALEUR</a></BOUCLE_utilisee_par>
-</p>
-</B_utilisee_par>
-<B_choix>
-<p class="choix_possibles">
-       <strong>Choix possibles :</strong>
-       <ul class="spip">
-               <BOUCLE_choix(DATA){source tableau, #DATAS}>
-               <li>"#CLE" : #VALEUR</li>
-               </BOUCLE_choix>
-       </ul>
-</p>
-</B_choix>
-</BOUCLE_options>
diff --git a/www/plugins/saisies/inclure/voir_saisies.html b/www/plugins/saisies/inclure/voir_saisies.html
deleted file mode 100644 (file)
index 5c37823..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-[(#REM) S'il y a des options afficher_si, il faut v�rifier que les conditions sont remplies ]
-[(#SET{saisies,#ENV{saisies}|saisies_verifier_afficher_si{#ENV**|unserialize}})]
-<BOUCLE_saisies(POUR){tableau #GET{saisies}}>
-[(#EVAL{!defined('_SAISIES_AFFICHAGE_COMPACT')}|oui)
-[(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
-       [(#VALEUR|saisies_generer_vue{#ENV{_env}|sinon{#ENV**|unserialize}})]
-]
-]
-[(#EVAL{defined('_SAISIES_AFFICHAGE_COMPACT')}|oui)
-[<div class="[(#VALEUR|table_valeur{options/nom})]">[<b>(#VALEUR|table_valeur{options/label}|typo)</b>:] (#VAL{saisie}|array_key_exists{#VALEUR}|?{[(#VALEUR|saisies_generer_vue{#ENV{_env}|sinon{#ENV**|unserialize},#ARRAY{valeur_uniquement,oui,sans_reponse,''}}|ptobr)]})</div>]
-]
-</BOUCLE_saisies>
diff --git a/www/plugins/saisies/javascript/saisies.js b/www/plugins/saisies/javascript/saisies.js
deleted file mode 100644 (file)
index d3f0e6e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-jQuery(function(){
-       saisies_fieldset_pliable();
-       onAjaxLoad(saisies_fieldset_pliable);
-});
-
-function saisies_fieldset_pliable(){
-       // On cherche les groupes de champs pliables
-       jQuery('.fieldset.pliable')
-               .each(function(){
-                       var fieldset = jQuery(this);
-                       var groupe = jQuery(this).find('> fieldset > .editer-groupe');
-                       var legend = jQuery(this).find('> fieldset > .legend');
-
-                       // S'il est déjà plié on cache le contenu
-                       if (fieldset.is('.plie'))
-                               groupe.hide();
-
-                       // Ensuite on ajoute une action sur le titre
-                       legend
-                               .unbind('click')
-                               .click(
-                                       function(){
-                                               fieldset.toggleClass('plie');
-                                               if (groupe.is(':hidden'))
-                                                       groupe.show();
-                                               else
-                                                       groupe.hide();
-                                       }
-                               );
-               });
-};
-
-function saisies_date_jour_mois_annee_changer_date(me, datetime) {
-       var champ = jQuery(me);
-       var li = champ.closest('.editer');
-       var     jour = jQuery.trim(li.find('.date_jour').val());
-       var     mois = jQuery.trim(li.find('.date_mois').val());
-       var     annee = jQuery.trim(li.find('.date_annee').val());
-       var     date = jQuery.trim(li.find('.datetime').val());
-       
-       while(jour.length < 2) {jour = '0' + jour;}
-       while(mois.length < 2) {mois = '0' + mois;}
-       while(annee.length < 4) {annee = '0' + annee;}
-       
-       if (datetime == 'oui') {
-               date = annee + '-' + mois + '-' + jour + date.substring(10);
-       }
-       else {
-               date = annee + '-' + mois + '-' + jour;
-       }
-       li.find('.datetime').attr('value', date);
-}
diff --git a/www/plugins/saisies/lang/paquet-saisies.xml b/www/plugins/saisies/lang/paquet-saisies.xml
deleted file mode 100644 (file)
index bbfc74d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<traduction module="paquet-saisies" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/saisies/trunk/lang/" reference="fr">
-       <langue code="ar" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=ar" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=de" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=en" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=es" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=fr" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=fr_tu" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=nl" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=pt_br" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=ru" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=sk" total="4" traduits="4" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/saisies/lang/paquet-saisies_ar.php b/www/plugins/saisies/lang/paquet-saisies_ar.php
deleted file mode 100644 (file)
index cd99700..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'يسهّل هذا الملحق إنشاء حقول للاستمارات من خلال توفيره علامة SAISIE#. تتوافق علامات HTML الناتجة مع تسمية الاستمارات 
-               المقترحة في SPIP بإصداراته الأحدث من ٢.٠ ومع ملحق الاعدادات CFG.',
-       'saisies_nom' => 'إدخال للاستمارات',
-       'saisies_slogan' => 'إنشاء حقول استمارات بسهولة',
-       'saisies_titre' => 'إدخال للاستمارات'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_de.php b/www/plugins/saisies/lang/paquet-saisies_de.php
deleted file mode 100644 (file)
index 2dbb3e3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Dieses Plugin erleichtert die Erstellung von Eingabefeldern für Formulare und bietet einen Tag #SAISIE. Das erzeugte HTML ist mit der Nomenklatur der von SPIP > 2.0 und dem Plugin CFG kompatibel.',
-       'saisies_nom' => 'Eingabefelder für Formulare',
-       'saisies_slogan' => 'Unkompliziertes Erstellen von Eingabefeldern für Formulare.',
-       'saisies_titre' => 'Eingabefelder für Formulare'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_en.php b/www/plugins/saisies/lang/paquet-saisies_en.php
deleted file mode 100644 (file)
index 1e58b60..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'This plugin makes it easier to write form fields by providing a #SAISIE tag. 
-               The generated HTML is compatible with the classification of forms
-               proposed by SPIP > 2.0 and with the configuration plugin CFG.',
-       'saisies_nom' => 'Entries for forms',
-       'saisies_slogan' => 'Create easily forms fields.',
-       'saisies_titre' => 'Entries for forms'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_es.php b/www/plugins/saisies/lang/paquet-saisies_es.php
deleted file mode 100644 (file)
index 02c271d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Este plugin permite facilitar la redacción de campos de formularios proponiendo una etiqueta #SAISIE. El HTML generado es compatible con la nomenclatura de los formularios propuestos por SPIP > 2.0 y con el plugin de configuración CFG.',
-       'saisies_nom' => 'Entradas para formularios',
-       'saisies_slogan' => 'Escribir fácilmente los campos de formularios.',
-       'saisies_titre' => 'Entradas para formularios'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_fr.php b/www/plugins/saisies/lang/paquet-saisies_fr.php
deleted file mode 100644 (file)
index d3e0dab..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/saisies/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Ce plugin permet de faciliter l’écriture de champs de formulaires en proposant une
-               balise #SAISIE. Le HTML généré est compatible avec la nomenclature des formulaires
-               proposée par SPIP > 2.0 et avec le plugin de configuration CFG.',
-       'saisies_nom' => 'Saisies pour formulaires',
-       'saisies_slogan' => 'Écrire facilement des champs de formulaires.',
-       'saisies_titre' => 'Saisies pour formulaires'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_fr_tu.php b/www/plugins/saisies/lang/paquet-saisies_fr_tu.php
deleted file mode 100644 (file)
index e0cae14..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Ce plugin permet de faciliter l’écriture de champs de formulaires en proposant une
-               balise #SAISIE. Le HTML généré est compatible avec la nomenclature des formulaires
-               proposée par SPIP > 2.0 et avec le plugin de configuration CFG.',
-       'saisies_nom' => 'Saisies pour formulaires',
-       'saisies_slogan' => 'Écrire facilement des champs de formulaires.',
-       'saisies_titre' => 'Saisies pour formulaires'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_nl.php b/www/plugins/saisies/lang/paquet-saisies_nl.php
deleted file mode 100644 (file)
index 29ece40..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Deze plugin vereenvoudigt het maken van formuliervelden danzij een code #SAISIE. De gegenereerde HTML is compatibel met die van SPIP formulieren vanaf versie 2.0 en met de configuratie plugin CFG.',
-       'saisies_nom' => 'Saisies (Invoer) voor formulieren',
-       'saisies_slogan' => 'Eenvoudig formuliervelden maken.',
-       'saisies_titre' => 'Invoer voor formulieren'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_pt_br.php b/www/plugins/saisies/lang/paquet-saisies_pt_br.php
deleted file mode 100644 (file)
index d673229..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Este plugin permite facilitar a escrita de campos de formulários, propondo uma tag #SAISIE. O HTML gerado é compatível com a nomenclatura dos formulários propostos pelo SPIP > 2.0 e com o plugin de configuração CFG.',
-       'saisies_nom' => 'Entradas para formulários',
-       'saisies_slogan' => 'Facilitar a entrada de dados em campos de formulários.',
-       'saisies_titre' => 'Entrada de dados para formulários'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_ru.php b/www/plugins/saisies/lang/paquet-saisies_ru.php
deleted file mode 100644 (file)
index 5f21e73..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Этот плагин облегчает работу по созданию форм. Вам предоставляется возможность создавать поля (input,textarea) в форме при помощи тега #SAISIE. Полученная форма полностью совместима со стандартом  SPIP 2.0+ и c плагином CFG.',
-       'saisies_nom' => 'Поля для форм (saises)',
-       'saisies_slogan' => 'Упрощение работы по созданию форм',
-       'saisies_titre' => 'Поля для форм (saises)'
-);
diff --git a/www/plugins/saisies/lang/paquet-saisies_sk.php b/www/plugins/saisies/lang/paquet-saisies_sk.php
deleted file mode 100644 (file)
index ca409ad..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-saisies?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'saisies_description' => 'Tento zásuvný modul uľahčuje zápis polí formulára ponúknutím tagu #INPUT. Vytvorený kód HTML je kompatibilný s klasifikáciou formulárov, ktorú ponúka SPIP > 2.0 a so zásuvným modulom na konfiguráciu – CFG.',
-       'saisies_nom' => 'Vstupy pre formuláre',
-       'saisies_slogan' => 'Jednoduchý zápis polí formulárov.',
-       'saisies_titre' => 'Vstupy pre formuláre'
-);
diff --git a/www/plugins/saisies/lang/saisies.xml b/www/plugins/saisies/lang/saisies.xml
deleted file mode 100644 (file)
index 9fba78a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<traduction module="saisies" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/saisies/trunk/lang/" reference="fr">
-       <langue code="ca" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=ca" total="182" traduits="85" relire="0" modifs="9" nouveaux="88" pourcent="46.70">
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=de" total="182" traduits="182" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-               <traducteur nom="Torsten Willmann" lien="https://trad.spip.net/auteur/torsten-willmann" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=en" total="182" traduits="182" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="jack31" lien="https://trad.spip.net/auteur/jack31" />
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-               <traducteur nom="Paolo" lien="https://trad.spip.net/auteur/paolo" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=es" total="182" traduits="164" relire="4" modifs="1" nouveaux="13" pourcent="90.11">
-               <traducteur nom="danielquisbert" lien="https://trad.spip.net/auteur/danielquisbert" />
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-               <traducteur nom="severo" lien="https://trad.spip.net/auteur/severo" />
-       </langue>
-       <langue code="fa" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=fa" total="182" traduits="107" relire="0" modifs="3" nouveaux="72" pourcent="58.79">
-               <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=fr" total="182" traduits="182" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=fr_tu" total="182" traduits="174" relire="0" modifs="2" nouveaux="6" pourcent="95.60">
-               <traducteur nom="beatnick" lien="https://trad.spip.net/auteur/beatnick" />
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-               <traducteur nom="RealET" lien="https://trad.spip.net/auteur/realet" />
-       </langue>
-       <langue code="it" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=it" total="182" traduits="139" relire="0" modifs="3" nouveaux="40" pourcent="76.37">
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=nl" total="182" traduits="182" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="mpossoz" lien="https://trad.spip.net/auteur/mpossoz" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=pt_br" total="182" traduits="169" relire="0" modifs="3" nouveaux="10" pourcent="92.86">
-               <traducteur nom="placido" lien="https://trad.spip.net/auteur/placido" />
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=ru" total="182" traduits="147" relire="0" modifs="11" nouveaux="24" pourcent="80.77">
-               <traducteur nom="nazar" lien="https://trad.spip.net/auteur/nazar" />
-               <traducteur nom="olly" lien="https://trad.spip.net/auteur/olly" />
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/saisies?lang_cible=sk" total="182" traduits="166" relire="0" modifs="0" nouveaux="16" pourcent="91.21">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/saisies/lang/saisies_ca.php b/www/plugins/saisies/lang/saisies_ca.php
deleted file mode 100644 (file)
index c700833..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=ca
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Fullejar l’article',
-       'bouton_parcourir_docs_breve' => 'Fullejar la breu',
-       'bouton_parcourir_docs_rubrique' => 'Fullejar la secció',
-       'bouton_parcourir_mediatheque' => 'Fullejar la mediateca',
-
-       // L
-       'label_annee' => 'Any',
-       'label_jour' => 'Dia',
-       'label_mois' => 'Mes',
-
-       // O
-       'option_attention_explication' => 'Un missatge més important que l’explicació.',
-       'option_attention_label' => 'Advertència',
-       'option_cacher_option_intro_label' => 'Amagar la primera elecció buida',
-       'option_choix_destinataires_explication' => 'Un o diversos autors, d’entre els quals hi ha l’usuari, podrà fer la seva tria. Si no hi ha res seleccionat, és l’autor que ha instal·lat el lloc el que serà escollit.',
-       'option_choix_destinataires_label' => 'Possibles destinataris',
-       'option_class_label' => 'Classes CSS suplementàries',
-       'option_cols_explication' => 'Amplada del bloc en número de caràcters. Aquesta opció no s’aplica sempre ja que els estils CSS del vostre lloc el poden anul·lar.', # MODIF
-       'option_cols_label' => 'Amplada',
-       'option_datas_explication' => 'Heu d’especificar una opció per línia en la forma "cle|Label du choix"', # MODIF
-       'option_datas_label' => 'Llista d’eleccions possibles',
-       'option_defaut_label' => 'Valor per defecte',
-       'option_disable_avec_post_explication' => 'Idèntic que l’opció anterior però tanmateix envia el valor dins d’un camps amagat.',
-       'option_disable_avec_post_label' => 'Desactivar però enviar',
-       'option_disable_explication' => 'El camp no pot obtenir el focus.',
-       'option_disable_label' => 'Desactivar el camp',
-       'option_explication_explication' => 'Si és necessari, una frase curta descriu l’objecte del camp.',
-       'option_explication_label' => 'Explicació',
-       'option_groupe_affichage' => 'Visualització',
-       'option_groupe_description' => 'Descripció',
-       'option_groupe_utilisation' => 'Utilització',
-       'option_groupe_validation' => 'Validació',
-       'option_info_obligatoire_explication' => 'Podeu, per defecte, modificar la indicació d’obligació: <i>[Obligatoire]</i>.',
-       'option_info_obligatoire_label' => 'Indicació d’obligació',
-       'option_inserer_barre_choix_edition' => 'barra d’edició completa',
-       'option_inserer_barre_choix_forum' => 'barra dels fòrums',
-       'option_inserer_barre_explication' => 'Insereix una barra d’eines del portaplomes si aquest està activat.',
-       'option_inserer_barre_label' => 'Inserir una barra d’eines',
-       'option_label_case_label' => 'Etiqueta situada al costat de la casella',
-       'option_label_explication' => 'El títol que es mostrarà.',
-       'option_label_label' => 'Etiqueta',
-       'option_maxlength_explication' => 'L’usuari no podrà escriure més caràcters que aquest nombre.',
-       'option_maxlength_label' => 'Número màxim de caràcters',
-       'option_nom_explication' => 'Un nom informàtic que identificarà el camp. Ha de contenir només caràcters alfanumèrics minúsculs o el caràcter "_".', # MODIF
-       'option_nom_label' => 'Nom del camp',
-       'option_obligatoire_label' => 'Camp obligatori',
-       'option_option_intro_label' => 'Etiqueta de la primera elecció buida',
-       'option_pliable_label' => 'Plegable',
-       'option_pliable_label_case' => 'El grup de camps es podrà replegar.',
-       'option_plie_label' => 'Ja plegat',
-       'option_plie_label_case' => 'Si el grup de camps és plegable, ja estarà plegat a la visualització del formulari.',
-       'option_previsualisation_explication' => 'Si el portaplomes està activat, afegit una pestanya per fer una visualització prèvia del text introduït. ',
-       'option_previsualisation_label' => 'Activar la visualització prèvia',
-       'option_readonly_explication' => 'El camp es pot llegir, seleccionar, però no modificar.',
-       'option_readonly_label' => 'Només lectura',
-       'option_rows_explication' => 'Alçada del bloc en número de línies. Aquesta opció no es pot aplicar sempre ja que els estils CSS del vostre lloc el poden anul·lar.',
-       'option_rows_label' => 'Número de línies',
-       'option_size_explication' => 'Amplada del camp en número de caràcters. Aquesta opció no es pot aplicar sempre ja que els estils CSS del vostre lloc el poden anul·lar. ',
-       'option_size_label' => 'Mida del camp',
-       'option_type_choix_plusieurs' => 'Permetrà a l’usuari escollir <strong>diversos</strong> destinataris.', # MODIF
-       'option_type_choix_tous' => 'Posar <strong>tots</strong> aquests autors com a destinataris. L’usuari no tindrà cap tria.',
-       'option_type_choix_un' => 'Permetre a l’usuari escollir <strong>un únic</strong> destinatari.', # MODIF
-       'option_type_explication' => 'En mode "amagat", el contingut del camp no serà visible.',
-       'option_type_label' => 'Tipus del camp',
-       'option_type_password' => 'Amagat', # MODIF
-       'option_type_text' => 'Normal',
-
-       // S
-       'saisie_case_explication' => 'Permet activar o desactivar alguna cosa.',
-       'saisie_case_titre' => 'Casella única',
-       'saisie_checkbox_explication' => 'Permet escollir diverses opcions amb caselles.',
-       'saisie_checkbox_titre' => 'Caselles a marcar', # MODIF
-       'saisie_destinataires_explication' => 'Permet escollir un o diversos destinataris entre els autors seleccionats prèviament.',
-       'saisie_destinataires_titre' => 'Destinataris',
-       'saisie_explication_explication' => 'Un text explicatiu general.',
-       'saisie_explication_titre' => 'Explicació',
-       'saisie_fieldset_explication' => 'Un quadre que podrà englobar diversos camps.',
-       'saisie_fieldset_titre' => 'Grup de camps',
-       'saisie_file_explication' => 'Enviament d’un arxiu ',
-       'saisie_file_titre' => 'Arxiu',
-       'saisie_hidden_explication' => 'Un camp omplert prèviament que l’usuari no podrà veure.',
-       'saisie_hidden_titre' => 'Camp amagat',
-       'saisie_input_explication' => 'Una simple línia de text, que podrà ser visible o estar amagada (contrasenya).',
-       'saisie_input_titre' => 'Línia de text',
-       'saisie_oui_non_explication' => 'Si o no, està clar? :)',
-       'saisie_oui_non_titre' => 'Si o no ',
-       'saisie_radio_defaut_choix1' => 'Un',
-       'saisie_radio_defaut_choix2' => 'Dos',
-       'saisie_radio_defaut_choix3' => 'Tres',
-       'saisie_radio_explication' => 'Permet escollir una opció entre les diverses disponibles.',
-       'saisie_radio_titre' => 'Botons ràdios',
-       'saisie_selection_explication' => 'Escollir una opció en una llista desplegable.', # MODIF
-       'saisie_selection_multiple_explication' => 'Permet escollir diverses opcions amb una llista.',
-       'saisie_selection_multiple_titre' => 'Selecció múltiple',
-       'saisie_selection_titre' => 'Llista desplegable',
-       'saisie_textarea_explication' => 'Un camp de text en diverses línies.',
-       'saisie_textarea_titre' => 'Bloc de text',
-
-       // T
-       'tous_visiteurs' => 'Tots els visitants (fins i tot els no registrats)',
-
-       // V
-       'vue_sans_reponse' => '<i>Sense resposta</i>', # MODIF
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_de.php b/www/plugins/saisies/lang/saisies_de.php
deleted file mode 100644 (file)
index 960e7e3..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Artikel durchsuchen',
-       'bouton_parcourir_docs_breve' => 'Meldung durchsuchen',
-       'bouton_parcourir_docs_rubrique' => 'Rubrik durchsuchen',
-       'bouton_parcourir_mediatheque' => 'Mediathek durchsuchen',
-
-       // C
-       'construire_action_annuler' => 'Abbrechen',
-       'construire_action_configurer' => 'Konfigurieren',
-       'construire_action_deplacer' => 'Verschieben',
-       'construire_action_dupliquer' => 'Duplizieren',
-       'construire_action_dupliquer_copie' => '(Kopie)',
-       'construire_action_supprimer' => 'Löschen',
-       'construire_ajouter_champ' => 'Feld hinzufügen',
-       'construire_ajouter_groupe' => 'eine Gruppe hinzufügen',
-       'construire_attention_enregistrer' => 'Vergessen Sie nicht, Ihre Änderungen zu speichern.',
-       'construire_attention_modifie' => 'Das untere Formular unterscheidet sich vom ursprünglichen. Sie können es in den Zustand vor den Änderungen zurücksetzen.',
-       'construire_attention_supprime' => 'Ihre Änderungen umfassen das Löschen von Feldern. Bitte bestätigen das Speichern dieser neuen Version des Formulars.',
-       'construire_aucun_champs' => 'Dieses Formular enthält noch keine Felder.',
-       'construire_confirmer_supprimer_champ' => 'Wollen Sie dieses Feld wirklich löschen?',
-       'construire_info_nb_champs_masques' => '@nb@ Feld/er während der Konfiguration der Gruppe ausgeblendet.',
-       'construire_position_explication' => 'Geben Sie an, vor welchem anderen Feld dieses erscheinen soll.',
-       'construire_position_fin_formulaire' => 'Am Ende des Formulars',
-       'construire_position_fin_groupe' => 'Am Ende der Gruppe @groupe@',
-       'construire_position_label' => 'Feldposition',
-       'construire_reinitialiser' => 'Formular neu initialisieren',
-       'construire_reinitialiser_confirmer' => 'Alle Ihre Änderungen werden verlorengehen. Wollen Sie wirklich das ursprüngliche Formular wieder herstellen?',
-       'construire_verifications_aucune' => 'Keine',
-       'construire_verifications_label' => 'Art der Überprüfung',
-
-       // E
-       'erreur_generique' => 'Fehler im folgenden Feld. Bitte überprüfen Sie Ihre Eingabe.',
-       'erreur_option_nom_unique' => 'Dieser Name wird bereits für ein anderes Feld verwendet; er kann in diesem Formular nur einmal verwendet werden.',
-
-       // I
-       'info_configurer_saisies' => 'Testseite der Eingabefelder.',
-
-       // L
-       'label_annee' => 'Jahr',
-       'label_jour' => 'Tag',
-       'label_mois' => 'Monat',
-
-       // O
-       'option_aff_art_interface_explication' => 'Ausschließlich Artikel in der Sprache des Nutzers anzeigen',
-       'option_aff_art_interface_label' => 'Mehrsprachige Anzeige',
-       'option_aff_langue_explication' => 'Sprache des ausgewählten Artikels oder der Rubrik vor dem Titel anzeigen',
-       'option_aff_langue_label' => 'Sprache anzeigen',
-       'option_aff_rub_interface_explication' => 'Ausschließlich Rubriken in der Sprache des Nutzers anzeigen',
-       'option_aff_rub_interface_label' => 'Mehrsprachige Anzeige',
-       'option_afficher_si_explication' => 'Bestimmt die Bedingungen zur Anzeige des Feldes in Abhängigkeit vom Wert eines anderen Feldes. Die Kennung des anderen Feldes steht zwischen <code>@</code>. <br />Beispiel <code>@selection_1@=="Toto"</code> das Feld wird angezeigt, wenn das Feld <code>selection_1</code> den Wert <code>Toto</code> hat.',
-       'option_afficher_si_label' => 'Bedingte Anzeige',
-       'option_afficher_si_remplissage_explication' => 'Im Gegensatz zur vorherigen Option, werden diese Felder nur beim ausfüllen des Formulars angezeigt, nicht bei den Ergebnissen. Die Syntax bleibt gleich.',
-       'option_afficher_si_remplissage_label' => 'Bedingte Anzeige beim Ausfüllen',
-       'option_attention_explication' => 'Nachricht wichtiger als Meldung',
-       'option_attention_label' => 'Achtung',
-       'option_attribut_title_label' => 'Titelattribut in das Label mit dem Wert des Felds einfügen. Zurückhaltend zu verwenden.',
-       'option_autocomplete_defaut' => 'Standardeinstellung belassen',
-       'option_autocomplete_explication' => 'Beim Laden der Seite kann Ihr Browser das Feld mit bereits verwendeten Werten vorausfüllen.',
-       'option_autocomplete_label' => 'Feld vorausfüllen',
-       'option_autocomplete_off' => 'Deaktivieren',
-       'option_autocomplete_on' => 'Aktivieren',
-       'option_cacher_option_intro_label' => 'Erste leere Auswahl ausblenden',
-       'option_choix_alternatif_label' => 'Alternative Auswahl anbieten',
-       'option_choix_alternatif_label_defaut' => 'Andere Auswahl',
-       'option_choix_alternatif_label_label' => 'Label dieser alternativen Auswahl',
-       'option_choix_destinataires_explication' => 'Einer oder mehrere Empfänger, welche der Besucher auswählen kann. Wenn er keine Auswahl trifft, geht die Nachricht an den ersten Administrator (Autor 1).',
-       'option_choix_destinataires_label' => 'Mögliche Empfänger',
-       'option_class_label' => 'Zusätzliche CSS-Klassen',
-       'option_cols_explication' => 'Breite des Blocks in Zeichen. Diese Option kann durch ihre CSS-Stile unwirksam grmacht werden.',
-       'option_cols_label' => 'Breite',
-       'option_datas_explication' => 'Sie müssen in jeder Zeile eine Option im Format "Schlüssel|Bezeichnung" angeben.',
-       'option_datas_label' => 'Mögliche Angaben',
-       'option_datas_sous_groupe_explication' => 'Sie müssen eine Wahlmöglichkeit pro Linie im Format "cle|Label" eingeben. <br />Sie können den Beginn einer Untergruppe in der Form "*Titel der Untergruppe" angeben. Um Eine Untergruppe abzuschliessen beginnen Sie eine neue Untergruppe, oder fügen Sie ein Zeile an, die nur ein "/*" enthält.',
-       'option_defaut_label' => 'Standardwert',
-       'option_disable_avec_post_explication' => 'Identisch mit voriger Option, jedoch wird der Wert in ein verstecktes Feld eingefügt.',
-       'option_disable_avec_post_label' => 'Senden trotz Deaktivierung',
-       'option_disable_explication' => 'Das Feld erhält keinen Fokus.',
-       'option_disable_label' => 'Feld deaktivieren',
-       'option_erreur_obligatoire_explication' => 'Sie können eine eigene Fehlermeldung bei nicht ausgefüllten Pflichtfeldern eingeben oder darauf verzichten.',
-       'option_erreur_obligatoire_label' => 'Hinweis Pflichtfeld',
-       'option_explication_explication' => 'Falls erforderlich kurze Beschreibung des Feldobjekts',
-       'option_explication_label' => 'Erläuterung',
-       'option_groupe_affichage' => 'Anzeige',
-       'option_groupe_description' => 'Beschreibung',
-       'option_groupe_utilisation' => 'Verwendung',
-       'option_groupe_validation' => 'Bestätigung',
-       'option_heure_pas_explication' => 'Wenn Sie das Zeitfeld verwenden, wird ein Menü für die Eingabe von Stunde und Minute angezeigt. Sie können hier den Abstand zwischen den möglichen Zeitpunkten angeben. Grundeinstellung sind 30 Minuten.',
-       'option_heure_pas_label' => 'Dauer der Zeitintervalle in Minuten bei der Eingabe',
-       'option_horaire_label' => 'Zeit',
-       'option_horaire_label_case' => 'Eingabe der Uhrzeit ebenfalls ermöglichen',
-       'option_id_groupe_label' => 'Schlagwortgruppe',
-       'option_info_obligatoire_explication' => 'Sie können die Standardbezeichnung für Pflichtfelder ändern:<i>[Pflichtfeld]</i>.',
-       'option_info_obligatoire_label' => 'Pflichtfeld-Anzeige',
-       'option_inserer_barre_choix_edition' => 'Vollständige Symbolleiste "Bearbeiten"',
-       'option_inserer_barre_choix_forum' => 'Symbolleiste "Foren"',
-       'option_inserer_barre_explication' => 'Eine Symbolleiste hinzufügen, wenn das Plugin Porte-Plume aktiviert ist.',
-       'option_inserer_barre_label' => 'Symbolleiste einfügen',
-       'option_label_case_label' => 'Bezeichnung neben dem Feld',
-       'option_label_explication' => 'Anzeigetitel',
-       'option_label_label' => 'Bezeichnung',
-       'option_label_non_explication' => 'Wird zusammen mit den Ergebnissen angezeigt.',
-       'option_label_non_label' => 'Bezeichnung für nicht markiertes Kästchen',
-       'option_label_oui_explication' => 'Wird mit den Ergebnissen angezeigt.',
-       'option_label_oui_label' => 'Bezeichnung bei markiertem Kästchen',
-       'option_limite_branche_explication' => 'Beschränkt die Auswahl auf eine bestimmte Hauptrubrik der Website',
-       'option_limite_branche_label' => 'Auf eine Hauptrubrik einschränken',
-       'option_maxlength_explication' => 'Der Besucher kann maximal diese Anzahl Zeichen eingeben',
-       'option_maxlength_label' => 'Zeichen maximal',
-       'option_multiple_explication' => 'Der Nutzer kann mehrere Optionen auswählen',
-       'option_multiple_label' => 'Mehrfachauswahl',
-       'option_nom_explication' => 'Reserviertes Wort für das Feld. Darf nur alphanumerische klein geschriebene und das Zeichen "_" (Unterstrich) enthalten.',
-       'option_nom_label' => 'Feldname',
-       'option_obligatoire_label' => 'Pflichtfeld',
-       'option_option_destinataire_intro_label' => 'Bezeichnung der ersten leeren Auswahl (bei Listenansicht)',
-       'option_option_intro_label' => 'Bezeichnung der ersten leeren Auswahl',
-       'option_option_statut_label' => 'Status anzeigen',
-       'option_placeholder_label' => 'Platzhalter',
-       'option_pliable_label' => 'Klappbar',
-       'option_pliable_label_case' => 'Die Feldgruppe kann zugeklappt werden',
-       'option_plie_label' => 'Bereits zugeklappt',
-       'option_plie_label_case' => 'Wen die Feldgruppe klappbar ist, wird sie beim Anzeigen des Formulars zunächst zugeklappt angezeigt.',
-       'option_previsualisation_explication' => 'Reiter "Vorschau" hinzufügen, wenn das Plugin Porte-Plume aktiviert ist.',
-       'option_previsualisation_label' => 'Vorschau aktivieren',
-       'option_readonly_explication' => 'Dieses Feld kann angezeigt aber nicht bearbeitet werden.',
-       'option_readonly_label' => 'Nur Lesen',
-       'option_rows_explication' => 'Höhe des Blocks in Zeilen. Diese Option ist nicht immer wirksam, da sie von individuellen CSS-Stilen abgeschaltet werden kann.',
-       'option_rows_label' => 'Anzahl Zeilen',
-       'option_size_explication' => 'Breite des Felds in Zeichen. Diese Option ist nicht immer wirksam, da sie durch individuelle CSS.Stile abgeschaltet werden kann.',
-       'option_size_label' => 'Feldgröße',
-       'option_statut_label' => 'Spezielle(r) Status',
-       'option_type_choix_plusieurs' => 'Auswahl <strong>mehrerer</strong> Empfänger erlauben',
-       'option_type_choix_tous' => '<strong>Alle</strong> diese Autoren als Empfänger hinzufügen. Der Besucher kann keine Auswahl treffen.',
-       'option_type_choix_un' => 'Besucher dürfen <strong>einen einzigen</strong> Empfänger aus der Liste auswählen.',
-       'option_type_choix_un_radio' => 'Dem Benutzer die Wahl <strong>eines einzigen</strong> Empfängers aus einer Liste ermöglichen.',
-       'option_type_explication' => 'Im "versteckten" Modus wird der Inhalt dieses Felds nicht angezeigt.',
-       'option_type_label' => 'Feldtyp',
-       'option_type_password' => 'Bei der Eingabe verborgener Text (z.B. Passwort)',
-       'option_type_text' => 'Normal',
-       'option_valeur_non_explication' => 'Wert der übergeben wird, wenn das Kästchen nicht ausgewählt wird. Achtung, es handelt sich um den technischen, nicht um den angezeigten Wert.',
-       'option_valeur_non_label' => 'Wert nein',
-       'option_valeur_oui_explication' => 'Wert der übergeben wird, wenn das Kästchen ausgewählt wird. Achtung, es handelt sich um den technischen, nicht um den angezeigten Wert.',
-       'option_valeur_oui_label' => 'Wert ja',
-
-       // P
-       'plugin_yaml_inactif' => 'Das Plugin YAML ist inaktiv. Sie müssen es einschalten, damit diese Seite funktioniert.',
-
-       // S
-       'saisie_auteurs_explication' => 'Ermöglicht einen oder mehrere Autoren auszuwählen',
-       'saisie_auteurs_titre' => 'Autoren',
-       'saisie_case_explication' => 'Ermöglicht Dinge zu aktivieren und deaktivieren',
-       'saisie_case_titre' => 'Nur eine Option',
-       'saisie_checkbox_explication' => 'Erlaubt mehrer Optionen auszuwählen',
-       'saisie_checkbox_titre' => 'Kästchen zum Abhaken',
-       'saisie_date_explication' => 'Datum aus Kalendarium auswählen',
-       'saisie_date_titre' => 'Datum',
-       'saisie_destinataires_explication' => 'Ermöglicht mehrere Empfänger aus den vorgeschlagenen Autoren auszuwählen',
-       'saisie_destinataires_titre' => 'Empfänger',
-       'saisie_email_explication' => 'Erlaubt die Nutzung eines Mail-Felds im HTML5-Format.',
-       'saisie_email_titre' => 'Mailadresse',
-       'saisie_explication_explication' => 'Allgemeine Beschreibung',
-       'saisie_explication_titre' => 'Beschreibung',
-       'saisie_fieldset_explication' => 'Ein Rahmen, der mehrere Felder enthalten kann',
-       'saisie_fieldset_titre' => 'Feldgruppe',
-       'saisie_file_explication' => 'Datei senden',
-       'saisie_file_titre' => 'Datei',
-       'saisie_hidden_explication' => 'Ein für den Nutzer unsichtbares, vorab ausgefülltes Feld',
-       'saisie_hidden_titre' => 'Verborgenes Feld',
-       'saisie_input_explication' => 'Eine einfache Textzeile, kann angezeigt oder ausgeblendet werden (Passwort)',
-       'saisie_input_titre' => 'Textzeile',
-       'saisie_mot_explication' => 'Ein oder mehrere Schlagwörter einer Gruppe',
-       'saisie_mot_titre' => 'Schlagwort',
-       'saisie_oui_non_explication' => 'Ja oder nein, alle klar ? :)',
-       'saisie_oui_non_titre' => 'Ja oder nein',
-       'saisie_radio_defaut_choix1' => 'Eins',
-       'saisie_radio_defaut_choix2' => 'Zwei',
-       'saisie_radio_defaut_choix3' => 'Drei',
-       'saisie_radio_explication' => 'Ermöglicht eine Option aus mehreren verfügbaren auszuwählen',
-       'saisie_radio_titre' => 'Radioknöpfe',
-       'saisie_selecteur_article' => 'Werkzeug zur Auswahl eines Artikels anzeigen',
-       'saisie_selecteur_article_titre' => 'Artikelwahl',
-       'saisie_selecteur_document' => 'Dateiauswahl-Dialog anzeigen',
-       'saisie_selecteur_document_titre' => 'Dateiauswahl-Dialog',
-       'saisie_selecteur_rubrique' => 'Werkzeug zur Auswahl einer Rubrik anzeigen',
-       'saisie_selecteur_rubrique_article' => 'Werkzeug zur Auswahl einer Rubrik oder eines Artikels anzeigen',
-       'saisie_selecteur_rubrique_article_titre' => 'Rubrik- oder Artikelwahl',
-       'saisie_selecteur_rubrique_titre' => 'Rubrikwahl',
-       'saisie_selection_explication' => 'Eine Option aus einer Drop-Down-Liste auswählen.',
-       'saisie_selection_multiple_explication' => 'Mehrere Optionen aus einer Liste auswählen',
-       'saisie_selection_multiple_titre' => 'Mehrfachauswahl',
-       'saisie_selection_titre' => 'Drop-Down-Liste',
-       'saisie_textarea_explication' => 'Mehrzeiliges Textfeld',
-       'saisie_textarea_titre' => 'Textblock',
-
-       // T
-       'titre_page_saisies_doc' => 'Documentation der Eingabefunktionen',
-       'tous_visiteurs' => 'Alle Besucher (auch nicht eingeschriebene)',
-       'tout_selectionner' => 'Alles aus/abwählen',
-
-       // V
-       'vue_sans_reponse' => '<i>Ohne Antwort</i>',
-
-       // Z
-       'z' => 'Zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_en.php b/www/plugins/saisies/lang/saisies_en.php
deleted file mode 100644 (file)
index d4ba721..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Browse through the article',
-       'bouton_parcourir_docs_breve' => 'Browse through the news item',
-       'bouton_parcourir_docs_rubrique' => 'Browse through the section',
-       'bouton_parcourir_mediatheque' => 'Browse through the multimedia library',
-
-       // C
-       'construire_action_annuler' => 'Cancel',
-       'construire_action_configurer' => 'Set up',
-       'construire_action_deplacer' => 'Move',
-       'construire_action_dupliquer' => 'Duplicate',
-       'construire_action_dupliquer_copie' => '(copy)',
-       'construire_action_supprimer' => 'Delete',
-       'construire_ajouter_champ' => 'Add a field',
-       'construire_ajouter_groupe' => 'Add a group',
-       'construire_attention_enregistrer' => 'Remember to save your changes!',
-       'construire_attention_modifie' => 'The form below is different from the initial form. You can reset it to the state before the changes.',
-       'construire_attention_supprime' => 'Your changes include deletions of fields. Please confirm the registration of the new version of the form.',
-       'construire_aucun_champs' => 'There is currently no field in this form.',
-       'construire_confirmer_supprimer_champ' => 'Do you really want to delete this field?',
-       'construire_info_nb_champs_masques' => '@nb@ hidden field(s) the time to set up the group.',
-       'construire_position_explication' => 'Specify before which other field this one should be placed.',
-       'construire_position_fin_formulaire' => 'At the end of the form',
-       'construire_position_fin_groupe' => 'At the end of the group @groupe@',
-       'construire_position_label' => 'Position of the field',
-       'construire_reinitialiser' => 'Reset form',
-       'construire_reinitialiser_confirmer' => 'You will lose all your changes. Are you sure you want to go back to the original form?',
-       'construire_verifications_aucune' => 'None',
-       'construire_verifications_label' => 'Type of verification to be performed',
-
-       // E
-       'erreur_generique' => 'There are errors in the fields below, please check your inputs',
-       'erreur_option_nom_unique' => 'This name is already used by another field and it must be unique in this form.',
-
-       // I
-       'info_configurer_saisies' => 'Test page for Entries',
-
-       // L
-       'label_annee' => 'Year',
-       'label_jour' => 'Day',
-       'label_mois' => 'Month',
-
-       // O
-       'option_aff_art_interface_explication' => 'Display only the articles in the user’s language',
-       'option_aff_art_interface_label' => 'Multilingual display',
-       'option_aff_langue_explication' => 'Display the selected language of the article or section before the title',
-       'option_aff_langue_label' => 'Display the language',
-       'option_aff_rub_interface_explication' => 'Display only the sections in the user’s language',
-       'option_aff_rub_interface_label' => 'Multilingual display',
-       'option_afficher_si_explication' => 'Indicate the display conditions of this field in function of the value of other fields. The identifier of the other fields has to be entered between <code>@</code>. <br />Example <code>@selection_1@=="Toto"</code> conditions the display of the field only when field <code>selection_1</code> has a value of <code>Toto</code>.',
-       'option_afficher_si_label' => 'Conditional display',
-       'option_afficher_si_remplissage_explication' => 'Other than the previous option, this one is only displayed while the form is being entered and not when the result is displayed. Its  syntax is the same.',
-       'option_afficher_si_remplissage_label' => 'Conditional display when being filled',
-       'option_attention_explication' => 'A message more important than the explanation.',
-       'option_attention_label' => 'Warning',
-       'option_attribut_title_label' => 'Put a title attribute in the label, containing the value of the field. Use with moderation.',
-       'option_autocomplete_defaut' => 'Leave the default',
-       'option_autocomplete_explication' => 'At page load, your browser may pre-fill the field based on its history',
-       'option_autocomplete_label' => 'Pre-fill the field',
-       'option_autocomplete_off' => 'Disable',
-       'option_autocomplete_on' => 'Enable',
-       'option_cacher_option_intro_label' => 'Hide the first empty choice',
-       'option_choix_alternatif_label' => 'Allow to propose an alternative choice',
-       'option_choix_alternatif_label_defaut' => 'Other choice',
-       'option_choix_alternatif_label_label' => 'Label for this alternative choice',
-       'option_choix_destinataires_explication' => 'One or several authors among which the user can make his choice. If nothing selected, it will be the author who installed the site to be chosen.',
-       'option_choix_destinataires_label' => 'Possible recipients',
-       'option_class_label' => 'Additional CSS Classes',
-       'option_cols_explication' => 'Field width in characters. This option is not always applied/used because the CSS styles of your site may override it.',
-       'option_cols_label' => 'Width',
-       'option_datas_explication' => 'You need to specify a choice for each row in the form of "key|label of the choice"',
-       'option_datas_label' => 'List of the available choices',
-       'option_datas_sous_groupe_explication' => 'You can indicate a choice by line using the format "key|Label" of the choice. <br />You can indicate the start of a subgroup using the format "*Title of the subgroup". To end a subgroup you can start another one, or put a line containing "/*".',
-       'option_defaut_label' => 'Default value',
-       'option_disable_avec_post_explication' => 'Same as previous option position but still post value in a hidden field.',
-       'option_disable_avec_post_label' => 'Disabled but posted.',
-       'option_disable_explication' => 'The field can not get the focus.',
-       'option_disable_label' => 'Disable the field',
-       'option_erreur_obligatoire_explication' => 'You can customize the error message displayed to show an obligation (otherwise leave blank).',
-       'option_erreur_obligatoire_label' => 'Obligation message',
-       'option_explication_explication' => 'If necessary, a short sentence describing the subject field.',
-       'option_explication_label' => 'Explanation',
-       'option_groupe_affichage' => 'Display',
-       'option_groupe_description' => 'Description',
-       'option_groupe_utilisation' => 'Usage',
-       'option_groupe_validation' => 'Validation',
-       'option_heure_pas_explication' => 'When using the schedule, a menu is displayed to help enter hours and minutes. Here you can choose the time interval between each option (default 30 minutes).',
-       'option_heure_pas_label' => 'Interval of the minutes in the help menu of the input',
-       'option_horaire_label' => 'Schedule',
-       'option_horaire_label_case' => 'Allow to fill in the time',
-       'option_id_groupe_label' => 'Keyword group',
-       'option_info_obligatoire_explication' => 'You can modify the default indication of obligation: <i>[Obligatoire]</i>.',
-       'option_info_obligatoire_label' => 'Indication of obligation',
-       'option_inserer_barre_choix_edition' => 'complete editing toolbar',
-       'option_inserer_barre_choix_forum' => 'forums toolbar',
-       'option_inserer_barre_explication' => 'Insert a porte-plume toolbar if that tool is activated.',
-       'option_inserer_barre_label' => 'Insert a toolbar',
-       'option_label_case_label' => 'Label located beside the check box',
-       'option_label_explication' => 'The title that will be displayed.',
-       'option_label_label' => 'Label',
-       'option_label_non_explication' => 'Will be visible when displaying the results.',
-       'option_label_non_label' => 'Label if the box is not checked',
-       'option_label_oui_explication' => 'Will be visible when displaying the results.',
-       'option_label_oui_label' => 'Label if the box is checked',
-       'option_limite_branche_explication' => 'Limit the choice to one specific branch of the site',
-       'option_limite_branche_label' => 'Limit to one branch',
-       'option_maxlength_explication' => 'The user can not type more characters than this number.',
-       'option_maxlength_label' => 'Maximum number of characters',
-       'option_multiple_explication' => 'The user will be able to select several values',
-       'option_multiple_label' => 'Multiple selection',
-       'option_nom_explication' => 'A computer ID name that identifies the field. It may only contain lowercase alphanumeric characters or the underscore character "_".',
-       'option_nom_label' => 'Field name',
-       'option_obligatoire_label' => 'Required field',
-       'option_option_destinataire_intro_label' => 'Label of first choice empty (in list format)',
-       'option_option_intro_label' => 'Label for the first empty choice',
-       'option_option_statut_label' => 'Show the status',
-       'option_placeholder_label' => 'Placeholder',
-       'option_pliable_label' => 'Expandable',
-       'option_pliable_label_case' => 'The group of fields can be expanded or shrunk.',
-       'option_plie_label' => 'Already shrunk',
-       'option_plie_label_case' => 'If the group of fields can be expanded and shrunk, then this option will make it already shrink with the form displays.',
-       'option_previsualisation_explication' => 'If porte-plume is activated, add a tab to preview the appearance of the text entered.',
-       'option_previsualisation_label' => 'Activate previews',
-       'option_readonly_explication' => 'The field can be viewed, selected, but not modified.',
-       'option_readonly_label' => 'Read only',
-       'option_rows_explication' => 'Field height in lines. This option is not always applied/used because the CSS styles of your site can cancel it.',
-       'option_rows_label' => 'Lines number',
-       'option_size_explication' => 'Field width in characters. This option is not always applied/used because the CSS styles of your site can cancel it.',
-       'option_size_label' => 'Field size',
-       'option_statut_label' => 'Specific status',
-       'option_type_choix_plusieurs' => 'Allow the user to choose <strong>several</ strong> message recipients.',
-       'option_type_choix_tous' => 'Make <strong>all</ strong> these authors as recipients. The user will not have choice.',
-       'option_type_choix_un' => 'Allow the user to choose <strong>only one</strong> message recipient (as a dropdown list).',
-       'option_type_choix_un_radio' => 'Allow the user to select <strong>one single</strong> addressee (in checklist format).',
-       'option_type_explication' => 'In "disguised" mode, the field contents as typed will be replaced with asterisks.',
-       'option_type_label' => 'Field type',
-       'option_type_password' => 'Text, hidden during input (eg. password)',
-       'option_type_text' => 'Normal',
-       'option_valeur_non_explication' => 'Posted value if the checkbox is not selected. Attention, this is a technical value and not a displayed value.',
-       'option_valeur_non_label' => 'Value No',
-       'option_valeur_oui_explication' => 'Posted value if the checkbox is selected. Attention, this is a technical value and not a displayed value.',
-       'option_valeur_oui_label' => 'Value Yes',
-
-       // P
-       'plugin_yaml_inactif' => 'The YAML plugin is inactive. You must enable it for this page to be functional.',
-
-       // S
-       'saisie_auteurs_explication' => 'Allows you to select one or more authors',
-       'saisie_auteurs_titre' => 'Autors',
-       'saisie_case_explication' => 'Used to activate or deactivate a particular option.',
-       'saisie_case_titre' => 'Single check box',
-       'saisie_checkbox_explication' => 'Used to select several options using check boxes.',
-       'saisie_checkbox_titre' => 'Check boxes',
-       'saisie_date_explication' => 'Used to enter a date using a calendar tool',
-       'saisie_date_titre' => 'Date',
-       'saisie_destinataires_explication' => 'Used to select one or more recipients from among the pre-selected authors.',
-       'saisie_destinataires_titre' => 'Recipients',
-       'saisie_email_explication' => 'Allows to have an email type field in HTML5.',
-       'saisie_email_titre' => 'E-mail adress',
-       'saisie_explication_explication' => 'A general explanatory description.',
-       'saisie_explication_titre' => 'Explanation',
-       'saisie_fieldset_explication' => 'A frame which may include several fields.',
-       'saisie_fieldset_titre' => 'Fieldset',
-       'saisie_file_explication' => 'Send a file',
-       'saisie_file_titre' => 'File',
-       'saisie_hidden_explication' => 'A pre-filled field that the user will never see.',
-       'saisie_hidden_titre' => 'Hidden field',
-       'saisie_input_explication' => 'A simple line of text that can be visible or hidden (password).',
-       'saisie_input_titre' => 'Textfield',
-       'saisie_mot_explication' => 'One or more keywords of a group',
-       'saisie_mot_titre' => 'Keyword',
-       'saisie_oui_non_explication' => 'Either a Yes or No response',
-       'saisie_oui_non_titre' => 'Yes or No',
-       'saisie_radio_defaut_choix1' => 'One',
-       'saisie_radio_defaut_choix2' => 'Two',
-       'saisie_radio_defaut_choix3' => 'Three',
-       'saisie_radio_explication' => 'Used to select one single option from several possibilities.',
-       'saisie_radio_titre' => 'Radio buttons',
-       'saisie_selecteur_article' => 'Display an article selection browser',
-       'saisie_selecteur_article_titre' => 'Article selector',
-       'saisie_selecteur_document' => 'Display a document selector',
-       'saisie_selecteur_document_titre' => 'Document selector',
-       'saisie_selecteur_rubrique' => 'Display a section selector browser',
-       'saisie_selecteur_rubrique_article' => 'Display an article or section selector browser',
-       'saisie_selecteur_rubrique_article_titre' => 'Article or section selector',
-       'saisie_selecteur_rubrique_titre' => 'Section selector',
-       'saisie_selection_explication' => 'Select an option from a dropdown list box.',
-       'saisie_selection_multiple_explication' => 'Used for selecting several options from a list.',
-       'saisie_selection_multiple_titre' => 'Multiple selection',
-       'saisie_selection_titre' => 'Dropdown list box',
-       'saisie_textarea_explication' => 'A multilines text field.',
-       'saisie_textarea_titre' => 'Textarea',
-
-       // T
-       'titre_page_saisies_doc' => 'Documentation of input fields',
-       'tous_visiteurs' => 'All visitors (even if not registered)',
-       'tout_selectionner' => '(Un)select all',
-
-       // V
-       'vue_sans_reponse' => '<i>(no data entered)</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_es.php b/www/plugins/saisies/lang/saisies_es.php
deleted file mode 100644 (file)
index 5040c8b..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Buscar artículo',
-       'bouton_parcourir_docs_breve' => 'Buscar breve',
-       'bouton_parcourir_docs_rubrique' => 'Buscar la sección',
-       'bouton_parcourir_mediatheque' => 'Examinar mediateca',
-
-       // C
-       'construire_action_annuler' => 'Anular',
-       'construire_action_configurer' => 'Configurar',
-       'construire_action_deplacer' => 'Mover',
-       'construire_action_dupliquer' => 'Duplicar',
-       'construire_action_dupliquer_copie' => '(copia)',
-       'construire_action_supprimer' => 'Eliminar',
-       'construire_ajouter_champ' => 'Añadir un campo',
-       'construire_ajouter_groupe' => 'Agregar un grupo',
-       'construire_attention_enregistrer' => '¡No olvide guardar sus cambios!',
-       'construire_attention_modifie' => 'Este formulario es diferente al original. Tiene la posibilidad de restablecerlo conforme a su estado inical. ',
-       'construire_attention_supprime' => 'Sus cambios implican suprimir campos. Confirme por favor esta nueva versión del formulario. ',
-       'construire_aucun_champs' => 'Actualmente no existen campos en este formulario. ',
-       'construire_confirmer_supprimer_champ' => '¿Desea eliminar realmente este campo?',
-       'construire_info_nb_champs_masques' => '@nb@ campo(s) oculto(s) el tiempo de configurar el grupo.',
-       'construire_position_explication' => 'Indique delante de qué otro campo se colocará.',
-       'construire_position_fin_formulaire' => 'Al final del formulario',
-       'construire_position_fin_groupe' => 'Al final del grupo @groupe@',
-       'construire_position_label' => 'Posición del campo',
-       'construire_reinitialiser' => 'Restablecer el formulario',
-       'construire_reinitialiser_confirmer' => 'Va a perder todos los cambios. ¿Está seguro de volver al formulario original?',
-       'construire_verifications_aucune' => 'Ninguna',
-       'construire_verifications_label' => 'Tipo de verificación a efectuar',
-
-       // E
-       'erreur_generique' => 'Hay errores en los siguientes campos, revise por favor sus entradas',
-       'erreur_option_nom_unique' => 'Este nombre ya ha sido utilizado en otro campo, y ha de ser único en el formulario.',
-
-       // I
-       'info_configurer_saisies' => 'Página de prueba de las entradas',
-
-       // L
-       'label_annee' => 'Año',
-       'label_jour' => 'Día',
-       'label_mois' => 'Mes',
-
-       // O
-       'option_aff_art_interface_explication' => 'Mostrar sólo los artículos en el idioma del usuario',
-       'option_aff_art_interface_label' => 'Aparencia multilingüe',
-       'option_aff_langue_explication' => 'Muestra el idioma del artículo o de la sección delante del título',
-       'option_aff_langue_label' => 'Mostrar el idioma',
-       'option_aff_rub_interface_explication' => 'Mostrar sólo las secciones en el idioma del usuario',
-       'option_aff_rub_interface_label' => 'Apariencia multilingüe',
-       'option_afficher_si_explication' => 'Indique las condiciones para mostrar el campo en función del valor de los otros campos. El identificador de los otros campos debe ser indicarse entre <code>@</code>. <br />Ejemplo <code>@selection_1@=="Toto"</code> condiciona la visualización del campo a que el campo <code>selection_1</code> tenga por valor <code>Toto</code>.',
-       'option_afficher_si_label' => 'Visualización condicional',
-       'option_afficher_si_remplissage_explication' => 'Contrariamente a la opción anterior, ésta condiciona la visualización sólo al rellenar el formulario, no al mostrar los resultados. La sintaxis es la misma.',
-       'option_afficher_si_remplissage_label' => 'presentación condicional durante el rellenado',
-       'option_attention_explication' => 'Un mensaje más importante que la explicación.',
-       'option_attention_label' => 'Aviso',
-       'option_autocomplete_defaut' => 'Dejar por defecto',
-       'option_autocomplete_explication' => 'Al cargar la página, su navegador puede rellenar el campo en función de su historial',
-       'option_autocomplete_label' => 'Pre-relleno del campo',
-       'option_autocomplete_off' => 'Desactivar',
-       'option_autocomplete_on' => 'Activar',
-       'option_cacher_option_intro_label' => 'Esconder la primera opción vacía',
-       'option_choix_alternatif_label' => 'Permitir proponer una elección alternativa',
-       'option_choix_alternatif_label_defaut' => 'Otra elección',
-       'option_choix_alternatif_label_label' => 'Etiqueta de esta elección alternativa',
-       'option_choix_destinataires_explication' => 'Uno o varios autores entre los cuales el autor podrá elegir. Si no se selecciona nada, será el autor que ha instalado el sitio el elegido. ',
-       'option_choix_destinataires_label' => 'Destinatarios posibles',
-       'option_class_label' => 'Clases CSS adicionales',
-       'option_cols_explication' => 'Ancho del bloque (en número de caracteres). Esta opción no se aplica siempre, porque puede ser cancelada por los estilos CSS de tu sitio.',
-       'option_cols_label' => 'Ancho',
-       'option_datas_explication' => 'Debe indicar una opción por línea bajo la forma "clave|Etiqueta de la opción"',
-       'option_datas_label' => 'Lista de opciones posibles',
-       'option_datas_sous_groupe_explication' => 'Debe indicar una opción por línea bajo la forma "clave|Etiqueta" de la opción". <br />Puede indicar el inicio de un subgrupo bajo la forma "*Título del subgrupo". Para terminar un subgrupo puede iniciar otro, o bien colocar una línea que contenga "/*".',
-       'option_defaut_label' => 'Valor por defecto',
-       'option_disable_avec_post_explication' => 'Como la opción anterior, pero publica el valor en un campo escondido.',
-       'option_disable_avec_post_label' => 'Deactivar pero enviar',
-       'option_disable_explication' => 'El campo ya no puede obtener el foco.',
-       'option_disable_label' => 'Deactivar el campo',
-       'option_erreur_obligatoire_explication' => 'Puede personalizar el mensaje de error mostrado para indicar una obligación (sino dejar en blanco).',
-       'option_erreur_obligatoire_label' => 'Mensaje de obligación',
-       'option_explication_explication' => 'Si hace falta, una frase corta que describe el campo',
-       'option_explication_label' => 'Explicación',
-       'option_groupe_affichage' => 'Apariencia',
-       'option_groupe_description' => 'Descripción',
-       'option_groupe_utilisation' => 'Uso',
-       'option_groupe_validation' => 'Validación',
-       'option_heure_pas_explication' => 'Cuando usa el horario, se muestra un menú para ayudar a introducir horas y minutos. Aquí puede elegir el intervalo de tiempo entre cada opción (por defecto 30 minutos).',
-       'option_heure_pas_label' => 'Intervalo de minutos en el menú de ayuda a la entrada',
-       'option_horaire_label' => 'Horario',
-       'option_horaire_label_case' => 'Permite introducir también la hora',
-       'option_id_groupe_label' => 'Grupo de palabras-claves',
-       'option_info_obligatoire_explication' => 'Puede modificar la indicación de campo obligatoria por defecto: <i>[Obligatorio</i>.',
-       'option_info_obligatoire_label' => 'Indicación de campo obligatorio',
-       'option_inserer_barre_choix_edition' => 'Barra de edición completa',
-       'option_inserer_barre_choix_forum' => 'barra de los foros',
-       'option_inserer_barre_explication' => 'Insertar una barra tipográfica si ésta está activada.',
-       'option_inserer_barre_label' => 'Insertar una barra de herramientas',
-       'option_label_case_label' => 'Etiqueta posicionada al lado de la casilla',
-       'option_label_explication' => 'El título que se mostrará.',
-       'option_label_label' => 'Etiqueta',
-       'option_limite_branche_explication' => 'Limitar la elección a una rama específica de un sitio', # RELIRE
-       'option_limite_branche_label' => 'Limitar a una rama',
-       'option_maxlength_explication' => 'El campo no podrá contener más caracteres que este número.',
-       'option_maxlength_label' => 'Número máximo de caracteres',
-       'option_multiple_explication' => 'Se podrán seleccionar varias opciones',
-       'option_multiple_label' => 'Selección múltiple',
-       'option_nom_explication' => 'Un nombre informático que identificará el campo. Sólo puede contener caracteres alfanuméricos minúsculos o el carácter "_".',
-       'option_nom_label' => 'Nombre del campo',
-       'option_obligatoire_label' => 'Campo obligatorio',
-       'option_option_destinataire_intro_label' => 'Etiqueta de la primera opción vacía (cuando esté en forma de lista)',
-       'option_option_intro_label' => 'Etiqueta de la primera opción vacía',
-       'option_option_statut_label' => 'Mostrar el estatus',
-       'option_pliable_label' => 'Desplegable',
-       'option_pliable_label_case' => 'El grupo de campos se podrá contraer y desplegar.',
-       'option_plie_label' => 'Ya está contraido',
-       'option_plie_label_case' => 'Si el grupo de campos se puede contraer, ya estará contraido cuando se enseñe el formulario.',
-       'option_previsualisation_explication' => 'Si la barra tipográfica es activa, añade una pestaña de previsualización del texto.',
-       'option_previsualisation_label' => 'Activar la previsualización',
-       'option_readonly_explication' => 'El campo se puede leer, seleccionar, pero no se puede modificar.',
-       'option_readonly_label' => 'Sólo lectura',
-       'option_rows_explication' => 'Altura del bloque en número de líneas. Esta opción no se aplica siempre, porque puede ser cancelada por los estilos CSS de su sitio.',
-       'option_rows_label' => 'Número de líneas',
-       'option_size_explication' => 'Ancho del campo (número de caracteres). Esta opción no se aplica siempre, porque puede ser cancelada por los estilos CSS del sitio.',
-       'option_size_label' => 'Tamaño del campo',
-       'option_type_choix_plusieurs' => 'Permitirle al usuario elegir <strong>varias</strong> personas destinatarias.',
-       'option_type_choix_tous' => 'Poner a <strong>todos</strong> estos autores como destinatarios. El usuario no tendrá ninguna opción.',
-       'option_type_choix_un' => 'Permitir al usuario elegir <strong>sólo una</strong> persona destinataria (en forma de lista desplegable).',
-       'option_type_choix_un_radio' => 'Permitir al usuario elegir <strong>sólo una</strong> persona destinataria (en forma de lista de viñetas).',
-       'option_type_explication' => 'En modo "escondido", el contenido del campo no será visible.',
-       'option_type_label' => 'Tipo del campo',
-       'option_type_password' => 'Texto escondido mientras tecleando (por ej. contraseña)',
-       'option_type_text' => 'Normal',
-       'option_valeur_non_label' => 'Sin valor', # RELIRE
-
-       // S
-       'saisie_auteurs_explication' => 'Permite seleccionar uno o más autores',
-       'saisie_auteurs_titre' => 'Autores',
-       'saisie_case_explication' => 'Permite activar o desactivar algo.',
-       'saisie_case_titre' => 'Casilla única',
-       'saisie_checkbox_explication' => 'Permite elegir varias opciones con las casillas a marcar.',
-       'saisie_checkbox_titre' => 'Casillas a marcar',
-       'saisie_date_explication' => '¿Permitir introducir una fecha? Ayuda de calendario',
-       'saisie_date_titre' => 'Fecha',
-       'saisie_destinataires_explication' => 'Permite elegir una o varias personas destinatarias entre las autoras preseleccionadas.',
-       'saisie_destinataires_titre' => 'Personas destinatarias',
-       'saisie_email_titre' => 'Dirección de correo electrónico',
-       'saisie_explication_explication' => 'Una explicación general.',
-       'saisie_explication_titre' => 'Explicación',
-       'saisie_fieldset_explication' => 'Un marco que podrá englobar varios campos.',
-       'saisie_fieldset_titre' => 'Grupo de campos',
-       'saisie_file_explication' => 'Mandar un archivo',
-       'saisie_file_titre' => 'Archivo',
-       'saisie_hidden_explication' => 'Un campo invisible, que ya contiene un valor',
-       'saisie_hidden_titre' => 'Campo escondido',
-       'saisie_input_explication' => 'Una sola línea de texto, que puede ser visible u ocultada (contraseña).',
-       'saisie_input_titre' => 'Línea de texto',
-       'saisie_mot_explication' => 'Una o varias palabras-claves de un grupo de palabras',
-       'saisie_mot_titre' => 'Palabra-clave',
-       'saisie_oui_non_explication' => 'Sí o no, ¿está claro? :)',
-       'saisie_oui_non_titre' => 'Sí o no',
-       'saisie_radio_defaut_choix1' => 'Uno',
-       'saisie_radio_defaut_choix2' => 'Dos',
-       'saisie_radio_defaut_choix3' => 'Tres',
-       'saisie_radio_explication' => 'Permite elegir una opción dentro de varias opciones disponibles.',
-       'saisie_radio_titre' => 'Botones de opción',
-       'saisie_selecteur_article' => 'Muestra un navegador de selección de artículo',
-       'saisie_selecteur_article_titre' => 'Selector de artículo',
-       'saisie_selecteur_document' => 'Muestra un selector de documento', # RELIRE
-       'saisie_selecteur_document_titre' => 'Documento selector ', # RELIRE
-       'saisie_selecteur_rubrique' => 'Muestra un navegador de selección de sección',
-       'saisie_selecteur_rubrique_article' => 'Muestra un navegador de selección de artículo o de sección',
-       'saisie_selecteur_rubrique_article_titre' => 'Selector de artículo o de sección',
-       'saisie_selecteur_rubrique_titre' => 'Selector de sección',
-       'saisie_selection_explication' => 'Elegir una opción dentro de una lista desplegable.',
-       'saisie_selection_multiple_explication' => 'Permite elegir varias opciones con una lista.',
-       'saisie_selection_multiple_titre' => 'Selección múltiple',
-       'saisie_selection_titre' => 'Lista desplegable',
-       'saisie_textarea_explication' => 'Un campo de texto sobre varias líneas.',
-       'saisie_textarea_titre' => 'Bloque de texto',
-
-       // T
-       'tous_visiteurs' => 'Todos los visitantes (incluso no registrados)',
-       'tout_selectionner' => 'Seleccionar todo', # MODIF
-
-       // V
-       'vue_sans_reponse' => '<i>Sin respuesta</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_fa.php b/www/plugins/saisies/lang/saisies_fa.php
deleted file mode 100644 (file)
index 6d721d4..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'مرور مقاله',
-       'bouton_parcourir_docs_breve' => 'مرور خبر',
-       'bouton_parcourir_docs_rubrique' => 'مرور بخش',
-       'bouton_parcourir_mediatheque' => 'مرور كتابخانه چندرسانه‌اي',
-
-       // L
-       'label_annee' => 'سال',
-       'label_jour' => 'روز',
-       'label_mois' => 'ماه',
-
-       // O
-       'option_aff_art_interface_explication' => 'نمايش مقالات فقط به زبان كاربر',
-       'option_aff_art_interface_label' => 'نمايش چندزبانه',
-       'option_aff_langue_explication' => 'نمايش زبان مقاله يا بخش انتخاب شده‌ پيش از تيتر',
-       'option_aff_langue_label' => 'نمايش زبان',
-       'option_aff_rub_interface_explication' => 'نمايش بخش‌ها فقط به زبان كاربر',
-       'option_aff_rub_interface_label' => 'نمايش چندزبانه',
-       'option_attention_explication' => 'پيامي مهم‌تر از توضيح.',
-       'option_attention_label' => 'هشدار',
-       'option_cacher_option_intro_label' => 'پنهان‌سازي نخستين انتخاب خالي ',
-       'option_choix_destinataires_explication' => 'يك يا چند نويسنده كه كاربر مي‌تواند از ميانشان انتخاب كند. اگر كسي انتخاب نشود،‌ نويسنده‌اي كه سايت را نصب كرده انتخاب خواهد شد.<NEW>Un ou plusieurs auteurs parmis lesquels l’utilisateur pourra faire son choix. Si rien n’est sélectionné, c’est l’auteur qui a installé le site qui sera choisi.',
-       'option_choix_destinataires_label' => '<دريافت‌ كنندگان محتمل',
-       'option_class_label' => 'كلاس‌هاي سي.اس.اس اضافي ',
-       'option_cols_explication' => 'پهناي بلوك به تعداد كارآكترها. اين گزينه هميشه كاربرد ندارد چرا كه شيوه‌هاي سي.اس.اس سايت شما مي‌تواند آن را منتفي سازد.',
-       'option_cols_label' => 'پهنا',
-       'option_datas_explication' => 'لازم است براي هر رديف يك گزينه در قالب «گزينه‌ي كليد|برچسبِ» انتخاب كنيد.', # MODIF
-       'option_datas_label' => 'فهرست گزينه‌هاي ممكن ',
-       'option_defaut_label' => 'مقدار پيش‌ گزيده',
-       'option_disable_avec_post_explication' => 'همانند وضعيت گزينه‌ي قبلي اما هنوز مقدار در ميدان مخفي پست شود.',
-       'option_disable_avec_post_label' => 'غيرفعال اما پست شده',
-       'option_disable_explication' => 'ميدان نمي‌‌تواند تمركز بيشتري بگيرد.',
-       'option_disable_label' => 'غيرفعال سازي ميدن',
-       'option_explication_explication' => 'در هنگام نياز، يك عبارت كوتاه موضوع ميدان را بيان كند.',
-       'option_explication_label' => 'توضيح',
-       'option_groupe_affichage' => 'نمايش ',
-       'option_groupe_description' => 'توصيف',
-       'option_groupe_utilisation' => 'كاربرد',
-       'option_groupe_validation' => 'ارزش‌گذاري',
-       'option_info_obligatoire_explication' => 'مي‌توانيد كاربرد پيش‌ گزيده‌ي الزامي را اصلاح كنيد: <i>[Obligatoire]</i>.',
-       'option_info_obligatoire_label' => 'نشان الزام',
-       'option_inserer_barre_choix_edition' => 'ميل‌ابزار ويرايش كامل ',
-       'option_inserer_barre_choix_forum' => 'ميل‌ابزار سخنگاه‌ها',
-       'option_inserer_barre_explication' => 'گنجاندن يك ميل‌‌ابزار «چوب قلم» «porte-plume» اگر آن ابزار فعال باشد.',
-       'option_inserer_barre_label' => 'گنجاندن يك ميل‌ابزار',
-       'option_label_case_label' => 'برچسب كنار چك باكس ',
-       'option_label_explication' => 'تيتري كه نمايش داده خواهد شد.',
-       'option_label_label' => 'برچسب',
-       'option_maxlength_explication' => 'كاربر نمي‌تواند كارآكترهايي بيش از اين تعداد تايپ كند.',
-       'option_maxlength_label' => 'تعداد بيشترين كارآكتر',
-       'option_multiple_explication' => 'توانايي كاربر در انتخاب چند مقدار',
-       'option_multiple_label' => 'چندگزينه‌اي',
-       'option_nom_explication' => 'يك اسم انفورماتيك كه اين ميدان را معرفي كند. اين اسم فقط بايد مركب از حروف كوچك و يا آندر لاين «_» باشد. ',
-       'option_nom_label' => 'اسم ميدان',
-       'option_obligatoire_label' => 'ميدان الزامي',
-       'option_option_intro_label' => 'برچسب نخستين گزينه‌ي خالي ',
-       'option_pliable_label' => 'گسترشي ',
-       'option_pliable_label_case' => 'گروه‌ ميدان‌هاي چين خور.',
-       'option_plie_label' => 'چين خورده',
-       'option_plie_label_case' => 'اگر گروه ميدان‌ها چين خور باشد، اين گزينه آن‌ها را در نمايش فرم چين خور كرده است. ',
-       'option_previsualisation_explication' => 'اگر چوب قلم فعال باشد، يك تب براي پيش‌ نمايش متن ورودي اضافه كن.',
-       'option_previsualisation_label' => 'فعال سازي پيش نمايش ',
-       'option_readonly_explication' => 'ميدان قابل مشاهده و گزينش، اما ناويرايشي.',
-       'option_readonly_label' => 'فقط خوانداني',
-       'option_rows_explication' => 'بلندي ميدان در پيوند‌ها. اين گزينه كاربردي/كاربستي نيست زيرا سي.اس.اس سايت شما آن را رد مي‌كند.',
-       'option_rows_label' => 'تعداد پيوندها',
-       'option_size_explication' => 'پهناي ميدان بر اساس تعدا كارآكتر. اين گزينه هميشه كاربردي/كاربستي نيست زيرا سي.اس.اس سايت شما آن را رد مي‌كند.',
-       'option_size_label' => 'اندازه‌ي ميدان',
-       'option_type_choix_plusieurs' => 'اجازه به كاربر در انتخاب <strong> چند</strong> دريافت كننده‌ي ايميل.',
-       'option_type_choix_tous' => '<strong>تمام</strong> مؤلفان دريافت‌كننده شوند. كاربر گزينه‌اي نخواهد داشت.',
-       'option_type_choix_un' => 'اجازه به كاربر براي گزينش <strong> فقط يك </strong> دريافت‌كننده ', # MODIF
-       'option_type_explication' => 'در حالت «پوشيده»، محتواي ميدان قابل رؤيت نخواهد بود. ',
-       'option_type_label' => 'نوع ميدان',
-       'option_type_password' => 'پوشيده', # MODIF
-       'option_type_text' => 'عادي',
-
-       // S
-       'saisie_case_explication' => 'فعال يا غيرفعال‌سازي يك گزينه‌ي مشخص.',
-       'saisie_case_titre' => 'تك چك‌ باكش',
-       'saisie_checkbox_explication' => 'اجازه‌ي گزينش چك‌ باكس چندگزينه‌اي.',
-       'saisie_checkbox_titre' => 'چك باكس‌ها',
-       'saisie_date_explication' => 'اجازه واردسازي داده با كمك تقويم',
-       'saisie_date_titre' => 'تاريخ',
-       'saisie_destinataires_explication' => 'اجازه‌ي گزينش يك يا چند دريافت كننده از ميان نويسندگان پيش‌ گزيده.',
-       'saisie_destinataires_titre' => 'دريافت‌ كنندگان',
-       'saisie_explication_explication' => 'يك متن توصيفي كلي.',
-       'saisie_explication_titre' => 'توصيف',
-       'saisie_fieldset_explication' => 'كادري كه ممكن است چند ميدان داشته باشد.',
-       'saisie_fieldset_titre' => 'گروه ميدان',
-       'saisie_file_explication' => 'ارسال پرونده',
-       'saisie_file_titre' => 'پرونده',
-       'saisie_hidden_explication' => 'ميدان از‌پيش‌‌ پُري كه بازديدكننده هرگز نخواهد ديد.',
-       'saisie_hidden_titre' => 'ميدان پوشيده',
-       'saisie_input_explication' => 'خط ساده‌اي از متن كه مي‌تواند پوشيده يا آشكار باشد (گذرواژه)',
-       'saisie_input_titre' => 'ميدان متني',
-       'saisie_oui_non_explication' => 'بله يا نه، روشن است؟ :)',
-       'saisie_oui_non_titre' => 'بله يا نه',
-       'saisie_radio_defaut_choix1' => 'يك ',
-       'saisie_radio_defaut_choix2' => 'دو',
-       'saisie_radio_defaut_choix3' => 'سه',
-       'saisie_radio_explication' => 'اجازه‌ي گزينش يك تك گزينه‌اي از ميان چند امكان.',
-       'saisie_radio_titre' => 'دكمه راديويي',
-       'saisie_selecteur_article' => 'نمايش يك مرورگر گزينش مقاله',
-       'saisie_selecteur_article_titre' => 'گزينشگر مقاله',
-       'saisie_selecteur_rubrique' => 'نمايش مرورگر گزينشگر مقاله',
-       'saisie_selecteur_rubrique_article' => 'نمايش مرورگر گزينشگر يك مقاله يا يك بخش',
-       'saisie_selecteur_rubrique_article_titre' => 'گزينشگر مقاله يا بخش',
-       'saisie_selecteur_rubrique_titre' => 'گزينشگر بخش',
-       'saisie_selection_explication' => 'گزينش يك گزينه از فهرست آبشاري.',
-       'saisie_selection_multiple_explication' => 'اجازه‌ي گزينش چند گزينه با يك فهرست.',
-       'saisie_selection_multiple_titre' => 'چندگزينه‌اي',
-       'saisie_selection_titre' => 'فهرست‌دان آبشاري ',
-       'saisie_textarea_explication' => 'ميدان متن چندخطي.',
-       'saisie_textarea_titre' => 'بلوك‌متن',
-
-       // T
-       'tous_visiteurs' => 'تمام بازديدكنندگان (حتي ثبت ‌نام ناشدگان)',
-
-       // V
-       'vue_sans_reponse' => '<i>بي‌ پاسخ</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_fr.php b/www/plugins/saisies/lang/saisies_fr.php
deleted file mode 100644 (file)
index 5d92e99..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/saisies/trunk/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Parcourir l’article',
-       'bouton_parcourir_docs_breve' => 'Parcourir la brève',
-       'bouton_parcourir_docs_rubrique' => 'Parcourir la rubrique',
-       'bouton_parcourir_mediatheque' => 'Parcourir la médiathèque',
-
-       // C
-       'construire_action_annuler' => 'Annuler',
-       'construire_action_configurer' => 'Configurer',
-       'construire_action_deplacer' => 'Déplacer',
-       'construire_action_dupliquer' => 'Dupliquer',
-       'construire_action_dupliquer_copie' => '(copie)',
-       'construire_action_supprimer' => 'Supprimer',
-       'construire_ajouter_champ' => 'Ajouter un champ',
-       'construire_ajouter_groupe' => 'Ajouter un groupe',
-       'construire_attention_enregistrer' => 'N’oubliez pas d’enregistrer vos modifications !',
-       'construire_attention_modifie' => 'Le formulaire ci-dessous est différent du formulaire initial. Vous avez la possibilité de le réinitialiser à son état avant vos modifications.',
-       'construire_attention_supprime' => 'Vos modifications comportent des suppressions de champs. Veuillez confirmer l’enregistrement de cette nouvelle version du formulaire.',
-       'construire_aucun_champs' => 'Il n’y a pour l’instant aucun champ dans ce formulaire.',
-       'construire_confirmer_supprimer_champ' => 'Voulez-vous vraiment supprimer ce champ ?',
-       'construire_info_nb_champs_masques' => '@nb@ champ(s) masqué(s) le temps de configurer le groupe.',
-       'construire_position_explication' => 'Indiquez devant quel autre champ sera placé celui-ci.',
-       'construire_position_fin_formulaire' => 'À la fin du formulaire',
-       'construire_position_fin_groupe' => 'À la fin du groupe @groupe@',
-       'construire_position_label' => 'Position du champ',
-       'construire_reinitialiser' => 'Réinitialiser le formulaire',
-       'construire_reinitialiser_confirmer' => 'Vous allez perdre toutes vos modifications. Êtes-vous sûr de vouloir revenir au formulaire initial ?',
-       'construire_verifications_aucune' => 'Aucune',
-       'construire_verifications_label' => 'Type de vérification à effectuer',
-
-       // E
-       'erreur_generique' => 'Il y a des erreurs dans les champs ci-dessous, veuillez vérifier vos saisies',
-       'erreur_option_nom_unique' => 'Ce nom est déjà utilisé par un autre champ et il doit être unique dans ce formulaire.',
-
-       // I
-       'info_configurer_saisies' => 'Page de test des Saisies',
-
-       // L
-       'label_annee' => 'Année',
-       'label_jour' => 'Jour',
-       'label_mois' => 'Mois',
-
-       // O
-       'option_aff_art_interface_explication' => 'Afficher uniquement les articles de la langue de l’utilisateur',
-       'option_aff_art_interface_label' => 'Affichage multilingue',
-       'option_aff_langue_explication' => 'Affiche la langue de l’article ou rubrique sélectionné devant le titre',
-       'option_aff_langue_label' => 'Afficher la langue',
-       'option_aff_rub_interface_explication' => 'Afficher uniquement les rubriques de la langue de l’utilisateur',
-       'option_aff_rub_interface_label' => 'Affichage multilingue',
-       'option_afficher_si_explication' => 'Indiquez les conditions pour afficher le champ en fonction de la valeur des autres champs. L’identifiant des autres champs doit être mis entre <code>@</code>. <br />Exemple <code>@selection_1@=="Toto"</code> conditionne l’affichage du champ à ce que le champ <code>selection_1</code> ait pour valeur <code>Toto</code>.',
-       'option_afficher_si_label' => 'Affichage conditionnel',
-       'option_afficher_si_remplissage_explication' => 'Contrairement à la précédente option, celle-ci ne conditionne l’affichage que lors du remplissage du formulaire, pas lors de l’affichage des résultats. Sa syntaxe est la même.',
-       'option_afficher_si_remplissage_label' => 'Affichage conditionnel lors du remplissage',
-       'option_attention_explication' => 'Un message plus important que l’explication.',
-       'option_attention_label' => 'Avertissement',
-       'option_attribut_title_label' => 'Mettre un attribut title dans le label, contenant la valeur du champ. À utiliser avec modération.',
-       'option_autocomplete_defaut' => 'Laisser par défaut',
-       'option_autocomplete_explication' => 'Au chargement de la page, votre navigateur peut pré-remplir le champ en fonction de son historique',
-       'option_autocomplete_label' => 'Pré-remplissage du champ',
-       'option_autocomplete_off' => 'Désactiver',
-       'option_autocomplete_on' => 'Activer',
-       'option_cacher_option_intro_label' => 'Cacher le premier choix vide',
-       'option_choix_alternatif_label' => 'Permettre de proposer un choix alternatif',
-       'option_choix_alternatif_label_defaut' => 'Autre choix',
-       'option_choix_alternatif_label_label' => 'Label de ce choix alternatif',
-       'option_choix_destinataires_explication' => 'Un ou plusieurs auteurs parmis lesquels l’utilisateur pourra faire son choix. Si rien n’est sélectionné, c’est l’auteur qui a installé le site qui sera choisi.',
-       'option_choix_destinataires_label' => 'Destinataires possibles',
-       'option_class_label' => 'Classes CSS supplémentaires',
-       'option_cols_explication' => 'Largeur du bloc en nombre de caractères. Cette option n’est pas toujours appliquée car les styles CSS de votre site peuvent l’annuler.',
-       'option_cols_label' => 'Largeur',
-       'option_datas_explication' => 'Vous devez indiquez un choix par ligne sous la forme "cle|Label du choix"',
-       'option_datas_label' => 'Liste des choix possibles',
-       'option_datas_sous_groupe_explication' => 'Vous devez indiquez un choix par ligne sous la forme "cle|Label" du choix. <br />Vous pouvez indiquer le début d’un sous-groupe sous la forme "*Titre du sous-groupe". Pour finir un sous-groupe vous pouvez en entamez un autre, ou bien mettre une ligne contenant unique "/*".',
-       'option_defaut_label' => 'Valeur par défaut',
-       'option_disable_avec_post_explication' => 'Identique à l’option précédente mais poste quand même la valeur dans un champ caché.',
-       'option_disable_avec_post_label' => 'Désactiver mais poster',
-       'option_disable_explication' => 'Le champ ne peut plus obtenir le focus.',
-       'option_disable_label' => 'Désactiver le champ',
-       'option_erreur_obligatoire_explication' => 'Vous pouvez personnaliser le message d’erreur affiché pour indiquer l’obligation (sinon laisser vide).',
-       'option_erreur_obligatoire_label' => 'Message d’obligation',
-       'option_explication_explication' => 'Si besoin, une courte phrase décrivant l’objet du champ.',
-       'option_explication_label' => 'Explication',
-       'option_groupe_affichage' => 'Affichage',
-       'option_groupe_description' => 'Description',
-       'option_groupe_utilisation' => 'Utilisation',
-       'option_groupe_validation' => 'Validation',
-       'option_heure_pas_explication' => 'Lorsque vous utilisez l’horaire, un menu s’affiche pour aider à saisir heures et minutes. Vous pouvez ici choisir l’intervalle de temps entre chaque choix (par défaut 30min).',
-       'option_heure_pas_label' => 'Intervalle des minutes dans le menu d’aide à la saisie',
-       'option_horaire_label' => 'Horaire',
-       'option_horaire_label_case' => 'Permettre de saisir aussi l’horaire',
-       'option_id_groupe_label' => 'Groupe de mots',
-       'option_info_obligatoire_explication' => 'Vous pouvez modifier l’indication d’obligation par défaut : <i>[Obligatoire]</i>.',
-       'option_info_obligatoire_label' => 'Indication d’obligation',
-       'option_inserer_barre_choix_edition' => 'barre d’édition complète',
-       'option_inserer_barre_choix_forum' => 'barre des forums',
-       'option_inserer_barre_explication' => 'Insère une barre d’outils du porte-plume si ce dernier est activé.',
-       'option_inserer_barre_label' => 'Insérer une barre d’outils',
-       'option_label_case_label' => 'Label placé à côté de la case',
-       'option_label_explication' => 'Le titre qui sera affiché.',
-       'option_label_label' => 'Label',
-       'option_label_non_explication' => 'Sera visible lors de l’affichage des résultats.',
-       'option_label_non_label' => 'Label si la case n’est pas cochée',
-       'option_label_oui_explication' => 'Sera visible lors de l’affichage des résultats.',
-       'option_label_oui_label' => 'Label si la case est cochée',
-       'option_limite_branche_explication' => 'Limitera le choix à une branche spécifique du site',
-       'option_limite_branche_label' => 'Limiter à une branche',
-       'option_maxlength_explication' => 'L’utilisateur ne pourra pas taper plus de caractères que ce nombre.',
-       'option_maxlength_label' => 'Nombre de caractères maximum',
-       'option_multiple_explication' => 'L’utilisateur pourra sélectionner plusieurs valeurs',
-       'option_multiple_label' => 'Sélection multiple',
-       'option_nom_explication' => 'Un nom informatique qui identifiera le champ. Il ne doit contenir que des caractères alpha-numériques minuscules ou le caractère "_".',
-       'option_nom_label' => 'Nom du champ',
-       'option_obligatoire_label' => 'Champ obligatoire',
-       'option_option_destinataire_intro_label' => 'Label du premier choix vide (lorsque sous forme de liste)',
-       'option_option_intro_label' => 'Label du premier choix vide',
-       'option_option_statut_label' => 'Afficher les statuts',
-       'option_placeholder_label' => 'Placeholder',
-       'option_pliable_label' => 'Pliable',
-       'option_pliable_label_case' => 'Le groupe de champs pourra être replié.',
-       'option_plie_label' => 'Déjà plié',
-       'option_plie_label_case' => 'Si le groupe de champs est pliable, il sera déjà plié à l’affichage du formulaire.',
-       'option_previsualisation_explication' => 'Si le porte-plume est activé, ajoute un onglet pour prévisualiser le rendu du texte saisi.',
-       'option_previsualisation_label' => 'Activer la prévisualisation',
-       'option_readonly_explication' => 'Le champ peut être lu, sélectionné, mais pas modifié.',
-       'option_readonly_label' => 'Lecture seule',
-       'option_rows_explication' => 'Hauteur du bloc en nombre de ligne. Cette option n’est pas toujours appliquée car les styles CSS de votre site peuvent l’annuler.',
-       'option_rows_label' => 'Nombre de lignes',
-       'option_size_explication' => 'Largeur du champ en nombre de caractères. Cette option n’est pas toujours appliquée car les styles CSS de votre site peuvent l’annuler.',
-       'option_size_label' => 'Taille du champ',
-       'option_statut_label' => 'Statut(s) particulier(s)',
-       'option_type_choix_plusieurs' => 'Permettre à l’utilisateur de choisir <strong>plusieurs</strong> destinataires.',
-       'option_type_choix_tous' => 'Mettre <strong>tous</strong> ces auteurs en destinataires. L’utilisateur n’aura aucun choix.',
-       'option_type_choix_un' => 'Permettre à l’utilisateur de choisir <strong>un seul</strong> destinataire (sous forme de liste déroulante).',
-       'option_type_choix_un_radio' => 'Permettre à l’utilisateur de choisir <strong>un seul</strong> destinataire (sous forme de liste à puce).',
-       'option_type_explication' => 'En mode "masqué", le contenu du champ ne sera pas visible.',
-       'option_type_label' => 'Type du champ',
-       'option_type_password' => 'Texte masqué lors de la saisie (ex : mot de passe)',
-       'option_type_text' => 'Normal',
-       'option_valeur_non_explication' => 'Valeur postée si la case n’est pas cochée. Attention, il s’agit d’une valeur technique et non d’une valeur affichée.',
-       'option_valeur_non_label' => 'Valeur non',
-       'option_valeur_oui_explication' => 'Valeur postée si la case est cochée. Attention, il s’agit d’une valeur technique et non d’une valeur affichée.',
-       'option_valeur_oui_label' => 'Valeur oui',
-
-       // P
-       'plugin_yaml_inactif' => 'Le plugin YAML est inactif. Vous devez l’activer pour que cette page soit fonctionnelle.',
-
-       // S
-       'saisie_auteurs_explication' => 'Permet de sélectionner un ou plusieurs auteurs',
-       'saisie_auteurs_titre' => 'Auteurs',
-       'saisie_case_explication' => 'Permet d’activer ou de désactiver quelque chose.',
-       'saisie_case_titre' => 'Case unique',
-       'saisie_checkbox_explication' => 'Permet de choisir plusieurs options avec des cases.',
-       'saisie_checkbox_titre' => 'Cases à cocher',
-       'saisie_date_explication' => 'Permet de saisir une date ? l’aide d’un calendrier',
-       'saisie_date_titre' => 'Date',
-       'saisie_destinataires_explication' => 'Permet de choisir un ou plusieurs destinataires parmis des auteurs pré-sélectionné.',
-       'saisie_destinataires_titre' => 'Destinataires',
-       'saisie_email_explication' => 'Permet d’avoir un champ de type email en HTML5.',
-       'saisie_email_titre' => 'Adresse email',
-       'saisie_explication_explication' => 'Un texte explicatif général.',
-       'saisie_explication_titre' => 'Explication',
-       'saisie_fieldset_explication' => 'Un cadre qui pourra englober plusieurs champs.',
-       'saisie_fieldset_titre' => 'Groupe de champs',
-       'saisie_file_explication' => 'Envoi d’un fichier',
-       'saisie_file_titre' => 'Fichier',
-       'saisie_hidden_explication' => 'Un champ pré-rempli que l’utilisateur ne pourra pas voir.',
-       'saisie_hidden_titre' => 'Champ caché',
-       'saisie_input_explication' => 'Une simple ligne de texte, pouvant être visible ou masquée (mot de passe).',
-       'saisie_input_titre' => 'Ligne de texte',
-       'saisie_mot_explication' => 'Un ou plusieurs mots-clés d’un groupe de mot',
-       'saisie_mot_titre' => 'Mot-clé',
-       'saisie_oui_non_explication' => 'Oui ou non, c’est clair ? :)',
-       'saisie_oui_non_titre' => 'Oui ou non',
-       'saisie_radio_defaut_choix1' => 'Un',
-       'saisie_radio_defaut_choix2' => 'Deux',
-       'saisie_radio_defaut_choix3' => 'Trois',
-       'saisie_radio_explication' => 'Permet de choisir une option parmis plusieurs disponibles.',
-       'saisie_radio_titre' => 'Boutons radios',
-       'saisie_selecteur_article' => 'Affiche un navigateur de sélection d’article',
-       'saisie_selecteur_article_titre' => 'Sélecteur d’article',
-       'saisie_selecteur_document' => 'Affiche un sélecteur de document',
-       'saisie_selecteur_document_titre' => 'Sélecteur de document',
-       'saisie_selecteur_rubrique' => 'Affiche un navigateur de sélection de rubrique',
-       'saisie_selecteur_rubrique_article' => 'Affiche un navigateur de sélection d’article ou de rubrique',
-       'saisie_selecteur_rubrique_article_titre' => 'Sélecteur d’article ou rubrique',
-       'saisie_selecteur_rubrique_titre' => 'Sélecteur de rubrique',
-       'saisie_selection_explication' => 'Choisir une option dans une liste déroulante.',
-       'saisie_selection_multiple_explication' => 'Permet de choisir plusieurs options avec une liste.',
-       'saisie_selection_multiple_titre' => 'Sélection multiple',
-       'saisie_selection_titre' => 'Liste déroulante',
-       'saisie_textarea_explication' => 'Un champ de texte sur plusieurs lignes.',
-       'saisie_textarea_titre' => 'Bloc de texte',
-
-       // T
-       'titre_page_saisies_doc' => 'Documentation des saisies',
-       'tous_visiteurs' => 'Tous les visiteurs (même non enregistrés)',
-       'tout_selectionner' => 'Tout (dé)sélectionner',
-
-       // V
-       'vue_sans_reponse' => '<i>Sans réponse</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_fr_tu.php b/www/plugins/saisies/lang/saisies_fr_tu.php
deleted file mode 100644 (file)
index 6de3c82..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Parcourir l’article',
-       'bouton_parcourir_docs_breve' => 'Parcourir la brève',
-       'bouton_parcourir_docs_rubrique' => 'Parcourir la rubrique',
-       'bouton_parcourir_mediatheque' => 'Parcourir la médiathèque',
-
-       // C
-       'construire_action_annuler' => 'Annuler',
-       'construire_action_configurer' => 'Configurer',
-       'construire_action_deplacer' => 'Déplacer',
-       'construire_action_dupliquer' => 'Dupliquer',
-       'construire_action_dupliquer_copie' => '(copie)',
-       'construire_action_supprimer' => 'Supprimer',
-       'construire_ajouter_champ' => 'Ajouter un champ',
-       'construire_ajouter_groupe' => 'Ajouter un groupe',
-       'construire_attention_enregistrer' => 'N’oublie pas d’enregistrer tes modifications !',
-       'construire_attention_modifie' => 'Le formulaire ci-dessous est différent du formulaire initial. Tu as la possibilité de le réinitialiser à son état avant tes modifications.',
-       'construire_attention_supprime' => 'Tes modifications comportent des suppressions de champs. Confirme l’enregistrement de cette nouvelle version du formulaire.',
-       'construire_aucun_champs' => 'Il n’y a pour l’instant aucun champ dans ce formulaire.',
-       'construire_confirmer_supprimer_champ' => 'Veux-tu vraiment supprimer ce champ ?',
-       'construire_info_nb_champs_masques' => '@nb@ champ(s) masqué(s) le temps de configurer le groupe.',
-       'construire_position_explication' => 'Indique devant quel autre champ sera placé celui-ci.',
-       'construire_position_fin_formulaire' => 'À la fin du formulaire',
-       'construire_position_fin_groupe' => 'À la fin du groupe @groupe@',
-       'construire_position_label' => 'Position du champ',
-       'construire_reinitialiser' => 'Réinitialiser le formulaire',
-       'construire_reinitialiser_confirmer' => 'Tu vas perdre toutes tes modifications. Es-tu sûr de vouloir revenir au formulaire initial ?',
-       'construire_verifications_aucune' => 'Aucune',
-       'construire_verifications_label' => 'Type de vérification à effectuer',
-
-       // E
-       'erreur_generique' => 'Il y a des erreurs dans les champs ci-dessous, vérifie tes saisies',
-       'erreur_option_nom_unique' => 'Ce nom est déjà utilisé par un autre champ et il doit être unique dans ce formulaire.',
-
-       // I
-       'info_configurer_saisies' => 'Page de test des Saisies',
-
-       // L
-       'label_annee' => 'Année',
-       'label_jour' => 'Jour',
-       'label_mois' => 'Mois',
-
-       // O
-       'option_aff_art_interface_explication' => 'Afficher uniquement les articles de la langue de l’utilisateur',
-       'option_aff_art_interface_label' => 'Affichage multilingue',
-       'option_aff_langue_explication' => 'Affiche la langue de l’article ou rubrique sélectionné devant le titre',
-       'option_aff_langue_label' => 'Afficher la langue',
-       'option_aff_rub_interface_explication' => 'Afficher uniquement les rubriques de la langue de l’utilisateur',
-       'option_aff_rub_interface_label' => 'Affichage multilingue',
-       'option_afficher_si_explication' => 'Indique les conditions pour afficher le champ en fonction de la valeur des autres champs. L’identifiant des autres champs doit être mis entre <code>@</code>. <br />Exemple <code>@selection_1@=="Toto"</code> conditionne l’affichage du champ à ce que le champ <code>selection_1</code> ait pour valeur <code>Toto</code>.',
-       'option_afficher_si_label' => 'Affichage conditionnel',
-       'option_afficher_si_remplissage_explication' => 'Contrairement à la précédente option, celle-ci ne conditionne l’affichage que lors du remplissage du formulaire, pas lors de l’affichage des résultats. Sa syntaxe est la même.',
-       'option_afficher_si_remplissage_label' => 'Affichage conditionnel lors du remplissage',
-       'option_attention_explication' => 'Un message plus important que l’explication.',
-       'option_attention_label' => 'Avertissement',
-       'option_attribut_title_label' => 'Mettre un attribut title dans le label, contenant la valeur du champ. À utiliser avec modération.',
-       'option_autocomplete_defaut' => 'Laisser par défaut',
-       'option_autocomplete_explication' => 'Au chargement de la page, ton navigateur peut pré-remplir le champ en fonction de son historique',
-       'option_autocomplete_label' => 'Pré-remplissage du champ',
-       'option_autocomplete_off' => 'Désactiver',
-       'option_autocomplete_on' => 'Activer',
-       'option_cacher_option_intro_label' => 'Cacher le premier choix vide',
-       'option_choix_alternatif_label' => 'Permettre de proposer un choix alternatif',
-       'option_choix_alternatif_label_defaut' => 'Autre choix',
-       'option_choix_alternatif_label_label' => 'Label de ce choix alternatif',
-       'option_choix_destinataires_explication' => 'Un ou plusieurs auteurs parmis lesquels l’utilisateur pourra faire son choix. Si rien n’est sélectionné, c’est l’auteur qui a installé le site qui sera choisi.',
-       'option_choix_destinataires_label' => 'Destinataires possibles',
-       'option_class_label' => 'Classes CSS supplémentaires',
-       'option_cols_explication' => 'Largeur du bloc en nombre de caractères. Cette option n’est pas toujours appliquée car les styles CSS de ton site peuvent l’annuler.',
-       'option_cols_label' => 'Largeur',
-       'option_datas_explication' => 'Tu dois indiquer un choix par ligne sous la forme "cle|Label du choix"',
-       'option_datas_label' => 'Liste des choix possibles',
-       'option_datas_sous_groupe_explication' => 'Tu dois indiquez un choix par ligne sous la forme "cle|Label" du choix. <br />Tu peux indiquer le début d’un sous-groupe sous la forme "*Titre du sous-groupe". Pour finir un sous-groupe tu peux en entamez un autre, ou bien mettre une ligne contenant unique "/*".',
-       'option_defaut_label' => 'Valeur par défaut',
-       'option_disable_avec_post_explication' => 'Identique à l’option précédente mais poste quand même la valeur dans un champ caché.',
-       'option_disable_avec_post_label' => 'Désactiver mais poster',
-       'option_disable_explication' => 'Le champ ne peut plus obtenir le focus.',
-       'option_disable_label' => 'Désactiver le champ',
-       'option_erreur_obligatoire_explication' => 'Tu peux personnaliser le message d’erreur affiché pour indiquer l’obligation (sinon laisser vide).',
-       'option_erreur_obligatoire_label' => 'Message d’obligation',
-       'option_explication_explication' => 'Si besoin, une courte phrase décrivant l’objet du champ.',
-       'option_explication_label' => 'Explication',
-       'option_groupe_affichage' => 'Affichage',
-       'option_groupe_description' => 'Description',
-       'option_groupe_utilisation' => 'Utilisation',
-       'option_groupe_validation' => 'Validation',
-       'option_heure_pas_explication' => 'Lorsque tu utilises l’horaire, un menu s’affiche pour aider à saisir heures et minutes. Tu peux ici choisir l’intervalle de temps entre chaque choix (par défaut 30min).',
-       'option_heure_pas_label' => 'Intervalle des minutes dans le menu d’aide à la saisie',
-       'option_horaire_label' => 'Horaire',
-       'option_horaire_label_case' => 'Permettre de saisie aussi l’horaire',
-       'option_id_groupe_label' => 'Groupe de mots',
-       'option_info_obligatoire_explication' => 'Tu peux modifier l’indication d’obligation par défaut : <i>[Obligatoire]</i>.',
-       'option_info_obligatoire_label' => 'Indication d’obligation',
-       'option_inserer_barre_choix_edition' => 'barre d’édition complète',
-       'option_inserer_barre_choix_forum' => 'barre des forums',
-       'option_inserer_barre_explication' => 'Insère une barre d’outils du porte-plume si ce dernier est activé.',
-       'option_inserer_barre_label' => 'Insérer une barre d’outils',
-       'option_label_case_label' => 'Label placé à côté de la case',
-       'option_label_explication' => 'Le titre qui sera affiché.',
-       'option_label_label' => 'Label',
-       'option_limite_branche_explication' => 'Limitera le choix à une branche spécifique du site',
-       'option_limite_branche_label' => 'Limiter à une branche',
-       'option_maxlength_explication' => 'L’utilisateur ne pourra pas taper plus de caractères que ce nombre.',
-       'option_maxlength_label' => 'Nombre de caractères maximum',
-       'option_multiple_explication' => 'L’utilisateur pourra sélectionner plusieurs valeurs',
-       'option_multiple_label' => 'Sélection multiple',
-       'option_nom_explication' => 'Un nom informatique qui identifiera le champ. Il ne doit contenir que des caractères alpha-numériques minuscules ou le caractère "_".',
-       'option_nom_label' => 'Nom du champ',
-       'option_obligatoire_label' => 'Champ obligatoire',
-       'option_option_destinataire_intro_label' => 'Label du premier choix vide (lorsque sous forme de liste)',
-       'option_option_intro_label' => 'Label du premier choix vide',
-       'option_option_statut_label' => 'Afficher les statuts',
-       'option_placeholder_label' => 'Placeholder',
-       'option_pliable_label' => 'Pliable',
-       'option_pliable_label_case' => 'Le groupe de champs pourra être replié.',
-       'option_plie_label' => 'Déjà plié',
-       'option_plie_label_case' => 'Si le groupe de champs est pliable, il sera déjà plié à l’affichage du formulaire.',
-       'option_previsualisation_explication' => 'Si le porte-plume est activé, ajoute un onglet pour prévisualiser le rendu du texte saisi.',
-       'option_previsualisation_label' => 'Activer la prévisualisation',
-       'option_readonly_explication' => 'Le champ peut être lu, sélectionné, mais pas modifié.',
-       'option_readonly_label' => 'Lecture seule',
-       'option_rows_explication' => 'Hauteur du bloc en nombre de ligne. Cette option n’est pas toujours appliquée car les styles CSS de votre site peuvent l’annuler.',
-       'option_rows_label' => 'Nombre de lignes',
-       'option_size_explication' => 'Largeur du champ en nombre de caractères. Cette option n’est pas toujours appliquée car les styles CSS de ton site peuvent l’annuler.',
-       'option_size_label' => 'Taille du champ',
-       'option_statut_label' => 'Statut(s) particulier(s)',
-       'option_type_choix_plusieurs' => 'Permettre à l’utilisateur de choisir <strong>plusieurs</strong> destinataires.',
-       'option_type_choix_tous' => 'Mettre <strong>tous</strong> ces auteurs en destinataires. L’utilisateur n’aura aucun choix.',
-       'option_type_choix_un' => 'Permettre à l’utilisateur de choisir <strong>un seul</strong> destinataire.Permettre à l’utilisateur de choisir <strong>un seul</strong> destinataire (sous forme de liste déroulante).',
-       'option_type_choix_un_radio' => 'Permettre à l’utilisateur de choisir <strong>un seul</strong> destinataire (sous forme de liste à puce).',
-       'option_type_explication' => 'En mode "masqué", le contenu du champ ne sera pas visible.',
-       'option_type_label' => 'Type du champ',
-       'option_type_password' => 'Texte masqué lors de la saisie (ex : mot de passe)',
-       'option_type_text' => 'Normal',
-       'option_valeur_non_explication' => 'Valeur postée si le checkbox n’est pas sélectionné', # MODIF
-       'option_valeur_non_label' => 'Valeur non',
-       'option_valeur_oui_explication' => 'Valeur postée si le checkbox est sélectionné', # MODIF
-       'option_valeur_oui_label' => 'Valeur oui',
-
-       // S
-       'saisie_auteurs_explication' => 'Permet de sélectionner un ou plusieurs auteurs',
-       'saisie_auteurs_titre' => 'Auteurs',
-       'saisie_case_explication' => 'Permet d’activer ou de désactiver quelque chose.',
-       'saisie_case_titre' => 'Case unique',
-       'saisie_checkbox_explication' => 'Permet de choisir plusieurs options avec des cases.',
-       'saisie_checkbox_titre' => 'Cases à cocher',
-       'saisie_date_explication' => 'Permet de saisir une date ? l’aide d’un calendrier',
-       'saisie_date_titre' => 'Date',
-       'saisie_destinataires_explication' => 'Permet de choisir un ou plusieurs destinataires parmis des auteurs pré-sélectionné.',
-       'saisie_destinataires_titre' => 'Destinataires',
-       'saisie_email_explication' => 'Permet d’avoir un champ de type email en HTML5.',
-       'saisie_email_titre' => 'Adresse email',
-       'saisie_explication_explication' => 'Un texte explicatif général.',
-       'saisie_explication_titre' => 'Explication',
-       'saisie_fieldset_explication' => 'Un cadre qui pourra englober plusieurs champs.',
-       'saisie_fieldset_titre' => 'Groupe de champs',
-       'saisie_file_explication' => 'Envoi d’un fichier',
-       'saisie_file_titre' => 'Fichier',
-       'saisie_hidden_explication' => 'Un champ pré-rempli que l’utilisateur ne pourra pas voir.',
-       'saisie_hidden_titre' => 'Champ caché',
-       'saisie_input_explication' => 'Une simple ligne de texte, pouvant être visible ou masquée (mot de passe).',
-       'saisie_input_titre' => 'Ligne de texte',
-       'saisie_mot_explication' => 'Un ou plusieurs mots-clés d’un groupe de mot',
-       'saisie_mot_titre' => 'Mot-clé',
-       'saisie_oui_non_explication' => 'Oui ou non, c’est clair ? :)',
-       'saisie_oui_non_titre' => 'Oui ou non',
-       'saisie_radio_defaut_choix1' => 'Un',
-       'saisie_radio_defaut_choix2' => 'Deux',
-       'saisie_radio_defaut_choix3' => 'Trois',
-       'saisie_radio_explication' => 'Permet de choisir une option parmis plusieurs disponibles.',
-       'saisie_radio_titre' => 'Boutons radios',
-       'saisie_selecteur_article' => 'Affiche un navigateur de sélection d’article',
-       'saisie_selecteur_article_titre' => 'Sélecteur d’article',
-       'saisie_selecteur_document' => 'Affiche un sélecteur de document',
-       'saisie_selecteur_document_titre' => 'Sélecteur de document',
-       'saisie_selecteur_rubrique' => 'Affiche un navigateur de sélection de rubrique',
-       'saisie_selecteur_rubrique_article' => 'Affiche un navigateur de sélection d’article ou de rubrique',
-       'saisie_selecteur_rubrique_article_titre' => 'Sélecteur d’article ou rubrique',
-       'saisie_selecteur_rubrique_titre' => 'Sélecteur de rubrique',
-       'saisie_selection_explication' => 'Choisir une option dans une liste déroulante.',
-       'saisie_selection_multiple_explication' => 'Permet de choisir plusieurs options avec une liste.',
-       'saisie_selection_multiple_titre' => 'Sélection multiple',
-       'saisie_selection_titre' => 'Liste déroulante',
-       'saisie_textarea_explication' => 'Un champ de texte sur plusieurs lignes.',
-       'saisie_textarea_titre' => 'Bloc de texte',
-
-       // T
-       'tous_visiteurs' => 'Tous les visiteurs (même non enregistrés)',
-       'tout_selectionner' => 'Tout (dé)sélectionner',
-
-       // V
-       'vue_sans_reponse' => '<i>Sans réponse</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_it.php b/www/plugins/saisies/lang/saisies_it.php
deleted file mode 100644 (file)
index 97a8f3b..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=it
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Sfoglia l’articolo',
-       'bouton_parcourir_docs_breve' => 'Sfoglia la breve',
-       'bouton_parcourir_docs_rubrique' => 'Sfoglia la rubrica',
-       'bouton_parcourir_mediatheque' => 'Sfoglia la mediateca',
-
-       // C
-       'construire_action_annuler' => 'Annulla',
-       'construire_action_configurer' => 'Configura',
-       'construire_action_deplacer' => 'Sposta',
-       'construire_action_dupliquer' => 'Duplica',
-       'construire_action_dupliquer_copie' => '(copia)',
-       'construire_action_supprimer' => 'Elimina',
-       'construire_ajouter_champ' => 'Aggiungi un campo',
-       'construire_attention_enregistrer' => 'Non dimenticare di salvare le tue modifiche!',
-       'construire_attention_modifie' => 'Il modulo in oggetto è diverso dal modulo iniziale. Hai la possibilità di reinizializzare il suo stato a quello precedente alle modifiche.',
-       'construire_attention_supprime' => 'Le modifiche includono l’eliminazione di alcuni campi. Conferma il salvataggio di questa nuova versione del modulo.',
-       'construire_aucun_champs' => 'Al momento non è presente alcun campo in questo modulo.',
-       'construire_confirmer_supprimer_champ' => 'Vuoi veramente eliminare questo campo?',
-       'construire_info_nb_champs_masques' => '@nb@ campo(i) con maschera. Configura il gruppo.',
-       'construire_position_explication' => 'Indica prima di quale altro campo sarà spostato quello corrente.',
-       'construire_position_fin_formulaire' => 'Alla fine del modulo',
-       'construire_position_fin_groupe' => 'Alla fine del gruppo @groupe@',
-       'construire_position_label' => 'Posizione del campo',
-       'construire_reinitialiser' => 'Reinizializza il modulo',
-       'construire_reinitialiser_confirmer' => 'Perderai tutte le modifiche. Sei sicuro di voler tornare al modulo iniziale?',
-       'construire_verifications_aucune' => 'Nessuna',
-       'construire_verifications_label' => 'Tipo di verifica da effettuare',
-
-       // E
-       'erreur_generique' => 'Ci sono degli errori nei campi di seguito, si prega di verificare gli inserimenti',
-       'erreur_option_nom_unique' => 'Questo nome è già utilizzato da un altro campo e deve essere univoco all’interno del modulo.',
-
-       // I
-       'info_configurer_saisies' => 'Pagina di test di Saisies',
-
-       // L
-       'label_annee' => 'Anno',
-       'label_jour' => 'Giorno',
-       'label_mois' => 'Mese',
-
-       // O
-       'option_aff_art_interface_explication' => 'Mostra unicamente gli articoli della lingua dell’utente',
-       'option_aff_art_interface_label' => 'Visualizzazione multilingua',
-       'option_aff_langue_explication' => 'Mostra la lingua dell’articolo o della rubrica selezionata davanti al titolo',
-       'option_aff_langue_label' => 'Mostra la lingua',
-       'option_aff_rub_interface_explication' => 'Mostra unicamente le rubriche della lingua dell’utente',
-       'option_aff_rub_interface_label' => 'Visualizzazione multilingua',
-       'option_attention_explication' => 'Un messaggio più importante dei una spiegazione.',
-       'option_attention_label' => 'Avvertimento',
-       'option_autocomplete_defaut' => 'Lascia predefinito',
-       'option_autocomplete_explication' => 'Al caricamento della pagina, il tuo navigatore può preimpostare il campo in funzione della sua storia',
-       'option_autocomplete_label' => 'Preimpostazione del campo',
-       'option_autocomplete_off' => 'Disattiva',
-       'option_autocomplete_on' => 'Attiva',
-       'option_cacher_option_intro_label' => 'Nascondi la prima scelta vuota',
-       'option_choix_destinataires_explication' => 'Uno o più autori tra i quali l’utente potrà fare una scelta. Se non si seleziona niente, è l’autore che ha installato il sito che sarà scelto.',
-       'option_choix_destinataires_label' => 'Possibili destinatari',
-       'option_class_label' => 'Classi CSS supplementari',
-       'option_cols_explication' => 'Larghezza del blocco in numero di caratteri. Questa opzione non è sempre applicata poichè gli stili CSS la possono annullare.',
-       'option_cols_label' => 'Larghezza',
-       'option_datas_explication' => 'Indica una scelta per riga con il formato "chiave|Etichetta della scelta"', # MODIF
-       'option_datas_label' => 'Elenco delle scelte possibili',
-       'option_defaut_label' => 'Valore predefinito',
-       'option_disable_avec_post_explication' => 'Identica all’opzione precedente ma invia lo stesso il valore in un campo nascosto.',
-       'option_disable_avec_post_label' => 'Disattiva ma invia',
-       'option_disable_explication' => 'Il campo non può ottenere il focus.',
-       'option_disable_label' => 'Disattiva il campo',
-       'option_explication_explication' => 'Se necessario, una frase breve che descrive il campo.',
-       'option_explication_label' => 'Spiegazione',
-       'option_groupe_affichage' => 'Visualizzazione',
-       'option_groupe_description' => 'Descrizione',
-       'option_groupe_utilisation' => 'Utilizzazione',
-       'option_groupe_validation' => 'Validazione',
-       'option_info_obligatoire_explication' => 'Puoi modificare l’indicazione predefinita per i campi obbligatori : <i>[Obbligatorio]</i>.',
-       'option_info_obligatoire_label' => 'Indicazione obbligatorio',
-       'option_inserer_barre_choix_edition' => 'barra del testo completa',
-       'option_inserer_barre_choix_forum' => 'barra dei forum',
-       'option_inserer_barre_explication' => 'Inserisci una barra del testo se disponibile (porte-plume attivo).',
-       'option_inserer_barre_label' => 'Inserisci una barra di utility',
-       'option_label_case_label' => 'Etichetta a lato della casella',
-       'option_label_explication' => 'Il titolo che sarà mostrato.',
-       'option_label_label' => 'Etichetta',
-       'option_maxlength_explication' => 'L’utente non può digiatare più caratteri del numero qui indicato.',
-       'option_maxlength_label' => 'Numero massimo di caratteri',
-       'option_multiple_explication' => 'L’utente può selezionare più valori',
-       'option_multiple_label' => 'Scelta multipla',
-       'option_nom_explication' => 'Un nome informatico che indentifica il campo. Deve contentere solo caratteri alfanumerici minuscoli o il carattere "_".',
-       'option_nom_label' => 'Nome del campo',
-       'option_obligatoire_label' => 'Campo obbligatorio',
-       'option_option_intro_label' => 'Etichetta del primo campo vuoto',
-       'option_option_statut_label' => 'Mostra gli stati',
-       'option_pliable_label' => 'Richiudibile',
-       'option_pliable_label_case' => 'Il gruppo di campi può essere chiuso.',
-       'option_plie_label' => 'Già chiuso',
-       'option_plie_label_case' => 'Se il gruppo di campi è richiudibile, sarà già chiuso alla visualizzazione del modulo.',
-       'option_previsualisation_explication' => 'Se porte-plume è attivo, aggiungi una scheda per previsualizzare la resa del testo inserito.',
-       'option_previsualisation_label' => 'Attiva la previsualizzazione',
-       'option_readonly_explication' => 'Il campo può essere letto, selezionato, ma non modificato.',
-       'option_readonly_label' => 'Sola lettura',
-       'option_rows_explication' => 'Altezza del blocco in numero ri righe. Questa opzione non è sempre applicata poichè gli stili CSS del sito potrebbero annullarla.',
-       'option_rows_label' => 'Numero di righe',
-       'option_size_explication' => 'Larghezza del campo in numero di caratteri. Questa opzione non è sempre applicata poich%egrave; gli stili CSS del sito potrebbero annullarla.',
-       'option_size_label' => 'Dimensione del campo',
-       'option_type_choix_plusieurs' => 'Consenti all’utente di scegliere <strong>più</strong> destinatari.',
-       'option_type_choix_tous' => 'Imposta <strong>tutti</strong> questi autori come destinatari. L’utente non avrà alcuna scelta.',
-       'option_type_choix_un' => 'Consenti all’utente di scegliere <strong>un solo</strong> destinatario.', # MODIF
-       'option_type_explication' => 'In modalità "mascherata", il contenuto del campo non sarà visibile.',
-       'option_type_label' => 'Tipo del campo',
-       'option_type_password' => 'Mascherato', # MODIF
-       'option_type_text' => 'Normale',
-
-       // S
-       'saisie_auteurs_explication' => 'Consente di selezionare uno o più autori',
-       'saisie_auteurs_titre' => 'Autori',
-       'saisie_case_explication' => 'Consente di attivare o disattivare qualcosa.',
-       'saisie_case_titre' => 'Casella di spunta',
-       'saisie_checkbox_explication' => 'Consente di scegliere più opzioni da spuntare.',
-       'saisie_checkbox_titre' => 'Caselle di spunta',
-       'saisie_date_explication' => 'Consente di inserire una data con l’aiuto di un calendario',
-       'saisie_date_titre' => 'Data',
-       'saisie_destinataires_explication' => 'Consente di scegliere uno o più destinatari tra gli autore selezionati.',
-       'saisie_destinataires_titre' => 'Destinatari',
-       'saisie_explication_explication' => 'Un testo esplicativo generale.',
-       'saisie_explication_titre' => 'Spiegazione',
-       'saisie_fieldset_explication' => 'Un blocco che può contenere più campi.',
-       'saisie_fieldset_titre' => 'Gruppo di campi',
-       'saisie_file_explication' => 'Invio di un file',
-       'saisie_file_titre' => 'File',
-       'saisie_hidden_explication' => 'Un campo preimpostato che l’utente non potrà vedere.',
-       'saisie_hidden_titre' => 'Campo nascosto',
-       'saisie_input_explication' => 'Una semplice riga di testo, che può essere visibile o mascherata (password).',
-       'saisie_input_titre' => 'Riga di testo',
-       'saisie_oui_non_explication' => 'Si o no',
-       'saisie_oui_non_titre' => 'Si o no',
-       'saisie_radio_defaut_choix1' => 'Uno',
-       'saisie_radio_defaut_choix2' => 'Due',
-       'saisie_radio_defaut_choix3' => 'Tre',
-       'saisie_radio_explication' => 'Consente di scegliere un’opzione tra più disponibili.',
-       'saisie_radio_titre' => 'Scelta unica',
-       'saisie_selecteur_article' => 'Mostra un navigatore per la selezione di un articolo',
-       'saisie_selecteur_article_titre' => 'Selettore d’articolo',
-       'saisie_selecteur_rubrique' => 'Mostra un navigatore per la selezione di una rubrica',
-       'saisie_selecteur_rubrique_article' => 'Mostra un navigatore per la selezione di un articolo o di una rubrica',
-       'saisie_selecteur_rubrique_article_titre' => 'Selettore d’articolo o rubrica',
-       'saisie_selecteur_rubrique_titre' => 'Selettore di rubrica',
-       'saisie_selection_explication' => 'Scegli una opzione nel menu a tendina.',
-       'saisie_selection_multiple_explication' => 'Consente di scegliere più opzioni con un elenco.',
-       'saisie_selection_multiple_titre' => 'Scelta multipla',
-       'saisie_selection_titre' => 'Menu a tendina',
-       'saisie_textarea_explication' => 'Un campo di testo su più linee.',
-       'saisie_textarea_titre' => 'Blocco di testo',
-
-       // T
-       'tous_visiteurs' => 'Tutti gli utenti (anche non registrati)',
-
-       // V
-       'vue_sans_reponse' => '<i>Senza risposta</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_nl.php b/www/plugins/saisies/lang/saisies_nl.php
deleted file mode 100644 (file)
index 8d45781..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Blader door het artikel',
-       'bouton_parcourir_docs_breve' => 'Blader door het nieuwsbericht',
-       'bouton_parcourir_docs_rubrique' => 'Blader door de rubriek',
-       'bouton_parcourir_mediatheque' => 'Blader door de mediatheek',
-
-       // C
-       'construire_action_annuler' => 'Annuleren',
-       'construire_action_configurer' => 'Instellen',
-       'construire_action_deplacer' => 'Verplaats',
-       'construire_action_dupliquer' => 'Kopieer',
-       'construire_action_dupliquer_copie' => '(copy)',
-       'construire_action_supprimer' => 'Verwijder',
-       'construire_ajouter_champ' => 'Voeg veld toe',
-       'construire_ajouter_groupe' => 'Een groep toevoegen',
-       'construire_attention_enregistrer' => 'Sla je wijzingen op!',
-       'construire_attention_modifie' => 'Het onderstaande formulier wijkt van het oorspronkelijke af. Je kunt het naar de oorspronkelijke staat herstellen.',
-       'construire_attention_supprime' => 'Je wijzigingen bevatten verwijderingen van velden. Bevestig de nieuwe formulierversie.',
-       'construire_aucun_champs' => 'Dit formulier heeft geen velden.',
-       'construire_confirmer_supprimer_champ' => 'Wil je dit veld echt verwijderen?',
-       'construire_info_nb_champs_masques' => '@nb@ verborgen veld(en) bij het opzetten van de groep.',
-       'construire_position_explication' => 'Geef aan voor welk veld dit veld moet worden geplaatst.',
-       'construire_position_fin_formulaire' => 'Aan het eind van het formulier',
-       'construire_position_fin_groupe' => 'Aan het eind van groep @groupe@',
-       'construire_position_label' => 'Positie van het veld',
-       'construire_reinitialiser' => 'Formulier resetten',
-       'construire_reinitialiser_confirmer' => 'Je verliest alle aanpassingen. Weet je zeker dat je naar het originele formulier terug wilt?',
-       'construire_verifications_aucune' => 'Geen',
-       'construire_verifications_label' => 'Toe te passen verificatie',
-
-       // E
-       'erreur_generique' => 'Er zitten fouten in onderstaande velden. Controleer je invoer',
-       'erreur_option_nom_unique' => 'Deze naam wordt al door een ander veld gebruikt. Het moet binnen het formulier een unieke naam hebben.',
-
-       // I
-       'info_configurer_saisies' => 'Testbladzijde voor invoer',
-
-       // L
-       'label_annee' => 'Jaar',
-       'label_jour' => 'Dag',
-       'label_mois' => 'Maand',
-
-       // O
-       'option_aff_art_interface_explication' => 'Toon uitsluitend artikelen in de gebruikerstaal',
-       'option_aff_art_interface_label' => 'Meertalige display',
-       'option_aff_langue_explication' => 'Toon de gekozen taal voor de titel van het artikel of de rubriek',
-       'option_aff_langue_label' => 'Toon d etaal',
-       'option_aff_rub_interface_explication' => 'Toon alleen rubrieken in de gebruikerstaal',
-       'option_aff_rub_interface_label' => 'Meertalige display',
-       'option_afficher_si_explication' => 'Geef de voorwaarde op voor het vertonen van het veld in functie van de waarde van andere velden. De identificatie van de andere velden moet tussen <code>@</code> worden geplaatst. <br />Bijvoorbeeld <code>@selection_1@=="Toto"</code> geeft de voorwaarde aan dat het veld moet worden getoond wanneer veld <code>selection_1</code> de waarde <code>Toto</code> heeft.',
-       'option_afficher_si_label' => 'Tonen onder voorwaarde',
-       'option_afficher_si_remplissage_explication' => 'In tegenstelling met de vorige optie verschijnt deze wanneer het formulier wordt getoond en niet wanneer de resultaten worden getoond. De syntax is dezelfde.',
-       'option_afficher_si_remplissage_label' => 'Tonen indien ingevuld',
-       'option_attention_explication' => 'Een boodschap die belangrijker is dan de uitleg.',
-       'option_attention_label' => 'Waarschuwing',
-       'option_attribut_title_label' => 'Zet een title attribuut op het label, dat de waarde van het veld bevat. Gebruiken met voorbehoud.',
-       'option_autocomplete_defaut' => 'Neem de standaardwaarde',
-       'option_autocomplete_explication' => 'Bij het laden kan de webbrowser de velden met historische informatie vullen',
-       'option_autocomplete_label' => 'Vul de velden vooraf in',
-       'option_autocomplete_off' => 'Niet',
-       'option_autocomplete_on' => 'Wel',
-       'option_cacher_option_intro_label' => 'Verberg de eerste lege keuze',
-       'option_choix_alternatif_label' => 'Toelaten een andere keuze voor te stellen',
-       'option_choix_alternatif_label_defaut' => 'Andere keuze',
-       'option_choix_alternatif_label_label' => 'Label voor deze alternatieve keuze',
-       'option_choix_destinataires_explication' => 'Een of meer auteurs waaruit de gebruiker kan kiezen. Standaard wordt de auteur die de site maakte gekozen.',
-       'option_choix_destinataires_label' => 'Mogelijke ontvangers',
-       'option_class_label' => 'Extra CSS Classes',
-       'option_cols_explication' => 'Veldbreedte in tekens. Deze optie kan door CSS overschreven worden.',
-       'option_cols_label' => 'Breedte',
-       'option_datas_explication' => 'Je moet voor elke rij in het formulier een keuze opgeven in het formaat "key|label of the choice"',
-       'option_datas_label' => 'Lijst van mogelijke keuzes',
-       'option_datas_sous_groupe_explication' => 'Je moet per regel een keuze aangeven in de vorm van "sleutel|Label" van de keuze. <br />Je kunt het begin van een subgroep aangeven met "*Titel van de subgroep". Om een subgroep af te sluiten kun je een nieuwe beginnen of een regel met uitsluitend "/*" invoegen.',
-       'option_defaut_label' => 'Standaardwaarde',
-       'option_disable_avec_post_explication' => 'Als de vorige optie maar de waarde gaat in een verborgen veld.',
-       'option_disable_avec_post_label' => 'Geblokkeerd maar gepost.',
-       'option_disable_explication' => 'Dit veld kan geen focus krijgen.',
-       'option_disable_label' => 'Blokkeer het veld',
-       'option_erreur_obligatoire_explication' => 'Hier kun je de standaard tekst voor een foutboodschap ivm verplichte invoer instellen (anders leeglaten).',
-       'option_erreur_obligatoire_label' => 'Bericht verplicht veld',
-       'option_explication_explication' => 'Indien nodig, een korte omschrijving van het betroffen veld.',
-       'option_explication_label' => 'Uitleg',
-       'option_groupe_affichage' => 'Weergave',
-       'option_groupe_description' => 'Omschrijving',
-       'option_groupe_utilisation' => 'Gebruik',
-       'option_groupe_validation' => 'Validatie',
-       'option_heure_pas_explication' => 'Een hulpmenu laat je het tijdstip in een uurrooster kiezen. Je kunt hier de tijdinterval tussen twee tijdstippen instellen (standaard 30 min).',
-       'option_heure_pas_label' => 'Interval in minuten in het hulpmenu',
-       'option_horaire_label' => 'Uurrooster',
-       'option_horaire_label_case' => 'Ook het uurrooster opnemen',
-       'option_id_groupe_label' => 'Trefwoordengroep',
-       'option_info_obligatoire_explication' => 'Je kan de standaard indicatie aanpassen van verplichting: <i>[Obligatoire]</i>.',
-       'option_info_obligatoire_label' => 'Indicatie verplichting',
-       'option_inserer_barre_choix_edition' => 'edit toolbar compleet',
-       'option_inserer_barre_choix_forum' => 'forum toolbar',
-       'option_inserer_barre_explication' => 'Voeg een porte-plume toolbar toe indien geactiveerd.',
-       'option_inserer_barre_label' => 'Voeg een toolbar toe',
-       'option_label_case_label' => 'Label staat naast de checkbox',
-       'option_label_explication' => 'De titel die zal worden weergegeven.',
-       'option_label_label' => 'Label',
-       'option_label_non_explication' => 'Zal bij weergave van de resultaten zichtbaar zijn.',
-       'option_label_non_label' => 'Label wanneer de checkbox niet is geselecteerd',
-       'option_label_oui_explication' => 'Zal bij weergave van de resultaten zichtbaar zijn.',
-       'option_label_oui_label' => 'Label wanneer de checkbox is geselecteerd',
-       'option_limite_branche_explication' => 'Beperk de keuze tot een specifieke tak van de site',
-       'option_limite_branche_label' => 'Tot één tak (hoofdrubriek) beperken',
-       'option_maxlength_explication' => 'De gebruikers kan niet meer tekens invoeren dan dit aantal.',
-       'option_maxlength_label' => 'Maximum aantal tekens',
-       'option_multiple_explication' => 'De gebruiker kan meerdere waardes kiezen',
-       'option_multiple_label' => 'Meerdere keuzes',
-       'option_nom_explication' => 'Een ID-naam dat het veld identificeert. Het mag bestaan uit kleine letters of een underscore teken "_".',
-       'option_nom_label' => 'Veldnaam',
-       'option_obligatoire_label' => 'Verplicht veld',
-       'option_option_destinataire_intro_label' => 'Label voor de eerste lege keuze (wanneer in lijstvorm)',
-       'option_option_intro_label' => 'Label voor de eerste lege keuze',
-       'option_option_statut_label' => 'Toon de status',
-       'option_placeholder_label' => 'Placeholder',
-       'option_pliable_label' => 'Uitvouwbaar',
-       'option_pliable_label_case' => 'De group velden kan worden uit- en ingevouwen.',
-       'option_plie_label' => 'Al ingevouwen',
-       'option_plie_label_case' => 'Als de groep kan worden in- en uitgevouwen, zorgt deze optie ervoor dat hij zal zijn ingevouwen wanneer het formulier wordt getoond.',
-       'option_previsualisation_explication' => 'Wanneer porte-plume actief is, wordt een preview tab toegevoegd.',
-       'option_previsualisation_label' => 'Preview activeren',
-       'option_readonly_explication' => 'Het veld kan worden bekeken, geselecteerd, maar niet worden aangepast.',
-       'option_readonly_label' => 'Alleen lezen',
-       'option_rows_explication' => 'Veldhoogte in regels. Deze optie kan door CSS worden overschreven.',
-       'option_rows_label' => 'Aantal regels',
-       'option_size_explication' => 'Veldbreedte in tekens. Deze optie kan door CSS worden overschreven.',
-       'option_size_label' => 'Veldbreedte',
-       'option_statut_label' => 'Specifieke status(sen)',
-       'option_type_choix_plusieurs' => 'Laat de gebruiker <strong>meerdere</ strong> ontvangers kiezen.',
-       'option_type_choix_tous' => 'Maak <strong>alle</strong> auteurs ontvanger. De gebruiker kan niet kiezen.',
-       'option_type_choix_un' => 'Laat de gebruiker <strong>een enkele</strong> ontvanger kiezen.',
-       'option_type_choix_un_radio' => 'Sta de gebruiker toe <strong>een enkele</strong> geadresseerde te kiezen (door middel van een lijst).',
-       'option_type_explication' => 'In "discrete" modus wordt de inhoud door sterretjes vervangen.',
-       'option_type_label' => 'Veldtype',
-       'option_type_password' => 'Verborgen tekst tijdens invoer (bv: wachtwoord)',
-       'option_type_text' => 'Normaal',
-       'option_valeur_non_explication' => 'Geposte waarde wanneer de checkbox niet wordt geselecteerd. Let op: het gaat om een technische waarde, niet om een weergegeven waarde.',
-       'option_valeur_non_label' => 'Waarde non',
-       'option_valeur_oui_explication' => 'Geposte waarde wanneer de checkbox is geselecteerd. Let op: het gaat om een technische waarde, niet om een weergegeven waarde.',
-       'option_valeur_oui_label' => 'Waarde oui',
-
-       // P
-       'plugin_yaml_inactif' => 'Plugin YAML is inactief. Je moet hem activeren om deze pagina te kunnen laten functioneren.',
-
-       // S
-       'saisie_auteurs_explication' => 'Laat je een of meer auteurs kiezen',
-       'saisie_auteurs_titre' => 'Auteurs',
-       'saisie_case_explication' => 'Activeer of disactiveer een bepaalde optie.',
-       'saisie_case_titre' => 'Enkele checkbox',
-       'saisie_checkbox_explication' => 'Voor het kiezen van verschillende opties met checkboxes.',
-       'saisie_checkbox_titre' => 'Checkboxes',
-       'saisie_date_explication' => 'Datuminvoer via een kalender-tool',
-       'saisie_date_titre' => 'Datum',
-       'saisie_destinataires_explication' => 'Voor het kiezen van een of meer ontvangers uit voorgeselecteerde auteurs.',
-       'saisie_destinataires_titre' => 'Ontvangers',
-       'saisie_email_explication' => 'Laat een veld van het type email toe in HTML5.',
-       'saisie_email_titre' => 'Email-adres',
-       'saisie_explication_explication' => 'Een algemene omschrijving.',
-       'saisie_explication_titre' => 'Uitleg',
-       'saisie_fieldset_explication' => 'Een kader dat meerdere velden kan bevatten.',
-       'saisie_fieldset_titre' => 'Fieldset',
-       'saisie_file_explication' => 'Zend een bestand',
-       'saisie_file_titre' => 'Bestand',
-       'saisie_hidden_explication' => 'Een vooraf ingevuld veld dat de gebruiker niet ziet.',
-       'saisie_hidden_titre' => 'Verborgen veld',
-       'saisie_input_explication' => 'Een enkele tekstregel die zichtbaar of verborgen (wachtwoord) kan zijn.',
-       'saisie_input_titre' => 'Tekstveld',
-       'saisie_mot_explication' => 'Een of meer trefwoorden uit een groep',
-       'saisie_mot_titre' => 'Trefwoord',
-       'saisie_oui_non_explication' => 'Ja of nee antwoord',
-       'saisie_oui_non_titre' => 'Ja of Nee',
-       'saisie_radio_defaut_choix1' => 'Een',
-       'saisie_radio_defaut_choix2' => 'Twee',
-       'saisie_radio_defaut_choix3' => 'Drie',
-       'saisie_radio_explication' => 'Voor het kiezen van een enkele optie uit meerder mogelijkheden.',
-       'saisie_radio_titre' => 'Radio knop',
-       'saisie_selecteur_article' => 'Toon een artikelkeuze',
-       'saisie_selecteur_article_titre' => 'Artikelkeuze',
-       'saisie_selecteur_document' => 'Toont een documentkeuze',
-       'saisie_selecteur_document_titre' => 'Documentkiezer',
-       'saisie_selecteur_rubrique' => 'Toon een rubriekkeuze',
-       'saisie_selecteur_rubrique_article' => 'Toon een artikel- of rubriekkeuze',
-       'saisie_selecteur_rubrique_article_titre' => 'Artikel- of rubriekkeuze',
-       'saisie_selecteur_rubrique_titre' => 'Rubriekkeuze',
-       'saisie_selection_explication' => 'Kies een waarde uit een dropdown list box.',
-       'saisie_selection_multiple_explication' => 'Voor het keizen van meerder waardes uit een lijst.',
-       'saisie_selection_multiple_titre' => 'Meerkeuze',
-       'saisie_selection_titre' => 'Dropdown listbox',
-       'saisie_textarea_explication' => 'Een tekstveld meet meerder regels.',
-       'saisie_textarea_titre' => 'Textarea',
-
-       // T
-       'titre_page_saisies_doc' => 'Documentatie van saisies',
-       'tous_visiteurs' => 'Alle bezoekers (ook niet-geregistreerde)',
-       'tout_selectionner' => 'Alles/niets selecteren',
-
-       // V
-       'vue_sans_reponse' => '<i>Zonder antwoord</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_pt_br.php b/www/plugins/saisies/lang/saisies_pt_br.php
deleted file mode 100644 (file)
index 1c2812b..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Procurar na matéria',
-       'bouton_parcourir_docs_breve' => 'Procurar na nota',
-       'bouton_parcourir_docs_rubrique' => 'Procurar na seção',
-       'bouton_parcourir_mediatheque' => 'Procurar na mídiateca',
-
-       // C
-       'construire_action_annuler' => 'Cancelar',
-       'construire_action_configurer' => 'Configurar',
-       'construire_action_deplacer' => 'Mover',
-       'construire_action_dupliquer' => 'Duplicar',
-       'construire_action_dupliquer_copie' => '(cópia)',
-       'construire_action_supprimer' => 'Excluir',
-       'construire_ajouter_champ' => 'Incluir um campo',
-       'construire_ajouter_groupe' => 'Incluir um grupo',
-       'construire_attention_enregistrer' => 'Lembre-se de gravar as suas alterações!',
-       'construire_attention_modifie' => 'O formulário abaixo é diferente do formulário inicial.Você tem a possibilidade de revertê-lo ao estado em que estava, antes das suas alterações.',
-       'construire_attention_supprime' => 'As suas alterações incluem exclusões de campos. Por favor, confirme a gravação desta nova versão do formulário.',
-       'construire_aucun_champs' => 'No momento, não há nenhum campo no formulário.',
-       'construire_confirmer_supprimer_champ' => 'Você quer realmente excluir este campo?',
-       'construire_info_nb_champs_masques' => '@nb@ campo(s) invisível(eis) o tempo de configurar o grupo.',
-       'construire_position_explication' => 'Indique qual campo este deve preceder.',
-       'construire_position_fin_formulaire' => 'No fim do formulário',
-       'construire_position_fin_groupe' => 'No fim do grupo @groupe@',
-       'construire_position_label' => 'Posição do campo',
-       'construire_reinitialiser' => 'Reverter o formulário',
-       'construire_reinitialiser_confirmer' => 'Você perderá todas as suas modificações. Quer realmente reverter à versão inicial do formulário?',
-       'construire_verifications_aucune' => 'Nenhuma',
-       'construire_verifications_label' => 'Tipo de verificação a ser usada',
-
-       // E
-       'erreur_generique' => 'Há erros nos campos abaixo. Por favor, verifique as informações digitadas',
-       'erreur_option_nom_unique' => 'Este nome já está sendo usado por outro campo e deve ser único, neste formulário.',
-
-       // I
-       'info_configurer_saisies' => 'Página de teste das entradas de dados',
-
-       // L
-       'label_annee' => 'Ano',
-       'label_jour' => 'Dia',
-       'label_mois' => 'Mês',
-
-       // O
-       'option_aff_art_interface_explication' => 'Exibir somente as matérias do idioma do usuário',
-       'option_aff_art_interface_label' => 'Exibição multilíngue',
-       'option_aff_langue_explication' => 'Exibe o idioma da matéria ou da seção selecionada antes do titulo',
-       'option_aff_langue_label' => 'Exibir o idioma',
-       'option_aff_rub_interface_explication' => 'Exibir apenas as seções do idioma do usuário',
-       'option_aff_rub_interface_label' => 'Exibição multilíngue',
-       'option_afficher_si_explication' => 'Informe as condições para exibir o campo, em função do valor de outros campos. O identificador dos outros campos deve ser inserido entre <code>@</code>.<br />
-Exemplo: code>@selection_1@=="Toto"</code> condiciona a exibição do campo a que o campo  <code>selection_1</code> tenha o valor <code>Toto</code>.',
-       'option_afficher_si_label' => 'Exibição condicional',
-       'option_afficher_si_remplissage_explication' => 'Ao contrário da opção anterior,  esta só condiciona a exibição enquanto o formulário está sendo respondido e não quando o resultado é exibido. Sua sintaxe é a mesma.',
-       'option_afficher_si_remplissage_label' => 'Exibição condicional durante o preenchimento',
-       'option_attention_explication' => 'Uma mensagem mais importante que a explicação.',
-       'option_attention_label' => 'Aviso',
-       'option_autocomplete_defaut' => 'Deixar por padrão',
-       'option_autocomplete_explication' => 'Ao carregar a página, o seu navegador pode preencher previamente o campo em função do seu histórico',
-       'option_autocomplete_label' => 'Preenchimento prévio do campo',
-       'option_autocomplete_off' => 'Desativar',
-       'option_autocomplete_on' => 'Ativar',
-       'option_cacher_option_intro_label' => 'Esconder a primeira opção em branco.',
-       'option_choix_alternatif_label' => 'Permitir a proposição de opção alternativa',
-       'option_choix_alternatif_label_defaut' => 'Outra opção',
-       'option_choix_alternatif_label_label' => 'Rótulo desta outra opção',
-       'option_choix_destinataires_explication' => 'Um ou mais autores que o usuário possa escolher. Se nada for selecionado, será selecionado o autor que instalou o site.',
-       'option_choix_destinataires_label' => 'Destinatários possíveis',
-       'option_class_label' => 'Classes CSS adicionais',
-       'option_cols_explication' => 'Largura do bloco (em números de caracteres). Este opção não é sempre aplicável, já que os estilos CSS do seu site podem se sobrepor.',
-       'option_cols_label' => 'Largura',
-       'option_datas_explication' => 'Você deve informar uma opção por linha,  no formato "chave|Rótulo da escolha"',
-       'option_datas_label' => 'Lista de opções aceitáveis',
-       'option_datas_sous_groupe_explication' => 'Você deve indicar uma opção por linha, no formato "chave|Rótulo" da opção.<br /> 
-Você pode indicar o início de um subgrupo, no formato "*Título do subgrupo". Para encerrar um subgrupo, você pode iniciar um outro ou inserir uma linha contendo apenas "/*".',
-       'option_defaut_label' => 'Valor padrão',
-       'option_disable_avec_post_explication' => 'Igual na opção anterior, mas envia ainda o valor dentro um campo escondido.',
-       'option_disable_avec_post_label' => 'Desativar mas enviar',
-       'option_disable_explication' => 'O campo não pode mais obter foco.',
-       'option_disable_label' => 'Desativar o campo',
-       'option_erreur_obligatoire_explication' => 'Você pode personalizar a mensagem de erro exibida para indicar a obrigatoriedade (se não, deixe em branco).',
-       'option_erreur_obligatoire_label' => 'Mensagem de obrigatoriedade',
-       'option_explication_explication' => 'Se necessário, uma frase curta descrevendo o objeto do campo.',
-       'option_explication_label' => 'Explicação',
-       'option_groupe_affichage' => 'Exibição',
-       'option_groupe_description' => 'Descrição',
-       'option_groupe_utilisation' => 'Utilização',
-       'option_groupe_validation' => 'Validação',
-       'option_heure_pas_explication' => 'Ao usar o horário, é exibido um menu para ajudar na entrada de horas e minutos. Você pode escolher o intervalo de tempo entre cada opção (30 min por padrão)',
-       'option_heure_pas_label' => 'Intervalo de minutos no menu de apoio à entrada de dados',
-       'option_horaire_label' => 'Horário',
-       'option_horaire_label_case' => 'Permitir informar também o horário',
-       'option_id_groupe_label' => 'Grupo de palavras',
-       'option_info_obligatoire_explication' => 'Você pode alterar o valor padrão da indicação de obrigatoriedade: <i>[Obrigatório]</i>.',
-       'option_info_obligatoire_label' => 'Indicação de obrigatoriedade',
-       'option_inserer_barre_choix_edition' => 'barra de formatação completa',
-       'option_inserer_barre_choix_forum' => 'barra dos fóruns',
-       'option_inserer_barre_explication' => 'Inserir uma barra de ferramentas da Pena, se o plugin estiver ativo.',
-       'option_inserer_barre_label' => 'Inserir uma barra de ferramentas ',
-       'option_label_case_label' => 'Rótulo localizado ao lado do checkbox',
-       'option_label_explication' => 'O titulo que será exibido.',
-       'option_label_label' => 'Rótulo',
-       'option_limite_branche_explication' => 'Limita a escolha a um ramo específico do site',
-       'option_limite_branche_label' => 'Limitar a um ramo',
-       'option_maxlength_explication' => 'O usuário não poderá digitar mais do que esse número de caracteres.',
-       'option_maxlength_label' => 'Número máximo de caracteres.',
-       'option_multiple_explication' => 'O usuário poderá selecionar vários valores.',
-       'option_multiple_label' => 'Seleção múltipla',
-       'option_nom_explication' => 'Um nome que identificará o campo.  Só pode conter letras minúsculas, números e o caracter "_".',
-       'option_nom_label' => 'Nome do campo',
-       'option_obligatoire_label' => 'Campo obrigatório',
-       'option_option_destinataire_intro_label' => 'Rótulo da primeira opção em branco (quando em formato de lista)',
-       'option_option_intro_label' => 'Rótulo da primeira opção em branco',
-       'option_option_statut_label' => 'Exibir os status',
-       'option_placeholder_label' => 'Marcador de posição',
-       'option_pliable_label' => 'Expansível',
-       'option_pliable_label_case' => 'O grupo de campos poderá ser expandido',
-       'option_plie_label' => 'Já retraído',
-       'option_plie_label_case' => 'Se o grupo de campos é expansível, ele já estará contraído na exibição do formulário.',
-       'option_previsualisation_explication' => 'Si o plugin Pena estiver ativo, adiciona uma aba para visualizar o texto digitado.',
-       'option_previsualisation_label' => 'Ativar a visualização',
-       'option_readonly_explication' => 'O campo pode ser lido, selecionado, mas não alterado.',
-       'option_readonly_label' => 'Só leitura',
-       'option_rows_explication' => 'Altura do bloco em número de linhas. Esta opção não é sempre aplicável, já que os estilos CSS do seu site poderão sobrepor-se.',
-       'option_rows_label' => 'Número de linhas',
-       'option_size_explication' => 'Largura do campo em número de caractéres. Esta opção não é sempre aplicável, já que os estilos CSS do seu site poderão sobrepor-se.',
-       'option_size_label' => 'Tamanho do campo',
-       'option_type_choix_plusieurs' => 'Permitir que o usuário escolha <strong>diversos</strong> destinatários.',
-       'option_type_choix_tous' => 'Incluir <strong>todos</strong> estes autores como destinatários. O usuário não terá nenhuma escolha.',
-       'option_type_choix_un' => 'Permitir ao usuário escolher <strong>um único</strong> destinatário (no formato de lista).',
-       'option_type_choix_un_radio' => 'Permite ao usuário escolher <strong>um único</strong> destinatário (no formato de checkboxes).',
-       'option_type_explication' => 'Em modo "mascarado", o conteúdo do campo não será mostrado.',
-       'option_type_label' => 'Tipo do campo',
-       'option_type_password' => 'Texto mascarado durante o preenchimento (ex: senha).',
-       'option_type_text' => 'Normal',
-       'option_valeur_non_explication' => 'Valor postado se o checkbox não estiver selecionado', # MODIF
-       'option_valeur_non_label' => 'Valor não',
-       'option_valeur_oui_explication' => 'VAlor postado se o checkbox estiver selecionado', # MODIF
-       'option_valeur_oui_label' => 'Valor sim',
-
-       // S
-       'saisie_auteurs_explication' => 'Permite selecionar um ou mais autores',
-       'saisie_auteurs_titre' => 'Autores',
-       'saisie_case_explication' => 'Permite ativar ou desativar algo.',
-       'saisie_case_titre' => 'Checkbox único',
-       'saisie_checkbox_explication' => 'Permite escolher varias opções com checkboxes.',
-       'saisie_checkbox_titre' => 'Checkboxes',
-       'saisie_date_explication' => 'Permite informar uma data com a ajuda do calendário.',
-       'saisie_date_titre' => 'Data',
-       'saisie_destinataires_explication' => 'Permite escolher um ou mais destinatários entre autores pré-selecionados.',
-       'saisie_destinataires_titre' => 'Destinatários',
-       'saisie_explication_explication' => 'Um texto explicativo geral.',
-       'saisie_explication_titre' => 'Explicação',
-       'saisie_fieldset_explication' => 'Uma área que poderá englobar vários campos.',
-       'saisie_fieldset_titre' => 'Grupo de campos',
-       'saisie_file_explication' => 'Envio de um arquivo',
-       'saisie_file_titre' => 'Arquivo',
-       'saisie_hidden_explication' => 'Um campo preenchido previamente, que o usuário não poderá ver.',
-       'saisie_hidden_titre' => 'Campo invisível',
-       'saisie_input_explication' => 'Uma simples linha de texto podendo ser visível ou mascarada (senha).',
-       'saisie_input_titre' => 'Linha de texto',
-       'saisie_mot_explication' => 'Uma ou mais palavras-chave de um grupo de palavras',
-       'saisie_mot_titre' => 'Palavra-chave',
-       'saisie_oui_non_explication' => 'Sim ou não, está claro? ;)',
-       'saisie_oui_non_titre' => 'Sim ou não',
-       'saisie_radio_defaut_choix1' => 'Um',
-       'saisie_radio_defaut_choix2' => 'Dois',
-       'saisie_radio_defaut_choix3' => 'Três',
-       'saisie_radio_explication' => 'Permite escolher uma opção entre várias disponíveis.',
-       'saisie_radio_titre' => 'Botões rádio',
-       'saisie_selecteur_article' => 'Exibe um navegador de seleção de matéria',
-       'saisie_selecteur_article_titre' => 'Seletor de matéria',
-       'saisie_selecteur_document' => 'Exibe um seletor de documento',
-       'saisie_selecteur_document_titre' => 'Seletor de documento',
-       'saisie_selecteur_rubrique' => 'Exibe um navegador de seleção de seção',
-       'saisie_selecteur_rubrique_article' => 'Exibe um navegador de seleção de matéria ou de seção',
-       'saisie_selecteur_rubrique_article_titre' => 'Seletor de matéria ou seção',
-       'saisie_selecteur_rubrique_titre' => 'Seletor de seção',
-       'saisie_selection_explication' => 'Escolher uma opção em uma lista',
-       'saisie_selection_multiple_explication' => 'Permite escolher várias opções em uma lista',
-       'saisie_selection_multiple_titre' => 'Seleção múltipla',
-       'saisie_selection_titre' => 'Lista',
-       'saisie_textarea_explication' => 'Um campo de texto em várias linhas.',
-       'saisie_textarea_titre' => 'Bloco de texto',
-
-       // T
-       'tous_visiteurs' => 'Todos os visitantes (mesmo os não registrados)',
-       'tout_selectionner' => 'Selecionar tudo', # MODIF
-
-       // V
-       'vue_sans_reponse' => '<i>Sem resposta</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_ru.php b/www/plugins/saisies/lang/saisies_ru.php
deleted file mode 100644 (file)
index 15bbf13..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Посмотреть статью',
-       'bouton_parcourir_docs_breve' => 'Посмотреть новость',
-       'bouton_parcourir_docs_rubrique' => 'Посмотреть раздел',
-       'bouton_parcourir_mediatheque' => 'Изменить библиотеку мультимедиа',
-
-       // C
-       'construire_action_annuler' => 'Отменить',
-       'construire_action_configurer' => 'Настройки',
-       'construire_action_deplacer' => 'Переместить',
-       'construire_action_dupliquer' => 'Скопировать',
-       'construire_action_dupliquer_copie' => '(копия)',
-       'construire_action_supprimer' => 'Удалить',
-       'construire_ajouter_champ' => 'Добавить поле',
-       'construire_attention_enregistrer' => 'Обязательно нажмите кнопку СОХРАНИТЬ, если вы что то изменяли!',
-       'construire_attention_modifie' => 'На этой странице у вас есть возможность редактировать форму. Чтобы вернуться к списку выбора форм, нажмите на кнопку ниже',
-       'construire_attention_supprime' => 'Изменения включают удаление полей. Пожалуйста, подтвердите регистрацию новой формы.',
-       'construire_aucun_champs' => 'На данный момент поля в форме отсутствуют',
-       'construire_confirmer_supprimer_champ' => 'Вы действительно хотите удалить это поле?',
-       'construire_info_nb_champs_masques' => '@nb@ скрытых полей',
-       'construire_position_explication' => 'На месте какого поля показывать?',
-       'construire_position_fin_formulaire' => 'В самом конце',
-       'construire_position_fin_groupe' => 'После группы @groupe@',
-       'construire_position_label' => 'Расположение',
-       'construire_reinitialiser' => 'Отменить изменения',
-       'construire_reinitialiser_confirmer' => 'Вы действительно хотите отменить все изменения? ',
-       'construire_verifications_aucune' => 'Не выполнять проверку',
-       'construire_verifications_label' => 'Тип проверки',
-
-       // E
-       'erreur_generique' => 'Вы допустили ошибку при заполнении полей формы. Проверьте корректность введенной информации',
-       'erreur_option_nom_unique' => 'Такое название поля уже используется.',
-
-       // I
-       'info_configurer_saisies' => 'Тестовая страница формы',
-
-       // L
-       'label_annee' => 'Год',
-       'label_jour' => 'День',
-       'label_mois' => 'Месяц',
-
-       // O
-       'option_aff_art_interface_explication' => 'Отображать только статьи в настройках языка пользователя',
-       'option_aff_art_interface_label' => 'Многоязычное отображение',
-       'option_aff_langue_explication' => 'Показать выбранный язык статьи или раздела перед названием',
-       'option_aff_langue_label' => 'Вывод языка статьи',
-       'option_aff_rub_interface_explication' => 'Отображать только разделы в языковых настройках пользователя.', # MODIF
-       'option_aff_rub_interface_label' => 'Многоязычное отображение',
-       'option_afficher_si_label' => 'Отображение по условию',
-       'option_afficher_si_remplissage_explication' => 'В отличие от предыдущего варианта, этот определяет отображение при заполнении формы, а не при просмотре результатов. Синтаксис такой же.',
-       'option_afficher_si_remplissage_label' => 'Условное отображение при заполнении',
-       'option_attention_explication' => 'Сообщение, которое является более важным, нежели комментарий.',
-       'option_attention_label' => 'Предупреждение',
-       'option_autocomplete_defaut' => 'Оставить по умолчанию',
-       'option_autocomplete_explication' => 'При загрузке страницы браузер может предварительно заполнить поля на основании истории',
-       'option_autocomplete_label' => 'Предварительное заполнение поля',
-       'option_autocomplete_off' => 'Отключить',
-       'option_autocomplete_on' => 'Включить',
-       'option_cacher_option_intro_label' => 'Скрыть первый пустой вариант',
-       'option_choix_alternatif_label' => 'Предложить альтернативный выбор',
-       'option_choix_alternatif_label_defaut' => 'Другой выбор',
-       'option_choix_alternatif_label_label' => 'Подпись для этого альтернативного выбора',
-       'option_choix_destinataires_explication' => 'Один или несколько авторов, среди которых пользователь может сделать свой ​​выбор. Если ничего не выбрано, то будет выбран автор по умолчанию (активный при инсталляции сайта).',
-       'option_choix_destinataires_label' => 'Возможные получатели',
-       'option_class_label' => 'Дополнительные CSS классы',
-       'option_cols_explication' => 'Длина поля в символах. Эта опция не всегда работает, так CSS стили сайта могут отменять заданное значение.',
-       'option_cols_label' => 'Ширина',
-       'option_datas_explication' => 'Задайте элементы списка в  формате: ключ|название опции',
-       'option_datas_label' => 'Значения списка',
-       'option_defaut_label' => 'Выводить по умолчанию',
-       'option_disable_avec_post_explication' => 'Такой же вариант как и предыдущий, но вносит значение в скрытое поле.', # MODIF
-       'option_disable_avec_post_label' => 'Отключено, но опубликовано.', # MODIF
-       'option_disable_explication' => 'Поле не может получить фокус',
-       'option_disable_label' => 'Отключить поле',
-       'option_erreur_obligatoire_explication' => 'Выводится, если поле не заполнено. Если оставить пустым - то выведется сообщение по умолчанию.', # MODIF
-       'option_erreur_obligatoire_label' => 'Сообщение о ошибке', # MODIF
-       'option_explication_explication' => 'Пояснение о назначении поля',
-       'option_explication_label' => 'Пояснение',
-       'option_groupe_affichage' => 'Вывод',
-       'option_groupe_description' => 'Основное',
-       'option_groupe_utilisation' => 'Свойства',
-       'option_groupe_validation' => 'Проверка',
-       'option_horaire_label' => 'Расписание',
-       'option_horaire_label_case' => 'Разрешить заполнить время',
-       'option_id_groupe_label' => 'Группа ключей',
-       'option_info_obligatoire_explication' => 'Вы можете изменить стандартные настройки обязательного заполнения полей.. ', # MODIF
-       'option_info_obligatoire_label' => 'Обязательное заполнение полей', # MODIF
-       'option_inserer_barre_choix_edition' => 'добавить полную панель',
-       'option_inserer_barre_choix_forum' => 'добавить сокращенную панель ',
-       'option_inserer_barre_explication' => 'Добавить панель для редактирования текста (кнопки стилей)?',
-       'option_inserer_barre_label' => 'Панель редактирования',
-       'option_label_case_label' => 'Позиция чекбокса', # MODIF
-       'option_label_explication' => 'Название поля', # MODIF
-       'option_label_label' => 'Название',
-       'option_maxlength_explication' => 'Максимальное к-во символов, которое можно ввести в поле:',
-       'option_maxlength_label' => 'Максимальное к-во символов',
-       'option_multiple_explication' => 'Пользователь сможет выбрать несколько вариантов',
-       'option_multiple_label' => 'Выбор нескольких значений',
-       'option_nom_explication' => 'Задать id поля. Латинские буквы, цифры и символ  "_". ',
-       'option_nom_label' => 'Название поля',
-       'option_obligatoire_label' => 'Обязательное поле',
-       'option_option_intro_label' => 'Название первого элемента списка',
-       'option_option_statut_label' => 'Показать статус',
-       'option_pliable_label' => 'Расширяемая',
-       'option_pliable_label_case' => 'Группа полей может быть развернута или сжата.',
-       'option_plie_label' => 'Уже сжато',
-       'option_plie_label_case' => 'Если группу полей можно расширить или сжать, тогда эта опция их сожмет с отображением полей.', # MODIF
-       'option_previsualisation_explication' => 'Добавить вкладку предварительного просмотра?',
-       'option_previsualisation_label' => 'Предварительный просмотр',
-       'option_readonly_explication' => 'Поле показывается, его можно выбрать, но нельзя изменить.',
-       'option_readonly_label' => 'Только для чтения',
-       'option_rows_explication' => 'Высота поля в строках. Эта опция не всегда работает, так CSS стили сайта могут отменять заданное значение.',
-       'option_rows_label' => 'Количество строк',
-       'option_size_explication' => 'Длина поля в символах. Эта опция не всегда работает, так CSS стили сайта могут отменять заданное значение.',
-       'option_size_label' => 'Размер поля',
-       'option_type_choix_plusieurs' => 'Позволяет выбрать <strong>несколько</strong> получателей.',
-       'option_type_choix_tous' => 'Отметить <strong>всех</strong> авторов как получателей. Пользователю выбор не предоставляется.',
-       'option_type_choix_un' => 'Сделать возможным выбор <strong>только одного</strong> получателя.',
-       'option_type_explication' => 'Если выбран «ввод пароля», то символы в поле будут превращаться в звездочки',
-       'option_type_label' => 'Тип поля',
-       'option_type_password' => 'Текст, скрываемый во время ввода (например, пароль)',
-       'option_type_text' => 'Обычный',
-
-       // S
-       'saisie_auteurs_explication' => 'Выбор автора из зарегистрированных на сайте',
-       'saisie_auteurs_titre' => 'Выбор автора',
-       'saisie_case_explication' => 'Используется для включения/отключения определенной опции.',
-       'saisie_case_titre' => 'Единичный выбор ',
-       'saisie_checkbox_explication' => 'Используется для выбора нескольких вариантов при помощи check-box.',
-       'saisie_checkbox_titre' => 'Чекбокс',
-       'saisie_date_explication' => 'Используется для ввода даты при помощи календаря.',
-       'saisie_date_titre' => 'Дата',
-       'saisie_destinataires_explication' => 'Используется для выбора одного или нескольких получателей из числа предварительно выбранных авторов.',
-       'saisie_destinataires_titre' => 'Получатели',
-       'saisie_explication_explication' => 'Используется для вывода поясняющей информации',
-       'saisie_explication_titre' => 'Пояснение',
-       'saisie_fieldset_explication' => 'FIELDSET. Используется для группировки полей ',
-       'saisie_fieldset_titre' => 'Филдсет',
-       'saisie_file_explication' => 'Отправить файл',
-       'saisie_file_titre' => 'Файл',
-       'saisie_hidden_explication' => 'Значение этого поля не отображается для пользователя. INPUT TYPE=HIDDEN',
-       'saisie_hidden_titre' => 'Невидимое (скрытое) поле',
-       'saisie_input_explication' => 'Основное поле для ввода информации',
-       'saisie_input_titre' => 'Текстовая строка',
-       'saisie_mot_explication' => 'Один или больше ключей из группы',
-       'saisie_mot_titre' => 'Ключи',
-       'saisie_oui_non_explication' => 'Выбор только одного варианта ответа: ДА или НЕТ',
-       'saisie_oui_non_titre' => 'Да или Нет',
-       'saisie_radio_defaut_choix1' => 'Один',
-       'saisie_radio_defaut_choix2' => 'Два',
-       'saisie_radio_defaut_choix3' => 'Три',
-       'saisie_radio_explication' => 'Используется для выбора одной опции из нескольких.',
-       'saisie_radio_titre' => 'Радио кнопка',
-       'saisie_selecteur_article' => 'Позволяет выбратью статью из структуры сайта',
-       'saisie_selecteur_article_titre' => 'Выбор статьи',
-       'saisie_selecteur_document' => 'Показать селектор документа',
-       'saisie_selecteur_document_titre' => 'Селектор документа',
-       'saisie_selecteur_rubrique' => 'Позволяет выбратью раздел из структуры сайта',
-       'saisie_selecteur_rubrique_article' => 'Позволяет выбратью статью или раздел из структуры сайта',
-       'saisie_selecteur_rubrique_article_titre' => 'Выбор статьи или раздела',
-       'saisie_selecteur_rubrique_titre' => 'Выбор раздела',
-       'saisie_selection_explication' => 'SELECT - позволяет выбрать один пункт из выпадающего списка',
-       'saisie_selection_multiple_explication' => 'SELECT - позволяет выбрать несколько пунктов из списка',
-       'saisie_selection_multiple_titre' => 'Выбор нескольких опций',
-       'saisie_selection_titre' => 'Выпадающий список',
-       'saisie_textarea_explication' => 'Textarea - для работы с текстом большого размера',
-       'saisie_textarea_titre' => 'Текстовое поле',
-
-       // T
-       'tous_visiteurs' => 'Все посетители (в том числе не зарегистрированные)',
-       'tout_selectionner' => 'Выбрать все', # MODIF
-
-       // V
-       'vue_sans_reponse' => '<i>ничего не задано</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/lang/saisies_sk.php b/www/plugins/saisies/lang/saisies_sk.php
deleted file mode 100644 (file)
index 2f523bd..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/saisies?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // B
-       'bouton_parcourir_docs_article' => 'Prehľadať článok',
-       'bouton_parcourir_docs_breve' => 'Prehľadať novinku',
-       'bouton_parcourir_docs_rubrique' => 'Prehľadať rubriku',
-       'bouton_parcourir_mediatheque' => 'Prehľadať knižnicu multimédií',
-
-       // C
-       'construire_action_annuler' => 'Zrušiť',
-       'construire_action_configurer' => 'Nastaviť',
-       'construire_action_deplacer' => 'Presunúť',
-       'construire_action_dupliquer' => 'Duplikovať',
-       'construire_action_dupliquer_copie' => '(kópia)',
-       'construire_action_supprimer' => 'Odstrániť',
-       'construire_ajouter_champ' => 'Pridať pole',
-       'construire_ajouter_groupe' => 'Pridať skupinu',
-       'construire_attention_enregistrer' => 'Nezabudnite uložiť zmeny!',
-       'construire_attention_modifie' => 'Tento formulár sa odlišuje od pôvodného. Máte možnosť ho obnoviť do stavu pred svojimi zmenami.',
-       'construire_attention_supprime' => 'Medzi vašimi zmenami je vymazanie niekoľkých polí. Potvrďte, prosím, registráciu tejto verzie formulára.',
-       'construire_aucun_champs' => 'V tomto formulári nie je momentálne žiadne pole',
-       'construire_confirmer_supprimer_champ' => 'Chcete odstrániť toto pole?',
-       'construire_info_nb_champs_masques' => '@nb@ skryté (-ých) pole (-í/-ia) času na nastavenie skupiny.',
-       'construire_position_explication' => 'Uveďte akékoľvek ďalšie pole predtým, ako sa vloží.',
-       'construire_position_fin_formulaire' => 'Na koniec formulára',
-       'construire_position_fin_groupe' => 'Na koniec skupiny @groupe@',
-       'construire_position_label' => 'Umiestnenie poľa',
-       'construire_reinitialiser' => 'Znova načítať formulár',
-       'construire_reinitialiser_confirmer' => 'Stratíte všetky svoje zmeny. Určite sa chcete vrátiť na pôvodný formulár?',
-       'construire_verifications_aucune' => 'Žiadne',
-       'construire_verifications_label' => 'Typ overenia, ktorý sa má vykonať',
-
-       // E
-       'erreur_generique' => 'V poliach sú chyby; prosím, skontrolujte údaje, ktoré ste zadali',
-       'erreur_option_nom_unique' => 'Tento názov už používa iné pole, a v tomto formulári musí byť jedinečný.',
-
-       // I
-       'info_configurer_saisies' => 'Testovacia stránka Saisies',
-
-       // L
-       'label_annee' => 'Rok',
-       'label_jour' => 'Deň',
-       'label_mois' => 'Mesiac',
-
-       // O
-       'option_aff_art_interface_explication' => 'Zobrazovať len články v jazyku používateľa',
-       'option_aff_art_interface_label' => 'Viacjazyčné zobrazenie',
-       'option_aff_langue_explication' => 'Pred názvom zobraziť vybratý jazyk článku alebo rubriky',
-       'option_aff_langue_label' => 'Zobraziť jazyk',
-       'option_aff_rub_interface_explication' => 'Zobraziť len rubriky v jazyku používateľa',
-       'option_aff_rub_interface_label' => 'Viacjazyčné zobrazenie',
-       'option_afficher_si_explication' => 'Uveďte podmienky zobrazenia poľa podľa hodnoty iných polí. Čísla iných polí musia byť medzi <code>@</code>. <br />Príklad <code>@selection_1@=="Toto"</code> prikazuje zobraziť pole, ktoré <code>selection_1</code> má hodnotu <code>Toto</code>.',
-       'option_afficher_si_label' => 'Podmienené zobrazenie',
-       'option_afficher_si_remplissage_explication' => 'V porovnaní s predchádzajúcou možnosťou táto podmienka sa týka zobrazenia formulára, nie jeho výsledkov. Jej syntax je rovnaká.',
-       'option_afficher_si_remplissage_label' => 'Podmienené zobrazenie pri vypĺňaní',
-       'option_attention_explication' => 'Správa je dôležitejšia ako vysvetlivka.',
-       'option_attention_label' => 'Varovanie',
-       'option_autocomplete_defaut' => 'Nechať ako predvolené',
-       'option_autocomplete_explication' => 'Pri nahrávaní stránky môže váš prehliadač automaticky vyplniť polia podľa histórie',
-       'option_autocomplete_label' => 'Automaticky vyplniť pole',
-       'option_autocomplete_off' => 'Deaktivovať',
-       'option_autocomplete_on' => 'Aktivovať',
-       'option_cacher_option_intro_label' => 'Skryť prvý prázdny výber',
-       'option_choix_alternatif_label' => 'Nastaviť možnosť vytvárania rozbaľovacích menu',
-       'option_choix_alternatif_label_defaut' => 'Iný výber',
-       'option_choix_alternatif_label_label' => 'Pomenovanie výberu z viacerých možností',
-       'option_choix_destinataires_explication' => 'Jeden autor alebo viacerí, z ktorých si používateľ môže vybrať. Ak nie je vybratý žiaden, vyberie sa autor, ktorý nainštaloval stránku.',
-       'option_choix_destinataires_label' => 'Možní príjemcovia',
-       'option_class_label' => 'Ďalšie triedy CSS',
-       'option_cols_explication' => 'Šírka poľa v znakoch. Táto možnosť sa vždy nepoužíva, lebo štýly CSS na vašej stránke ju môžu prepísať.',
-       'option_cols_label' => 'Šírka',
-       'option_datas_explication' => 'Musíte definovať výber pre každý riadok vo formulári "kľúč|označenie výberu"',
-       'option_datas_label' => 'Zoznam dostupných možností',
-       'option_datas_sous_groupe_explication' => 'Online výber musíte zadať vo forme "kľúč|menovka" výberu. <br />Môžete označiť začiatok podskupiny formulára "*Nadpis podskupiny". Skupinu môžete skončiť na riadku alebo do ďalšieho riadka môžete napísať len "/*".',
-       'option_defaut_label' => 'Predvolená hodnota',
-       'option_disable_avec_post_explication' => 'Rovnaká ako predošlá možnosť, ale hodnotu pošle v skrytom poli.',
-       'option_disable_avec_post_label' => 'Deaktivovať ale poslať.',
-       'option_disable_explication' => 'Na pole sa nedá zacieliť.',
-       'option_disable_label' => 'Deaktivovať pole',
-       'option_erreur_obligatoire_explication' => 'Zobrazovanú chybovú správu môžete upraviť tak, aby označovala povinnosť',
-       'option_erreur_obligatoire_label' => 'Správa s povinnosťou',
-       'option_explication_explication' => 'Ak je to potrebné, krátka veta opisujúca zmysel daného poľa.',
-       'option_explication_label' => 'Vysvetlenie',
-       'option_groupe_affichage' => 'Zobraziť',
-       'option_groupe_description' => 'Opis',
-       'option_groupe_utilisation' => 'Použitie',
-       'option_groupe_validation' => 'Overenie',
-       'option_heure_pas_explication' => 'Pri používaní diára sa zobrazí menu, ktoré vám pomôže zadať hodiny a minúty. Tak môžete vybrať časový interval pre každý údaj (predvolený – 30 min).',
-       'option_heure_pas_label' => 'Interval v minútach v menu pomocníka k zápisu do poľa',
-       'option_horaire_label' => 'Diár',
-       'option_horaire_label_case' => 'Povoliť zápis do diára',
-       'option_id_groupe_label' => 'Skupina slov',
-       'option_info_obligatoire_explication' => 'Môžete zmeniť predvolenú povinnosť vyplniť polia: <i>[Povinné]</i>.',
-       'option_info_obligatoire_label' => 'Označenie povinnosti',
-       'option_inserer_barre_choix_edition' => 'celý editovací panel s nástrojmi',
-       'option_inserer_barre_choix_forum' => 'panel s nástrojmi pre diskusné fóra',
-       'option_inserer_barre_explication' => 'Vložiť panel s nástrojmi porte-plume, ak je tento nástroj aktivovaný.',
-       'option_inserer_barre_label' => 'Vložiť panel s nástrojmi',
-       'option_label_case_label' => 'Označenie sa nachádza pod zaškrtávacím políčkom',
-       'option_label_explication' => 'Zobrazí sa titulok.',
-       'option_label_label' => 'Označenie',
-       'option_maxlength_explication' => 'Používateľ nemôže napísať viac znakov ako určuje toto číslo.',
-       'option_maxlength_label' => 'Maximálny počet znakov',
-       'option_multiple_explication' => 'Používateľ si bude môcť vybrať niekoľko hodnôt',
-       'option_multiple_label' => 'Výber z viacerých možností',
-       'option_nom_explication' => 'Počítačový názov, ktorý pomenúva pole. Môžu v ňom byť malé písmená abecedy alebo podčiarkovník "_".',
-       'option_nom_label' => 'Názov poľa',
-       'option_obligatoire_label' => 'Povinné pole',
-       'option_option_destinataire_intro_label' => 'Pomenovanie prvého prázdneho výberu(ak má formu zoznamu)',
-       'option_option_intro_label' => 'Označenie prvého prázdneho výberu',
-       'option_option_statut_label' => 'Zobraziť stav',
-       'option_pliable_label' => 'Roztiahnuteľné',
-       'option_pliable_label_case' => 'Skupina polí sa dá roztiahnuť alebo stiahnuť.',
-       'option_plie_label' => 'Už stiahnutá',
-       'option_plie_label_case' => 'Ak sa dá skupina polí stiahnuť a roztiahnuť, táto možnosť ju v zobrazeniach formulára nastaví ako už stiahnutú.',
-       'option_previsualisation_explication' => 'Ak je aktivovaný porte-plume, pridať kartu do ukážky vzhľadu zadaného textu.',
-       'option_previsualisation_label' => 'Aktivovať ukážky',
-       'option_readonly_explication' => 'Toto pole môžete zobraziť, vybrať, ale nie upravovať.',
-       'option_readonly_label' => 'Len na čítanie',
-       'option_rows_explication' => 'Výška poľa v riadkoch. Táto možnosť sa nepoužije vždy, pretože  štýly CSS na vašej stránke ju môžu zmeniť.',
-       'option_rows_label' => 'Počet riadkov',
-       'option_size_explication' => 'Šírka poľa v riadkoch. Táto možnosť sa nepoužije vždy, pretože štýly CSS na vašej stránke ju môžu zmeniť.',
-       'option_size_label' => 'Veľkosť poľa',
-       'option_type_choix_plusieurs' => 'Umožní používateľovi vybrať si <strong>mnohých</ strong> príjemcov.',
-       'option_type_choix_tous' => 'Urobiť príjemcov zo <strong>všetkých</ strong> týchto autorov. Používateľ nebude mať na výber.',
-       'option_type_choix_un' => 'Povoliť používateľovi vybrať si <strong>jedného</ strong> príjemcu (vo forme rozbaľovacieho menu).',
-       'option_type_choix_un_radio' => 'Umožniť používateľovi vybrať si <strong>jediného</strong> príjemcu (vo forme zoznamu s odrážkami).',
-       'option_type_explication' => 'V režime hesla sa obsah napísaný do poľa nahradí hviezdičkami.',
-       'option_type_label' => 'Typ poľa',
-       'option_type_password' => 'Skrývaný text pri písaní (napr. heslo)',
-       'option_type_text' => 'Normálny',
-       'option_valeur_non_label' => 'Hodnota nie',
-       'option_valeur_oui_label' => 'Hodnota áno',
-
-       // S
-       'saisie_auteurs_explication' => 'Umožňuje vám vybrať jedného alebo viacerých autorov',
-       'saisie_auteurs_titre' => 'Autori',
-       'saisie_case_explication' => 'Používa sa na aktivovanie alebo deaktivovanie konkrétnej možnosti.',
-       'saisie_case_titre' => 'Jedno zaškrtávacie políčko',
-       'saisie_checkbox_explication' => 'Používa sa na výber niekoľkých možností pomocou zaškrtávacích políčok.',
-       'saisie_checkbox_titre' => 'Zaškrtávacie políčka',
-       'saisie_date_explication' => 'Používa sa na zadávanie dátumu pomocou nástroja kalendára',
-       'saisie_date_titre' => 'Dátum',
-       'saisie_destinataires_explication' => 'Používa sa na výber jedného príjemcu alebo viacerých z dopredu vybraných autorov.',
-       'saisie_destinataires_titre' => 'Príjemcovia',
-       'saisie_email_titre' => 'E-mailová adresa',
-       'saisie_explication_explication' => 'Všeobecný vysvetľujúci text.',
-       'saisie_explication_titre' => 'Vysvetlenie',
-       'saisie_fieldset_explication' => 'Rám, v ktorom môže byť niekoľko polí.',
-       'saisie_fieldset_titre' => 'Skupina polí',
-       'saisie_file_explication' => 'Poslať súbor',
-       'saisie_file_titre' => 'Súbor',
-       'saisie_hidden_explication' => 'Predvyplnené pole, ktoré používateľ nikdy neuvidí.',
-       'saisie_hidden_titre' => 'Skryté pole',
-       'saisie_input_explication' => 'Jednoduchý riadok s textom, ktorý môže byť viditeľný alebo skrytý (heslo).',
-       'saisie_input_titre' => 'Textové pole',
-       'saisie_mot_explication' => 'Jedno alebo viac kľúčových slov zo skupiny slov',
-       'saisie_mot_titre' => 'Kľúčové slovo',
-       'saisie_oui_non_explication' => 'Odpoveď buď Áno alebo Nie',
-       'saisie_oui_non_titre' => 'Áno alebo Nie',
-       'saisie_radio_defaut_choix1' => 'Jeden',
-       'saisie_radio_defaut_choix2' => 'Dva',
-       'saisie_radio_defaut_choix3' => 'Tri',
-       'saisie_radio_explication' => 'Používa sa na výber jednej možnosti z viacerých dostupných.',
-       'saisie_radio_titre' => 'Rádiové gombíky',
-       'saisie_selecteur_article' => 'Zobraziť prehliadač výberu článku',
-       'saisie_selecteur_article_titre' => 'Výber článku',
-       'saisie_selecteur_rubrique' => 'Zobraziť prehliadač výberu rubriky',
-       'saisie_selecteur_rubrique_article' => 'Zobraziť prehliadač výberu článku alebo rubriky',
-       'saisie_selecteur_rubrique_article_titre' => 'Výber článku alebo rubriky',
-       'saisie_selecteur_rubrique_titre' => 'Výber rubriky',
-       'saisie_selection_explication' => 'Vyberte možnosť z rozbaľovacieho zoznamu.',
-       'saisie_selection_multiple_explication' => 'Používa sa na výber niekoľkých možností zo zoznamu.',
-       'saisie_selection_multiple_titre' => 'Výber z viacerých možností',
-       'saisie_selection_titre' => 'Rozbaľovací zoznam',
-       'saisie_textarea_explication' => 'Textové pole s viacerými riadkami.',
-       'saisie_textarea_titre' => 'Blok textu',
-
-       // T
-       'tous_visiteurs' => 'Všetci návštevníci (aj ne­za­re­gis­tro­va­ní)',
-       'tout_selectionner' => 'O(d)značiť všetko',
-
-       // V
-       'vue_sans_reponse' => '<i>Bez reakcie</i>',
-
-       // Z
-       'z' => 'zzz'
-);
diff --git a/www/plugins/saisies/paquet.xml b/www/plugins/saisies/paquet.xml
deleted file mode 100644 (file)
index de8bb17..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<paquet
-       prefix="saisies"
-       categorie="outil"
-       version="2.19.8"
-       etat="stable"
-       compatibilite="[3.0.0;3.2.*]"
-       logo="images/logo_saisie_48.png"
-       documentation="https://contrib.spip.net/Saisies"
->
-       <nom>Saisies</nom>
-       <auteur lien="https://contrib.spip.net/Matthieu-Marcillaud">Matthieu Marcillaud</auteur>
-       <auteur lien="https://contrib.spip.net/RastaPopoulos">RastaPopoulos</auteur>
-       <auteur lien="https://contrib.spip.net/Joseph">Joseph</auteur>
-       <auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
-       <licence>GNU/GPL</licence>
-
-       <traduire module="saisies" reference="fr" gestionnaire="salvatore" />
-
-       <pipeline nom="header_prive" inclure="saisies_pipelines.php" />
-       <pipeline nom="affichage_final" inclure="saisies_pipelines.php" />
-       <pipeline nom="saisies_autonomes" action="" />
-       <pipeline nom="saisies_construire_formulaire_config" action="" />
-       <pipeline nom="formulaire_saisies" action="" />
-       <pipeline nom="formulaire_charger" inclure="saisies_pipelines.php" />
-       <pipeline nom="formulaire_verifier" inclure="saisies_pipelines.php" />
-       <pipeline nom="styliser" inclure="saisies_pipelines.php" />
-
-       <menu nom="saisies_doc" titre="saisies:titre_page_saisies_doc" parent="menu_developpement"  icone="images/saisies-16.png" />
-
-       <utilise nom="verifier" compatibilite="[1.6.0;]" />
-       <utilise nom="spip_bonux" compatibilite="[3.0.0;]" />
-       <utilise nom="yaml" compatibilite="[1.5.0;]" />
-</paquet>
diff --git a/www/plugins/saisies/prive/exec/construire_formulaire.html b/www/plugins/saisies/prive/exec/construire_formulaire.html
deleted file mode 100644 (file)
index 5cd0537..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<h1><:saisies:info_configurer_saisies:></h1>
-
-<div class="ajax">#FORMULAIRE_CONSTRUIRE_FORMULAIRE{test,#ARRAY,#ARRAY{modifier_nom,oui,nom_unique,oui}}</div>
diff --git a/www/plugins/saisies/prive/listes/articles_originaux_recursifs.html b/www/plugins/saisies/prive/listes/articles_originaux_recursifs.html
deleted file mode 100644 (file)
index c62602e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-[(#SET{iteration,#ENV{iteration,1}})]
-[(#SET{separateur,[(#ENV{separateur}|concat{&nbsp;&rsaquo;&nbsp;})]})]
-<BOUCLE_rubriques(RUBRIQUES){id_parent}{tout}>
-       <optgroup label="#GET{separateur}#TITRE">
-               <BOUCLE_articles_originaux(ARTICLES){id_rubrique}{origine_traduction}>
-               [(#ENV{multiple}|oui)
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|in_array{#ENV{valeur,#ENV{defaut,#ARRAY}}}|oui) selected="selected"]>#GET{separateur}#TITRE</option>]
-               [(#ENV{multiple}|non)
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>#GET{separateur}#TITRE</option>]
-               <INCLURE{fond=prive/listes/articles_originaux_recursifs}{valeur=#ENV{valeur}}{id_rubrique=#ID_RUBRIQUE}{iteration=(#GET{iteration}|plus{1})}{separateur=#GET{separateur}}{_multiple}{defaut} />
-               </BOUCLE_articles_originaux>
-               <BOUCLE_ssrubriques(BOUCLE_rubriques)> </BOUCLE_ssrubriques>
-       </optgroup>
-</BOUCLE_rubriques>
diff --git a/www/plugins/saisies/prive/listes/rubriques_recursives.html b/www/plugins/saisies/prive/listes/rubriques_recursives.html
deleted file mode 100644 (file)
index 368e56b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[(#SET{separateur,[(#ENV{separateur}|concat{&nbsp;&rsaquo;&nbsp;})]})]
-<BOUCLE_rubriques(RUBRIQUES){id_parent=#ENV{id_parent,#ENV{id_rubrique}}}{tout}>
-       [(#ENV{multiple}|oui)
-       <option value="#ID_RUBRIQUE"[(#ID_RUBRIQUE|in_array{#ENV{valeur,#ENV{defaut,#ARRAY}}}|oui) selected="selected"]>#GET{separateur}#TITRE</option>]
-       [(#ENV{multiple}|non)
-       <option value="#ID_RUBRIQUE"[(#ID_RUBRIQUE|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>#GET{separateur}#TITRE</option>]
-       <INCLURE{fond=prive/listes/rubriques_recursives,env,id_rubrique=#ID_RUBRIQUE,separateur=#GET{separateur}} />
-</BOUCLE_rubriques>
diff --git a/www/plugins/saisies/prive/squelettes/contenu/saisies_doc.html b/www/plugins/saisies/prive/squelettes/contenu/saisies_doc.html
deleted file mode 100644 (file)
index 1cec6d0..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<h1 class="grostitre"><:saisies:titre_page_saisies_doc:></h1>
-<div class="nettoyeur"></div>
-
-<B_saisies>
-       <BOUCLE_saisies (DATA) {source table, #VAL{saisies}|saisies_lister_disponibles} {si #VAL{_DIR_PLUGIN_YAML}|defined}>
-               [(#BOITE_OUVRIR)]
-                       <h3 id="[saisie_(#CLE)]">[(#ICONE|balise_img) ][(#TITRE)] [((#CLE))]</h3>
-                       <p>[(#DESCRIPTION)]</p>
-                       <BOUCLE_options (DATA) {source table, #OPTIONS}>
-                               <div class="info">
-                                       <h4>[(#VALEUR{options/label}|saisies_label)]</h4>
-                                       <B_saisies_options>
-                                               <ul class="spip">
-                                                       <BOUCLE_saisies_options (DATA) {source table, #SAISIES}>
-                                                               <li><strong>[(#VALEUR{options/label}|sinon{#VALEUR{options/label_case}}|saisies_label)] [((#VALEUR{options/nom}))]</strong>[(#VALEUR{options/label}|oui|et{#VALEUR{options/label_case}|oui})[(#VALEUR{options/label_case}|saisies_label)]]
-                                                                       [(#VALEUR{options/explication}|oui)<br/>[(#VALEUR{options/explication}|saisies_label)]]
-                                                                       [(#VALEUR{options/defaut}|oui)<br/>[Par défaut : (#VALEUR{options/defaut}|saisies_label)]]
-                                                                       <B_saisies_datas>
-                                                                               <br/>Choix possibles :
-                                                                               <ul class="spip"><BOUCLE_saisies_datas (DATA) {source table, #VALEUR{options/datas}}>
-                                                                                       <li class="item data_[(#CLE)]">[(#VALEUR|saisies_label)][ ((#CLE))]</li>
-                                                                       </BOUCLE_saisies_datas></ul>
-                                                                       </B_saisies_datas>
-                                                               </li>
-                                                       </BOUCLE_saisies_options>
-                                               </ul>
-                                       </B_saisies_options>
-                               </div>
-                       </BOUCLE_options>
-               [(#BOITE_FERMER)]
-       </BOUCLE_saisies>
-</B_saisies>
-<:saisies:plugin_yaml_inactif:>
-<//B_saisies>
diff --git a/www/plugins/saisies/prive/squelettes/navigation/saisies_doc.html b/www/plugins/saisies/prive/squelettes/navigation/saisies_doc.html
deleted file mode 100644 (file)
index 8b0c582..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<B_saisies>
-       <div class="navigation">
-               <ul class="liste_items sous_navigation">
-               <BOUCLE_saisies (DATA) {source table, #VAL{saisies}|saisies_lister_disponibles} {si #VAL{_DIR_PLUGIN_YAML}|defined}>
-                               <li class="item"><a href="#[saisie_(#CLE)]" class="bando2_saisie_[(#CLE)]">[(#TITRE)] [((#CLE))]</a></li>
-               </BOUCLE_saisies>
-               </ul>
-       </div>
-</B_saisies>
diff --git a/www/plugins/saisies/prive/style_prive_plugin_saisies.html b/www/plugins/saisies/prive/style_prive_plugin_saisies.html
deleted file mode 100644 (file)
index 523220c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-[(#REM)<style>/*
-       Ce squelette definit les styles de l'espace prive
-
-       Note: l'entete "Vary:" sert a repousser l'entete par
-       defaut "Vary: Cookie,Accept-Encoding", qui est (un peu)
-       genant en cas de "rotation du cookie de session" apres
-       un changement d'IP (effet de clignotement).
-
-       ATTENTION: il faut absolument le charset sinon Firefox croit que
-       c'est du text/html !
-*/]#CACHE{3600*100,cache-client}
-#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
-#HTTP_HEADER{Vary: Accept-Encoding}
-#wysiwyg .saisie_fieldset .champ {font-size: 1em;}
-
-body.saisies_doc {
-       background-color: #efefef;
-}
-<B_saisies>
-<BOUCLE_saisies (DATA) {source table, #VAL{saisies}|saisies_lister_disponibles}>
-.navigation_avec_icones .bando2_saisie_[(#CLE)] { [background-image: url((#ICONE|image_reduire{16}|extraire_attribut{src}));] }
-</BOUCLE_saisies>
-</B_saisies>
\ No newline at end of file
diff --git a/www/plugins/saisies/saisies-vues/_base.html b/www/plugins/saisies/saisies-vues/_base.html
deleted file mode 100644 (file)
index aa7b610..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-[(#REM)\r
-\r
-Parametres :\r
-** : obligatoire\r
-* : fortement conseille\r
-\r
-- ** nom : nom du parametre\r
-- * label : nom joli\r
-- * valeur : valeur actuelle du parametre\r
-- valeur_uniquement : si présent, n'affichera pas le label ni le bloc englobant la valeur\r
-- sans_reponse : texte affiché s'il n'y a rien de saisi pour ce champ\r
-\r
-Hors option 'valeur_uniquement' :\r
-- conteneur_class : pour ajouter une classe CSS sur le conteneur\r
-- vue_class : pour ajouter une classe CSS sur le bloc englobant la valeur\r
-\r
-]\r
-[(#SET{sans_reponse,#ENV{sans_reponse}|is_null|?{<:saisies:vue_sans_reponse:>,#ENV{sans_reponse}}})]\r
-\r
-#SET{valeur_uniquement,#ENV{valeur_uniquement}|et{#ENV{valeur_uniquement}|!={non}}|oui}\r
-#SET{enfants,#ENV*{saisies}|et{#ENV*{saisies}|is_array}}\r
-\r
-[(#REM) On génère la réponse et on l'enregistre dans une variable. Doit être VIDE s'il n'y a pas de réponse. ]\r
-       #SET{reponse,''}\r
-       [(#CHEMIN{saisies-vues/#ENV{type_saisie}.html}|oui)\r
-               #SET{reponse,#INCLURE{fond=saisies-vues/#ENV{type_saisie},env,sans_reponse=#GET{sans_reponse}}|trim}\r
-       ]\r
-       [(#CHEMIN{saisies-vues/#ENV{type_saisie}.html}|non)\r
-               #SET{reponse,#ENV*{valeur}|saisie_traitement_vue{#ENV**}}\r
-       ]\r
-\r
-[(#REM) Maintenant on affiche en encapsulant ou pas ]\r
-\r
-[(#REM) Cas normal avec présentation ]\r
-[(#GET{valeur_uniquement}|non)\r
-<div class="champ afficher[ afficher_(#ENV{nom}|saisie_nom2classe)][ saisie_(#ENV{type_saisie})][ (#ENV{conteneur_class,#ENV{li_class}})][ (#GET{reponse}|non)sans_reponse vide]">\r
-       [(#REM) S'il y a des enfants on n'inclut que la vue ]\r
-       [(#GET{enfants}|oui)\r
-               #GET{reponse}\r
-       ]\r
-       [(#GET{enfants}|non|et{#ENV{type_saisie}|!={explication}})\r
-               [<strong class="label">(#ENV{label_case,#ENV{label,#ENV{nom}}})</strong>]\r
-               <div class="valeur #ENV{vue_class}">\r
-               [(#GET{reponse}|sinon{#GET{sans_reponse}})]\r
-               </div>\r
-       ]\r
-</div>\r
-]\r
-\r
-[(#REM) Cas où on demande uniquement la valeur ]\r
-[(#GET{valeur_uniquement}|oui)\r
-       [(#REM) S'il y a des enfants on inclut que la vue ]\r
-       [(#GET{enfants}|oui)\r
-               #GET{reponse}\r
-       ]\r
-       [(#GET{enfants}|non)\r
-               [(#GET{reponse}|sinon{#GET{sans_reponse}})]\r
-       ]\r
-]\r
diff --git a/www/plugins/saisies/saisies-vues/auteurs.html b/www/plugins/saisies/saisies-vues/auteurs.html
deleted file mode 100644 (file)
index e46baf5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<BOUCLE_test_multiple(CONDITION){si #ENV{multiple}|=={on}|oui}>
-       [(#SET{valeur,[(#ENV*{valeur}|is_array|?{[(#ENV*{valeur})],[(#ENV*{valeur}|explode{','})]})]})]
-       <B_auteurs_selectionnes>
-       <ul>
-       <BOUCLE_auteurs_selectionnes(AUTEURS){id_auteur IN #GET*{valeur}}
-               {par num nom, nom}{statut ?}{statut != 5poubelle}{tout}>
-               <li class="choix">#NOM (#ID_AUTEUR)</li>
-       </BOUCLE_auteurs_selectionnes>
-       </ul>
-       </B_auteurs_selectionnes>
-</BOUCLE_test_multiple>
-       <BOUCLE_auteur_selectionne(AUTEURS){id_auteur=#ENV{valeur}}
-               {statut ?}{statut != 5poubelle}{tout}>
-               <p>#NOM (#ID_AUTEUR)</p>
-       </BOUCLE_auteur_selectionne>
-<//B_test_multiple>
diff --git a/www/plugins/saisies/saisies-vues/case.html b/www/plugins/saisies/saisies-vues/case.html
deleted file mode 100644 (file)
index e5efa22..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-[<p>(#ENV*{valeur}|=={#ENV*{valeur_oui,on}}|?{
-       #ENV{label_oui,<:item_oui:>}, 
-       #ENV{label_non,<:item_non:>}
-})
-</p>]
-
diff --git a/www/plugins/saisies/saisies-vues/checkbox.html b/www/plugins/saisies/saisies-vues/checkbox.html
deleted file mode 100644 (file)
index 0be71e0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-[(#REM) datas peut être une chaine qu'on sait décomposer ]\r
-#SET{datas, #ENV{datas}|saisies_chaine2tableau}\r
-#SET{valeur, #ENV{valeur}|saisies_valeur2tableau}\r
-<B_choix>\r
-<ul class="spip">\r
-       <BOUCLE_choix(POUR){tableau #GET{valeur}}>\r
-               [<li class="choix">(#GET{datas/#VALEUR})</li>]\r
-       </BOUCLE_choix>\r
-\r
-       [<li class="choix"><em>#ENV{choix_alternatif_label}</em> : (#GET{valeur/choix_alternatif})</li>]\r
-</ul>\r
-</B_choix>\r
diff --git a/www/plugins/saisies/saisies-vues/couleur.html b/www/plugins/saisies/saisies-vues/couleur.html
deleted file mode 100644 (file)
index 6dc5361..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<p>
-       <span class='couleur'[ style="background-color:#(#ENV{valeur}|rtrim{#}); width:4em; border:1px solid #888; display:inline-block;"]>&nbsp;</span>
-       [(#ENV{valeur})]
-</p>
diff --git a/www/plugins/saisies/saisies-vues/date.html b/www/plugins/saisies/saisies-vues/date.html
deleted file mode 100644 (file)
index d0173b9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#SET{valeur,#ENV{valeur}|vider_date}
-#SET{date_mysql,([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])}
-[(#GET{valeur}|match{#GET{date_mysql}}|oui)
-       [(#ENV{horaire}|?{      
-               #SET{valeur,#ENV{valeur}|affdate{'d/m/Y H:i:s'}}
-               ,
-               #SET{valeur,#ENV{valeur}|affdate{'d/m/Y'}}
-       })]
-]
-[<p class="date">(#GET{valeur})</p>]
diff --git a/www/plugins/saisies/saisies-vues/destinataires.html b/www/plugins/saisies/saisies-vues/destinataires.html
deleted file mode 100644 (file)
index 12ac840..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[(#SET{valeur,[(#ENV*{valeur}|is_array|?{[(#ENV*{valeur})],[(#ENV*{valeur}|explode{','})]})]})]\r
-<B_destinataires>\r
-<ul>\r
-       <BOUCLE_destinataires(AUTEURS){tout}{id_auteur IN #GET*{valeur}}>\r
-       <li class="choix">#NOM</li>\r
-       </BOUCLE_destinataires>\r
-</ul>\r
-</B_destinataires>\r
diff --git a/www/plugins/saisies/saisies-vues/explication.html b/www/plugins/saisies/saisies-vues/explication.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/www/plugins/saisies/saisies-vues/fieldset.html b/www/plugins/saisies/saisies-vues/fieldset.html
deleted file mode 100644 (file)
index 8c77d44..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-[(#ENV{valeur_uniquement}|et{#ENV{valeur_uniquement}|!={non}}|non)
-[<h3 class="legend[ (#ENV{vue_class})]">(#ENV{label})</h3>]
-]
-
-[(#ENV{saisies}|is_array|oui)
-       #INCLURE{fond=inclure/voir_saisies, env, from_fieldset='on'}
-]
diff --git a/www/plugins/saisies/saisies-vues/groupe_mots.html b/www/plugins/saisies/saisies-vues/groupe_mots.html
deleted file mode 100644 (file)
index a820b0b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[(#SET{valeurs,[(#ENV{multiple}|oui|?{#ENV*{valeur},#ARRAY{0,#ENV{valeur}}})]})]
-
-<B_choix>
-<ul>
-       <BOUCLE_choix(GROUPES_MOTS){id_groupe IN #GET{valeurs}}{par titre}>
-       <li class="choix">#TITRE</li>
-       </BOUCLE_choix>
-</ul>
-</B_choix>
diff --git a/www/plugins/saisies/saisies-vues/mot.html b/www/plugins/saisies/saisies-vues/mot.html
deleted file mode 100644 (file)
index c24a726..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-[(#REM) datas peut être une chaine qu'on sait décomposer ]\r
-#SET{valeur, #ENV{valeur}|saisies_valeur2tableau}\r
-<B_mots><p><BOUCLE_mots(POUR){tableau #GET{valeur}}{', '}><a href="[(#VALEUR|generer_url_entite{mot})]">#INFO_TITRE{mot,#VALEUR}</a></BOUCLE_mots></p></B_mots>\r
diff --git a/www/plugins/saisies/saisies-vues/oui_non.html b/www/plugins/saisies/saisies-vues/oui_non.html
deleted file mode 100644 (file)
index dcd2157..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[<p>(#ENV*{valeur}|et{#ENV{valeur}|!={#ENV{valeur_non,non}}}|?{<:item_oui:>,<:item_non:>})</p>]
diff --git a/www/plugins/saisies/saisies-vues/radio.html b/www/plugins/saisies/saisies-vues/radio.html
deleted file mode 100644 (file)
index debb78b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[(#REM) datas peut être une chaine qu'on sait décomposer ]\r
-#SET{datas, #ENV{datas}|saisies_chaine2tableau}\r
-\r
-[<p>(#GET{datas/#ENV{valeur}})</p>]\r
diff --git a/www/plugins/saisies/saisies-vues/secteur.html b/www/plugins/saisies/saisies-vues/secteur.html
deleted file mode 100644 (file)
index 626572c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[(#REM) valeur peut être une chaine qu'on sait décomposer ]\r
-#SET{valeur, #ENV{valeur}|saisies_chaine2tableau}\r
-\r
-<B_choix>\r
-<ul>\r
-       <BOUCLE_choix(RUBRIQUES){id_rubrique IN #GET*{valeur}}>\r
-       <li class="choix">#TITRE</li>\r
-       </BOUCLE_choix>\r
-</ul>\r
-</B_choix>\r
diff --git a/www/plugins/saisies/saisies-vues/selecteur.html b/www/plugins/saisies/saisies-vues/selecteur.html
deleted file mode 100644 (file)
index 419acb6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-[(#REM) 
-         
-  ### /!\ selecteur (spip Bonux) ###
-         Attention, ce qui est retourne est un tableau :
-         _request($name) = array('rubrique|3', 'rubrique|9', 'rubrique|10');
-         Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :
-         [(#CHAMP|picker_selected{article})]
-         Cette fonction peut etre pratique dans une boucle en utilisant le critere IN
-         
-]
-
-
-[(#SET{selection,#VALEUR|picker_selected_par_objet})]
-
-<BOUCLE_au_moins_un(CONDITION){si #GET{selection}}>
-       <BOUCLE_un(DATA){source table,#GET{selection}}{si (#GET{selection}|count|=={1})}>
-               <p>
-                       [(#OBJET|objet_info{texte_objet}|_T)] #ID_OBJET&nbsp;: #INFO_TITRE{#OBJET,#ID_OBJET}
-               </p>
-       </BOUCLE_un>
-       <B_plusieurs>
-               <ul>
-       <BOUCLE_plusieurs(DATA){source table,#GET{selection}}{si (#GET{selection}|count|>{1})}>
-                       <li class="choix">
-                               [(#OBJET|objet_info{texte_objet}|_T)] #ID_OBJET&nbsp;: #INFO_TITRE{#OBJET,#ID_OBJET}
-                       </li>
-       </BOUCLE_plusieurs>
-               </ul>
-       </B_plusieurs>
-</BOUCLE_au_moins_un>
diff --git a/www/plugins/saisies/saisies-vues/selecteur_article.html b/www/plugins/saisies/saisies-vues/selecteur_article.html
deleted file mode 100644 (file)
index d7341bb..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-[(#REM) \r
-         \r
-  ### /!\ selecteur (spip Bonux) ###\r
-         Attention, ce qui est retourne est un tableau :\r
-         _request($name) = array('article|3', 'article|9', 'article|10');\r
-         Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :\r
-         [(#CHAMP|picker_selected{article})]\r
-         Cette fonction peut etre pratique dans une boucle en utilisant le critere IN\r
-         \r
-]\r
-<BOUCLE_test_multiple(CONDITION){si #ENV{multiple}|=={on}|oui}>\r
-       <B_articles_selectionnes>\r
-       <ul>\r
-       <BOUCLE_articles_selectionnes(ARTICLES){id_article IN #ENV*{valeur}|picker_selected{article}}>\r
-               <li class="choix">#TITRE (<:article:> #ID_ARTICLE) - #STATUT</li>\r
-       </BOUCLE_articles_selectionnes>\r
-       </ul>\r
-       </B_articles_selectionnes>\r
-</BOUCLE_test_multiple>\r
-       <BOUCLE_article_selectionne(ARTICLES){id_article IN #ENV*{valeur}|picker_selected{article}}>\r
-               <p>#TITRE (<:article:> #ID_ARTICLE) - #STATUT</p>\r
-       </BOUCLE_article_selectionne>\r
-<//B_test_multiple>\r
diff --git a/www/plugins/saisies/saisies-vues/selecteur_article_fonctions.php b/www/plugins/saisies/saisies-vues/selecteur_article_fonctions.php
deleted file mode 100644 (file)
index 9dbb831..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('prive/formulaires/selecteur/selecteur_fonctions');
diff --git a/www/plugins/saisies/saisies-vues/selecteur_document.html b/www/plugins/saisies/saisies-vues/selecteur_document.html
deleted file mode 100644 (file)
index 23f77bf..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<BOUCLE_doc(DOCUMENTS){id_document=#ENV{valeur}}{statut==.*}>\r
-<p>#ID_DOCUMENT - #TITRE (#TYPE_DOCUMENT [(#TAILLE|taille_en_octets)])</p>\r
-</BOUCLE_doc>\r
diff --git a/www/plugins/saisies/saisies-vues/selecteur_rubrique.html b/www/plugins/saisies/saisies-vues/selecteur_rubrique.html
deleted file mode 100644 (file)
index 2bf9b24..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-[(#REM) \r
-         \r
-  ### /!\ selecteur (spip Bonux) ###\r
-         Attention, ce qui est retourne est un tableau :\r
-         _request($name) = array('rubrique|3', 'rubrique|9', 'rubrique|10');\r
-         Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :\r
-         [(#CHAMP|picker_selected{article})]\r
-         Cette fonction peut etre pratique dans une boucle en utilisant le critere IN\r
-         \r
-]\r
-\r
-<BOUCLE_test_multiple(CONDITION){si #ENV{multiple}|=={on}|oui}>\r
-       <B_rubriques_selectionnees>\r
-       <ul>\r
-       <BOUCLE_rubriques_selectionnees(RUBRIQUES){tout}{id_rubrique IN #ENV*{valeur}|picker_selected{rubrique}}>\r
-               <li class="choix">#TITRE (<:rubrique:> #ID_RUBRIQUE) - #STATUT</li>\r
-       </BOUCLE_rubriques_selectionnees>\r
-       </ul>\r
-       </B_rubriques_selectionnees>\r
-</BOUCLE_test_multiple>\r
-       <BOUCLE_rubrique_selectionnee(RUBRIQUES){tout}{id_rubrique IN #ENV*{valeur}|picker_selected{rubrique}}>\r
-               <p>#TITRE (<:rubrique:> #ID_RUBRIQUE) - #STATUT</p>\r
-       </BOUCLE_rubrique_selectionnee>\r
-<//B_test_multiple>\r
diff --git a/www/plugins/saisies/saisies-vues/selecteur_rubrique_article.html b/www/plugins/saisies/saisies-vues/selecteur_rubrique_article.html
deleted file mode 100644 (file)
index c4d9724..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-[(#REM) \r
-         \r
-  ### /!\ selecteur (spip Bonux) ###\r
-         Attention, ce qui est retourne est un tableau :\r
-         _request($name) = array('article|3', 'article|9', 'rubrique|10');\r
-         Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :\r
-         [(#CHAMP|picker_selected{article})]\r
-         Cette fonction peut etre pratique dans une boucle en utilisant le critere IN\r
-         \r
-]\r
-#SET{reponse,""}\r
-\r
-<BOUCLE_test_multiple(CONDITION){si #ENV{multiple}|=={on}|oui}>\r
-       <B_rubriques_selectionnees>\r
-       <ul>\r
-       <BOUCLE_rubriques_selectionnees(RUBRIQUES){tout}{id_rubrique IN #ENV*{valeur}|picker_selected{rubrique}}>\r
-               <li class="choix">#TITRE (<:rubrique:> #ID_RUBRIQUE) - #STATUT</li>\r
-       </BOUCLE_rubriques_selectionnees>\r
-       </ul>\r
-       </B_rubriques_selectionnees>\r
-\r
-       <B_articles_selectionnes>\r
-       <ul>\r
-       <BOUCLE_articles_selectionnes(ARTICLES){id_article IN #ENV*{valeur}|picker_selected{article}}>\r
-               <li class="choix">#TITRE (<:article:> #ID_ARTICLE) - #STATUT</li>\r
-       </BOUCLE_articles_selectionnes>\r
-       </ul>\r
-       </B_articles_selectionnes>\r
-   \r
-</BOUCLE_test_multiple>\r
-       <BOUCLE_rubrique_selectionnee(RUBRIQUES){tout}{id_rubrique IN #ENV*{valeur}|picker_selected{rubrique}}>\r
-               <p>#TITRE (<:rubrique:> #ID_RUBRIQUE) - #STATUT</p>\r
-       </BOUCLE_rubrique_selectionnee>\r
-   \r
-   <BOUCLE_article_selectionne(ARTICLES){id_article IN #ENV*{valeur}|picker_selected{article}}>\r
-               <p>#TITRE (<:article:> #ID_ARTICLE) - #STATUT</p>\r
-       </BOUCLE_article_selectionne>\r
-<//B_test_multiple>\r
diff --git a/www/plugins/saisies/saisies-vues/selecteur_site.html b/www/plugins/saisies/saisies-vues/selecteur_site.html
deleted file mode 100644 (file)
index 1c5eca6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<BOUCLE_test_multiple(CONDITION){si #ENV{multiple}|oui}>\r
-       <B_sites_selectionnes>\r
-       <ul>\r
-       <BOUCLE_sites_selectionnes(SITES){id_syndic IN #ENV*{valeur}}>\r
-               <li class="choix">#NOM SITE (#ID_SYNDIC)</li>\r
-       </BOUCLE_sites_selectionnes>\r
-       </ul>\r
-       </B_sites_selectionnes>\r
-</BOUCLE_test_multiple>\r
-       <BOUCLE_site_selectionne(SITES){id_syndic=#ENV{valeur}}>\r
-               <p>#NOM_SITE (#ID_SYNDIC)</p>\r
-       </BOUCLE_site_selectionne>\r
-<//B_test_multiple>\r
diff --git a/www/plugins/saisies/saisies-vues/selection.html b/www/plugins/saisies/saisies-vues/selection.html
deleted file mode 100644 (file)
index 4d5f5a6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[(#REM) datas peut être une chaine qu'on sait décomposer ]\r
-#SET{datas, #ENV{datas}|saisies_chaine2tableau|saisies_aplatir_tableau}\r
-\r
-[<p>(#GET{datas/#ENV{valeur}})</p>]\r
diff --git a/www/plugins/saisies/saisies-vues/selection_multiple.html b/www/plugins/saisies/saisies-vues/selection_multiple.html
deleted file mode 100644 (file)
index a13d173..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[(#REM) datas peut être une chaine qu'on sait décomposer ]\r
-#SET{datas, #ENV{datas}|saisies_chaine2tableau|saisies_aplatir_tableau}\r
-#SET{valeur, #ENV*{valeur}|saisies_valeur2tableau}\r
-<B_choix>\r
-<ul>\r
-       <BOUCLE_choix(POUR){tableau #GET{valeur}}>\r
-       <li class="choix">#GET{datas/#VALEUR}</li>\r
-       </BOUCLE_choix>\r
-</ul>\r
-</B_choix>\r
diff --git a/www/plugins/saisies/saisies.css.html b/www/plugins/saisies/saisies.css.html
deleted file mode 100644 (file)
index 285696d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#CACHE{3600*100,cache-client}\r
-[(#REM)<style>]\r
-#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}\r
-#HTTP_HEADER{Vary: Accept-Encoding}\r
-\r
-#SET{left,#LANG_DIR|choixsiegal{ltr,left,right}}\r
-#SET{right,#LANG_DIR|choixsiegal{ltr,right,left}}\r
-#SET{fleche,#LANG_DIR|choixsiegal{ltr,#CHEMIN{images/deplierhaut.gif},#CHEMIN{images/deplierhaut_rtl.gif}}}\r
-\r
-/* Dans l'espace privé, afficher les labels des vues de Saisies */\r
-#wysiwyg .afficher .label{ display:block; }\r
-\r
-.fieldset.pliable > fieldset > .legend{\r
-       cursor:pointer;\r
-}\r
-\r
-.fieldset.pliable > fieldset > .legend span{\r
-       padding-#GET{left}:15px;\r
-       background:transparent url(#CHEMIN{images/deplierbas.gif}) [(#GET{left}) ]center no-repeat;\r
-}\r
-\r
-.fieldset.plie > fieldset > .legend span{\r
-       background-image:url(#GET{fleche});\r
-}\r
-/*[(#REM) date triple champs...\r
-       jour    mois    annee\r
-       /12/    /10/    /2010/\r
-]*/\r
-.editer.saisie_date_jour_mois_annee .choix {\r
-       background-color:transparent;\r
-       float:left;\r
-       padding:0;\r
-       border:0;\r
-}\r
-.saisie_date_jour_mois_annee .choix+.choix {margin-left:1em;}\r
-.saisie_date_jour_mois_annee .choix label{display:block; width:auto;}\r
-.saisie_date_jour_mois_annee .choix .text{width:auto;}\r
-\r
-/*[(#REM) Styles prives de bonux pour la mise en forme du selecteur d'article et/ou de rubrique si bonux disponible]*/\r
-[(#CHEMIN{prive/style_prive_plugin_bonux.html}|oui) \r
-  [(#INCLURE{fond=prive/style_prive_plugin_bonux,ltr=#LANG_LEFT})]\r
-]\r
-\r
-/*[(#REM) On ecrase le style de bonux qui met tous les labels a droite (ou gauche).\r
-        Sinon le p.explication du selecteur ne va pas a la ligne ]*/\r
-.formulaire_spip li.selecteur_item > label {\r
-       float:none;\r
-}\r
-\r
-.formulaire_spip li.selecteur_item div.choix label {\r
-       float:none;\r
-       display:inline;\r
-}\r
-\r
-/* avec crayons + formulaire de saisies, éviter un padding à gauche du label */\r
-.formulaire_crayon .editer-groupe .editer { padding-left:10px; }
\ No newline at end of file
diff --git a/www/plugins/saisies/saisies/_base.html b/www/plugins/saisies/saisies/_base.html
deleted file mode 100644 (file)
index 050a4ec..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-[(#REM) \r
-\r
-  Parametres :\r
-  ** : obligatoire\r
-  * : fortement conseille\r
-  \r
-  - ** nom : nom du parametre\r
-  - * label : nom joli\r
-  (- * erreurs : tableau des erreurs) (transmis par defaut avec SAISIE)\r
-  (- * valeur : valeur actuelle du parametre) (transmis par defaut avec SAISIE : valeur=#ENV{nom du parametre}})\r
-  - defaut : valeur par defaut du parametre\r
-  - obligatoire : est-ce un parametre obligatoire ? (defaut: non, valeurs : null/"non"/autre=oui )\r
-  - info_obligatoire : si obligatoire, ajoute ce contenu apres le label (defaut : "")\r
-  - explication : texte d'explication suppplementaire\r
-  - attention : texte pour les cas graves !\r
-  - disable : est-ce que le champ est desactive ? (pas de saisie possible, selection impossible, contenus non postes)\r
-              (defaut: non, valeurs : null/"non"/autre=oui ) n'est peut etre pas valable pour toutes les saisies.\r
-  - disable_avec_post : idem disable, mais en envoyant en hidden le champ tout de meme.\r
-  - readonly : est-ce que le champ est non modifiable ? (pas de saisie possible, selection possible, contenus postes)\r
-              (defaut: non, valeurs : null/"non"/autre=oui ) n'est peut etre pas valable pour toutes les saisies.\r
-  - saisies_base_conteneur : définit la balise englobante de la saisie (balise div par défaut en SPIP 3.1+, et li avant)\r
-  - conteneur_class : Classe CSS à ajouter au conteneur\r
-  - li_class : pour compatibilité. Voir conteneur_class\r
-  - label_class : pour mettre des styles sur les labels\r
-\r
-  \r
-  Exemples d'appels :\r
-       [(#SAISIE{input, couleur_foncee,\r
-               label=<:spa:couleur_foncee:>,\r
-               obligatoire=oui})]\r
-\r
-]\r
-\r
-[(#ENV{nom}|oui)\r
-       #SET{obligatoire,#ENV{obligatoire}|et{#ENV{obligatoire}|!={non}}|?{obligatoire,''}}\r
-       #SET{disable,#ENV{disable,#ENV{disable_avec_post}}|et{#ENV{disable,#ENV{disable_avec_post}}|!={non}}|?{#ENV{disable}|is_array|?{#ENV{disable,#ARRAY},disabled},''}}\r
-       #SET{readonly,#ENV{readonly}|et{#ENV{readonly}|!={non}}|?{readonly,''}}\r
-       #SET{saisies_autonomes,#VAL|saisies_autonomes}\r
-\r
-       [(#ENV{type_saisie}|in_array{#GET{saisies_autonomes}}|oui)\r
-               [(#INCLURE{fond=saisies/#ENV{type_saisie},env,obligatoire=#GET{obligatoire},disable=#GET{disable},readonly=#GET{readonly}})]\r
-       ]\r
-       [(#ENV{type_saisie}|in_array{#GET{saisies_autonomes}}|non)\r
-               #SET{erreurs,#ENV**{erreurs/#ENV{nom}}}\r
-               #SET{conteneur_class,#ENV{type_saisie}|substr{0,9}|=={selecteur}|?{selecteur_item,''}}\r
-               <!--!inserer_saisie_editer-->\r
-               <[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})] class="editer editer_[(#ENV{nom}|saisie_nom2classe)][ (#GET{obligatoire})][ (#GET{erreurs}|oui)erreur][ (#GET{conteneur_class})][ (#ENV{conteneur_class,#ENV{li_class}})][ saisie_(#ENV{type_saisie})]"[ data-id="(#ENV{id_saisie})"][ data-afficher_si="(#ENV{afficher_si})"]>\r
-                       #ENV*{inserer_debut}\r
-                       [<label[(#ENV{type_saisie}|match{oui_non|radio|checkbox|fichiers}|non) for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"][ class="(#ENV{label_class})"]>(#ENV*{label})[<span class='obligatoire'>(#GET{obligatoire}|oui)[(#ENV*{info_obligatoire}|is_null|?{<:info_obligatoire_02:>,#ENV*{info_obligatoire}})]</span>]</label>]\r
-                       [<span class='erreur_message'>(#GET{erreurs})</span>]\r
-                       [<p class="explication" id="[explication_(#ENV{nom}|saisie_nom2name)]">(#ENV*{explication})</p>]\r
-                       [<em class='attention'>(#ENV*{attention})</em>]\r
-                       [(#INCLURE{fond=saisies/#ENV{type_saisie},env,nom=[(#ENV{nom}|saisie_nom2name)], disable=#GET{disable},readonly=#GET{readonly},describedby=[(#ENV*{explication}|?{[explication_(#ENV{nom}|saisie_nom2name)]})]})]\r
-                       [(#ENV{disable_avec_post}|et{#ENV{disable_avec_post}|!={non}}|oui)<input type='hidden' name='[(#ENV{nom}|saisie_nom2name)]' value="#ENV{valeur,#ENV{defaut}}" />]\r
-                       #ENV**{inserer_fin}\r
-               </[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})]>\r
-       ]\r
-]\r
diff --git a/www/plugins/saisies/saisies/articles_originaux.html b/www/plugins/saisies/saisies/articles_originaux.html
deleted file mode 100644 (file)
index d0e8d66..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-[(#REM)\r
-\r
-Saisies qui liste les articles originaux (origine_traduction) du site\r
-Par défaut ne liste que ceux des rubriques à la racine (secteurs)\r
-\r
-  Parametres :\r
-  - class : classe(s) css ajoutes au select\r
-  - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple\r
-       Dans le cas multiple, defaut et valeur doivent etre un array, sinon un int\r
-  - recursif : si oui liste les articles des rubriques de facon recursive, et pas uniquement les secteurs\r
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")\r
-    (seulement si non multiple)\r
-  - cacher_option_intro : pas de premier option vide  (defaut:"")\r
-  - defaut : valeur par defaut si pas présente dans l'environnement\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement\r
-\r
-  Exemple d'appel :\r
-       [(#SAISIE{articles_originaux,articles,\r
-               label=<:plugin:label_articles:>,\r
-               multiple=oui})]\r
-]\r
-<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple" size="#ENV{size,10}"][ (#ENV*{attributs})]>\r
-       [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)\r
-               <option value="0">[(#ENV{option_intro})]</option>]\r
-               <BOUCLE_articles_originaux_racine(ARTICLES){id_rubrique}{origine_traduction}>\r
-               [(#ENV{multiple}|oui)\r
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]>#TITRE</option>]\r
-               [(#ENV{multiple}|non)\r
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#TITRE</option>]\r
-               </BOUCLE_articles_originaux_racine>\r
-       <BOUCLE_articles_page(ARTICLES){id_secteur<1}{origine_traduction}>\r
-       [(#ENV{multiple}|oui)\r
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]>#TITRE</option>]\r
-               [(#ENV{multiple}|non)\r
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#TITRE</option>]\r
-       </BOUCLE_articles_page>\r
-       <BOUCLE_secteurs(RUBRIQUES){id_parent = #ENV{id_rubrique,0}}{par num titre, titre}{tout}>\r
-       <optgroup label="#TITRE">\r
-               <B_articles_originaux>\r
-               <BOUCLE_articles_originaux(ARTICLES){id_rubrique}{origine_traduction}>\r
-               [(#ENV{multiple}|oui)\r
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]>#TITRE</option>]\r
-               [(#ENV{multiple}|non)\r
-               <option value="#ID_ARTICLE"[(#ID_ARTICLE|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#TITRE</option>]\r
-               </BOUCLE_articles_originaux>\r
-               </B_articles_originaux>\r
-               [(#ENV{recursif}|oui)\r
-               <INCLURE{fond=prive/listes/articles_originaux_recursifs,valeur=#ENV{valeur_forcee,#ENV{valeur}},id_rubrique,multiple} />]\r
-       </optgroup>             \r
-       </BOUCLE_secteurs>\r
-</select>\r
diff --git a/www/plugins/saisies/saisies/auteurs.html b/www/plugins/saisies/saisies/auteurs.html
deleted file mode 100644 (file)
index bddc9b6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-[(#REM)\r
-\r
-       Todo:\r
-                       Faire fonctionner les images de statut avec SPIP 3...\r
-                       Elles sont dans [(#CHEMIN_IMAGE{auteur-1comite-16.png})]\r
-       \r
-  Parametres :\r
-  - class : classe(s) css ajoutes au select\r
-  - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple\r
-       Dans le cas multiple, defaut et valeur doivent etre un array, sinon un int\r
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")\r
-    (seulement si non multiple)\r
-  - statut : un tableau des statuts listés\r
-  - option_statut: si quelque chose est passe on insere un bonhomme de statut a cote du nom, sinon rien\r
-    (defaut = rien)\r
-  - cacher_option_intro : pas de premier option vide  (defaut:"")\r
-  - defaut : valeur par defaut si pas présente dans l'environnement\r
-  - tri : trier la liste (par défaut par nom), la valeur peut être un tableau [(#ARRAY{statut,nom})] ou une chaine "nom"\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement\r
-  - webmestre : si oui, ne selectionne que les webmestres\r
-  \r
-  Exemple d'appel :\r
-       [(#SAISIE{auteurs,auteurs_site,\r
-               label=<:plugin:auteurs_du_site:>,\r
-               multiple=oui\r
-               statut=0minirezo})]\r
-]\r
-#SET{bonhomme_statut,#ARRAY}\r
-[(#ENV{option_statut}|oui)\r
-       #SET{bonhomme_statut, #ARRAY{0minirezo, admin-12.gif, 1comite, redac-12.gif, 6forum, visit-12.gif}}\r
-]\r
-[(#ENV{multiple}|oui)\r
-       [(#SET{valeur,[(#ENV*{valeur}|is_array|?{[(#ENV*{valeur})],[(#ENV*{valeur}|explode{','})]})]})]\r
-]\r
-<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple" size="#ENV{size,10}"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>\r
-       [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)\r
-               <option value="">[(#ENV{option_intro})]</option>]\r
-       <BOUCLE_auteurs(AUTEURS){statut ?}{statut != 5poubelle}{webmestre ?}{par #ENV{tri,#ARRAY{num nom, nom}}|is_array|?{#ENV{tri,#ARRAY{num nom, nom}}|implode{','},#ENV{tri,#ARRAY{num nom, nom}}}}{tout}>\r
-               #SET{image_statut, #GET{bonhomme_statut/#STATUT}}\r
-               [(#ENV{multiple}|oui)\r
-               <option value="#ID_AUTEUR"[(#ID_AUTEUR|in_array{#ENV{valeur_forcee,#GET{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"][(#GET{image_statut}|oui)[style="background:url((#CHEMIN{prive/images/#GET{image_statut}})) no-repeat left; padding-left: 20px;"]]>#NOM</option>]\r
-               [(#ENV{multiple}|non)\r
-               <option value="#ID_AUTEUR"[(#ID_AUTEUR|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"][(#GET{image_statut}|oui)[style="background:url((#CHEMIN{prive/images/#GET{image_statut}})) no-repeat left; padding-left: 20px;"]]>#NOM</option>]\r
-       </BOUCLE_auteurs>\r
-</select>\r
diff --git a/www/plugins/saisies/saisies/auteurs.yaml b/www/plugins/saisies/saisies/auteurs.yaml
deleted file mode 100644 (file)
index 53dec84..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-
-titre: '<:saisies:saisie_auteurs_titre:>'
-description: '<:saisies:saisie_auteurs_explication:>'
-icone: 'images/saisies_auteurs.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'multiple'
-          label: '<:saisies:option_multiple_label:>'
-          explication: '<:saisies:option_multiple_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'selection_multiple'
-        options:
-          nom: 'statut'
-          label: '<:saisies:option_statut_label:>'
-          cacher_option_intro: 'oui'
-          size: 3
-          datas:
-            0minirezo: '<:ecrire:info_administrateurs:>'
-            1comite: '<:ecrire:info_redacteurs:>'
-            6forum: '<:ecrire:info_visiteurs:>'
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'option_statut'
-          label: '<:saisies:option_option_statut_label:>'      
-      -
-        saisie: 'input'
-        options:
-          nom: 'option_intro'
-          label: '<:saisies:option_option_intro_label:>'
-          size: 50
-      -
-        saisie: 'case'
-        options:
-          nom: 'cacher_option_intro'
-          label_case: '<:saisies:option_cacher_option_intro_label:>'
-          defaut: 'on'
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'size'
-          label: '<:saisies:option_size_label:>'
-          explication: '<:saisies:option_size_explication:>'
-        verifier:
-          type: 'entier'
-          options:
-            min: 1
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_auteurs_titre:>'
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/case.html b/www/plugins/saisies/saisies/case.html
deleted file mode 100644 (file)
index 16b486e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-[(#REM) 
-
-  Action :
-    - Rempli "on" si oui, "" si non.
-  
-  Parametres :
-    - label_case : pour un label a cote de la case (defaut:"")
-       - defaut : valeur par defaut si pas présente dans l'environnement
-    - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{case, afficher_liste,
-               label=<:plugin:afficher_liste:>,
-               label_case=<:plugin:activer:>,
-               explication=<:plugin:explication_afficher_liste:>})]
-]#SET{valeur,#ENV{valeur_forcee,#ENV{valeur}}|is_null|?{#ENV{defaut},#ENV{valeur_forcee,#ENV{valeur}}}}
-<div class="choix[ (#ENV{class})]">
-       [(#ENV{disable}|non)<input type="hidden" name="#ENV{nom}" value="#ENV{valeur_non,''}" />]
-       <input type="checkbox" name="#ENV{nom}" class="checkbox" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ (#GET{valeur}|=={#ENV{valeur_oui,on}}|oui)checked="checked"] value="#ENV{valeur_oui,on}" [ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][ aria-describedby="(#ENV{describedby})"][ (#ENV*{attributs})]/>
-       [<label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[(#GET{valeur}|=={#ENV{valeur_oui,on}}|oui)class="on"]>(#ENV*{label_case})</label>]
-</div>
diff --git a/www/plugins/saisies/saisies/case.yaml b/www/plugins/saisies/saisies/case.yaml
deleted file mode 100644 (file)
index 8ac3a05..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-
-titre: '<:saisies:saisie_case_titre:>'
-description: '<:saisies:saisie_case_explication:>'
-icone: 'images/saisies_case.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'label_case'
-          label: '<:saisies:option_label_case_label:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'readonly'
-          label: '<:saisies:option_readonly_label:>'
-          explication: '<:saisies:option_readonly_explication:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'valeur_oui'
-          label: '<:saisies:option_valeur_oui_label:>'
-          explication: '<:saisies:option_valeur_oui_explication:>'
-          size: 50
-          defaut: 'on'
-      -
-        saisie: 'input'
-        options:
-          nom: 'valeur_non'
-          label: '<:saisies:option_valeur_non_label:>'
-          explication: '<:saisies:option_valeur_non_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'label_oui'
-          label: '<:saisies:option_label_oui_label:>'
-          explication: '<:saisies:option_label_oui_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'label_non'
-          label: '<:saisies:option_label_non_label:>'
-          explication: '<:saisies:option_label_non_explication:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'class'
-          label: '<:saisies:option_class_label:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_case_titre:>'
-    label_case: '<:saisies:saisie_case_titre:>'
-    # champs extras (definition du champ sql)
-    sql: "varchar(3) DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/checkbox.html b/www/plugins/saisies/saisies/checkbox.html
deleted file mode 100644 (file)
index 0671927..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-[(#REM) 
-
-  ### /!\ boucle POUR (spip Bonux) ###
-  
-  Parametres :
-  - datas : tableau de donnees cle=>valeur
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{checkbox, criteres,
-               label=<:plugin:choisir_criteres:>,
-               defaut=#ARRAY{0,cle1,1,cle3}, 
-               defaut=cle2,
-               datas=#ARRAY{
-                       cle1,valeur1,
-                       cle2,valeur2,
-                       cle3,valeur3}})]
-]
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV*{datas}|saisies_chaine2tableau}
-
-[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
-#SET{defaut, #ENV{defaut}|saisies_chaine2tableau}
-
-[(#REM) valeur doit être un tableau ! ]
-#SET{valeur, #ENV{valeur}|saisies_valeur2tableau}
-
-
-[(#REM) lorsque qu'on donne un 'disabled' qui est une chaine,
-       il faut la transformer en tableau. Ce tableau est vide si la chaine valait ''
-       sinon une clé 0 serait considérée disabled à tord
-]
-#SET{disabled,#ENV{disable}}
-[(#GET{disabled}|is_string|oui)
-       [(#GET{disabled}|strlen|non) #SET{disabled,#ARRAY} ]
-       [(#GET{disabled}|oui) #SET{disabled,#ARRAY|push{#GET{disabled}}} ]
-]
-[(#ENV{tout_selectionner}|oui)
-       <div class="[(#ENV{choix,choix})][ (#ENV{choix,choix})_tout_selectionner ][ (#ENV{class}) ]none-nojs">
-               <input type="checkbox" name="#ENV{nom}_tout" class="checkbox" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_tout" value="on" onChange="if (jQuery(this).prop('checked')==true) jQuery(this).parent('div').parent().find('input').prop('checked',true); else jQuery(this).parent('div').parent().find('input').prop('checked',false);"/>
-               <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_tout"[ class="(#ENV{label_class})"]><:saisies:tout_selectionner:></label>
-       </div>
-]
-
-<BOUCLE_checkbox(POUR){tableau #GET{datas}}>
-<div class="#ENV{choix,choix}[ (#ENV{choix,choix})_#CLE][ (#ENV{class})]">[(#SET{id,champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_[(#COMPTEUR_BOUCLE|concat{'-',#CLE}|md5)]})]
-       <input type="checkbox" name="#ENV{nom}[]" class="checkbox" id="#GET{id}"[ (#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)checked="checked"] value="#CLE"[(#CLE|in_array{#GET{disabled}}|oui) disabled="disabled"][ aria-describedby="(#ENV{describedby})"][ (#ENV*{attributs})] />
-       <label for="#GET{id}"[(#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)class="on"][(#ENV{attribut_title}|oui) title="#CLE"]>#VALEUR</label>
-</div>
-</BOUCLE_checkbox>
-[(#ENV{choix_alternatif}|oui)
-<div class="[(#ENV{choix,choix}) ]choix_alternatif[(#ENV{choix}|oui)[ (#ENV{choix})_alternatif]][ (#ENV{class})]">
-    <input name="#ENV{nom}\[choix_alternatif\]" id="[champ_(#ENV{id,#ENV{nom}}|saisie_nom2classe)_choix_alternatif]"[ value="(#ENV{datas}|saisies_trouver_choix_alternatif{#GET{valeur}})"] />
-    
-    <label for="[champ_(#ENV{id,#ENV{nom}}|saisie_nom2classe)_choix_alternatif]"[ class="(#ENV{label_class})"]>
-         [(#ENV{choix_alternatif_label, <:saisies:option_choix_alternatif_label_defaut:>})]
-    </label>
-    [<p class="explication">
-      (#ENV{choix_alternatif_explication})
-    </p>]
-</div>
-]
-</B_checkbox>
diff --git a/www/plugins/saisies/saisies/checkbox.yaml b/www/plugins/saisies/saisies/checkbox.yaml
deleted file mode 100644 (file)
index 3c09e91..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-
-titre: '<:saisies:saisie_checkbox_titre:>'
-description: '<:saisies:saisie_checkbox_explication:>'
-icone: 'images/saisies_checkbox.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'datas'
-          label: '<:saisies:option_datas_label:>'
-          explication: '<:saisies:option_datas_explication:>'
-          rows: 10
-          cols: 50
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-          rows: 10
-          cols: 50
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'choix_alternatif'
-          label: '<:saisies:option_choix_alternatif_label:>'
-          defaut: '' 
-      -
-        saisie: 'input'
-        options:
-          nom: 'choix_alternatif_label'
-          label: '<:saisies:option_choix_alternatif_label_label:>'
-          defaut: '<:saisies:option_choix_alternatif_label_defaut:>'
-      -
-        saisie: 'case'
-        options:
-          nom: 'attribut_title'
-          label: '<:saisies:option_attribut_title_label:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'readonly'
-          label: '<:saisies:option_readonly_label:>'
-          explication: '<:saisies:option_readonly_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_checkbox_titre:>'
-    datas:
-      choix1: '<:saisies:saisie_radio_defaut_choix1:>'
-      choix2: '<:saisies:saisie_radio_defaut_choix2:>'
-      choix3: '<:saisies:saisie_radio_defaut_choix3:>'
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/choisir_objet.html b/www/plugins/saisies/saisies/choisir_objet.html
deleted file mode 100644 (file)
index c97e7a7..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-[(#REM)
-       Saisie spécifique à SPIP 3
-       qui permet de choisir un objet parmis les
-       objets éditoriaux éditables de SPIP,
-       les affichant dans un sélecteur
-
-
-  Exemple d'appel :
-       [(#SAISIE{choisir_objet, mon_objet,
-               label=<:plugin:quel_objet:>})]
-
-]
-
-[(#REM) Attention, la valeur ou la valeur forcée peut être une chaine vide. On doit donc tester avec is_null. ]
-#SET{valeur,#ENV{valeur_forcee}|is_null|?{#ENV{valeur}|is_null|?{#ENV{defaut},#ENV{valeur}},#ENV{valeur_forcee}}}
-
-<select name="#ENV{nom}" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ size="(#ENV{size})"][ (#ENV*{attributs})]>
-       [(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_objets(POUR){tableau #REM|lister_tables_objets_sql}{cle !IN #ENV{exclus,''}}>[(#VALEUR{editable}|oui)
-       <option value="#CLE"[(#CLE|=={#GET{valeur}}|oui)selected="selected"]>[(#VALEUR{texte_objets}|_T)]</option>
-]</BOUCLE_objets>
-</select>
-
diff --git a/www/plugins/saisies/saisies/choisir_objets.html b/www/plugins/saisies/saisies/choisir_objets.html
deleted file mode 100644 (file)
index c29e332..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-[(#REM)
-       Saisie spécifique à SPIP 3
-       qui permet de choisir parmis des
-       objets éditoriaux éditables de SPIP,
-       les affichant avec des checkbox
-
-
-  Exemple d'appel :
-       [(#SAISIE{choisir_objets, gis_objets,
-               label=<:gis:cfg_lbl_activer_objets:>,
-               defaut=#LISTE{spip_articles,spip_rubriques},
-               exclus=spip_gis})]
-
-]
-[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
-#SET{defaut, #ENV{defaut}|saisies_chaine2tableau}
-
-[(#REM) valeur doit être un tableau ! ]
-#SET{valeur, #ENV{valeur,#GET{defaut}}|saisies_valeur2tableau}
-#INCLURE{fond=formulaires/inc-choisir-objets,name=#ENV{nom},selected=#GET{valeur},exclus=#ENV{exclus}}
diff --git a/www/plugins/saisies/saisies/choisir_objets_edit.html b/www/plugins/saisies/saisies/choisir_objets_edit.html
deleted file mode 100644 (file)
index 94dc4bd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-[(#REM)
-    Saisie spécifique à SPIP 3
-    qui permet de choisir parmis des
-    objets éditoriaux éditables de SPIP,
-    les affichant avec des checkbox
-]
-
-[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
-#SET{defaut, #ENV{defaut}|saisies_chaine2tableau}
-
-[(#REM) valeur doit être un tableau ! ]
-#SET{valeur, #ENV{valeur}|saisies_valeur2tableau}
-
-<BOUCLE_objets(POUR){tableau #REM|lister_tables_objets_edit}{cle !IN #ENV{exclus,''}}>
-#SET{id,#ENV{nom}|replace{\W,'_'}|concat{'_',#VALEUR{url_edit}}}
-<div class="choix choix_#VALEUR{url_edit}">
-    <input type="checkbox"  id="#GET{id}" name="#ENV{nom}\[\]" value="#VALEUR{url_edit}"[(#ENV{selected}|=={all}|ou{#VALEUR{url_edit}|in_any{#ENV{selected}}})checked="checked"] />
-    <label for="#GET{id}">[(#VALEUR{texte_objets}|_T)]</label>
-</div>
-</BOUCLE_objets>
-<input type="hidden" name="#ENV{nom}[]" value="" />
diff --git a/www/plugins/saisies/saisies/couleur.html b/www/plugins/saisies/saisies/couleur.html
deleted file mode 100644 (file)
index 40b4d2d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-[(#REM)\r
-\r
-    ### /!\ En Couleur si plugin Palette ###\r
-       \r
-       Memes parametres que saisies/input, mais redefinit\r
-       size et class.\r
-]\r
-[(#INCLURE{fond=saisies/input,\r
-                       env,\r
-            type=#HTML5|?{color,text},\r
-            size=7,\r
-            class=[(#ENV{readonly}|?{[(#ENV{class}) ]text,[(#ENV{class}) ]palette})]})]\r
diff --git a/www/plugins/saisies/saisies/date.html b/www/plugins/saisies/saisies/date.html
deleted file mode 100644 (file)
index ecbe13e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-[(#REM)
-       Zone de saisie de date utilsant le dateur de Bonux si présent.
-       Sur les sites en HTML5, utilise type="date"
-       sur le input, et type="text" par défaut pour les autres.
-       Pour tous on utilise class="date" et class="heure" pour activer le dateur.
-
-       La valeur fournie peut être :
-       - au format spip jj/mm/aaaa (date uniquement)
-       - au format SQL aaaa-mm-jj (date uniquement)
-       - au format SQL aaaa-mm-jj hh:mm:ss (date et heure)
-       - un tableau avec une entrée "date" et une entrée "heure" séparée, au format SQL (date et heure obligatoire)
-
-       Pour utiliser les heures, il faut utiliser l'option "horaire=oui".
-
-       La date est proposée à l'affichage au format jj/mm/aaaa.
-
-       La valeur retournée n'est pas nécessairement au format SQL.
-       Le cas échéant, il faut la normaliser avant enregistrement en base.
-]
-
-[(#REM) Initialisation de la valeur ]
-#SET{autodater,''}
-[(#ENV{class}|=={'autodater'}|oui)
-       #SET{autodater,#VAL{Y-m-d H:i:s}|date}
-]
-#SET{valeur,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#GET{autodater}}}}}
-
-[(#REM) Regex de date SQL ]
-#SET{date_sql,"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]( [0-9][0-9]:[0-9][0-9]:[0-9][0-9])?"}
-
-[(#REM) Si la valeur est un tableau, on considère que c'est date et heure dans un format déjà reconnu (j/m/a ou SQL) ]
-[(#GET{valeur}|is_array|oui)
-       #SET{date, #GET{valeur/date}}
-       #SET{heure, #GET{valeur/heure}}
-]
-
-[(#REM) Si la valeur est une chaîne, on regarde si SQL ]
-[(#GET{valeur}|is_string|oui)
-       [(#REM) Par défaut (date uniquement au format SPIP) la date c'est toute la valeur ]
-       #SET{date, #GET{valeur}}
-       #SET{heure, ''}
-
-       [(#REM) Si c'est bien une date SQL ]
-       [(#GET{valeur}|match{#GET{date_sql}}|oui)
-               [(#REM) Si la date est complètement 0, on met des valeurs vides ]
-               [(#GET{valeur}|=={0000-00-00 00:00:00}|oui)
-                       #SET{date, ''}
-                       #SET{heure, ''}
-               ]
-               [(#GET{valeur}|=={0000-00-00 00:00:00}|non)
-                       #SET{date, #GET{valeur}|affdate{d/m/Y}}
-                       #SET{heure, #GET{valeur}|affdate{H:i}}
-               ]
-       ]
-]
-
-[(#INCLURE{fond=saisies/input,
-       env,
-       nom=#ENV{nom}[(#ENV{horaire}|?{\[date\]})],
-       valeur=#GET{date},
-       type=text,
-       class=[(#ENV{class}) ]date})]
-[(#ENV{horaire}|oui)
-[(#INCLURE{fond=saisies/input,
-       env,
-       nom=#ENV{nom}\[heure\],
-       valeur=#GET{heure},
-       size=4,
-       maxlength=5,
-       class=[(#ENV{class}) ]heure})]
-]
-[(#ENV{disable}|non|et{#ENV{readonly}|non})[(#INCLURE{fond=formulaires/dateur/inc-dateur, heure_pas=#ENV{heure_pas,30}})]]
diff --git a/www/plugins/saisies/saisies/date.yaml b/www/plugins/saisies/saisies/date.yaml
deleted file mode 100644 (file)
index bab933d..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-\r
-titre: '<:saisies:saisie_date_titre:>'\r
-description: '<:saisies:saisie_date_explication:>'\r
-icone: 'images/saisies_date.png'\r
-options:\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'description'\r
-      label: '<:saisies:option_groupe_description:>'\r
-    saisies:\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'horaire'\r
-          label: '<:saisies:option_horaire_label:>'\r
-          label_case: '<:saisies:option_horaire_label_case:>'\r
-          valeur_oui: 'oui'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'label'\r
-          label: '<:saisies:option_label_label:>'\r
-          explication: '<:saisies:option_label_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'defaut'\r
-          label: '<:saisies:option_defaut_label:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'explication'\r
-          label: '<:saisies:option_explication_label:>'\r
-          explication: '<:saisies:option_explication_explication:>'\r
-          size: 50\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'utilisation'\r
-      label: '<:saisies:option_groupe_utilisation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'selection'\r
-        options:\r
-          nom: 'heure_pas'\r
-          label: '<:saisies:option_heure_pas_label:>'\r
-          explication: '<:saisies:option_heure_pas_explication:>'\r
-          datas:\r
-            1: '1 minute'\r
-            2: '2 minutes'\r
-            5: '5 minutes'\r
-            15: '15 minutes'\r
-            30: '30 minutes'\r
-          defaut: 30\r
-        verifier:\r
-          type: 'entier'\r
-          options:\r
-            min: 1\r
-            max: 30\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable'\r
-          label: '<:saisies:option_disable_label:>'\r
-          explication: '<:saisies:option_disable_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable_avec_post'\r
-          label: '<:saisies:option_disable_avec_post_label:>'\r
-          explication: '<:saisies:option_disable_avec_post_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'readonly'\r
-          label: '<:saisies:option_readonly_label:>'\r
-          explication: '<:saisies:option_readonly_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'affichage'\r
-      label: '<:saisies:option_groupe_affichage:>'\r
-    saisies:\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si'\r
-          label: '<:saisies:option_afficher_si_label:>'\r
-          explication: '<:saisies:option_afficher_si_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si_remplissage'\r
-          label: '<:saisies:option_afficher_si_remplissage_label:>'\r
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'attention'\r
-          label: '<:saisies:option_attention_label:>'\r
-          explication: '<:saisies:option_attention_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'info_obligatoire'\r
-          label: '<:saisies:option_info_obligatoire_label:>'\r
-          explication: '<:saisies:option_info_obligatoire_explication:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'class'\r
-          label: '<:saisies:option_class_label:>'\r
-          size: 50\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'validation'\r
-      label: '<:saisies:option_groupe_validation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'obligatoire'\r
-          label: '<:saisies:option_obligatoire_label:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'erreur_obligatoire'\r
-          label: '<:saisies:option_erreur_obligatoire_label:>'\r
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'\r
-defaut:\r
-  options:\r
-    label: '<:saisies:saisie_date_titre:>'\r
-    size: 40\r
-    # champs extras (definition du champ sql)\r
-    sql: "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"\r
-  verifier:\r
-    type: 'date'\r
-    options:\r
-      normaliser: 'datetime'\r
diff --git a/www/plugins/saisies/saisies/date_jour_mois_annee.html b/www/plugins/saisies/saisies/date_jour_mois_annee.html
deleted file mode 100644 (file)
index d280e2f..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-[(#REM)
-
-       /!\ Cette saisie nécessite du javascript pour fonctionner.
-               En absence de JS, seul un champ de saisie texte est affiché.
-
-       Cette saisie cree 3 champs a partir d'une date au format datetime mysql.
-       A chaque modification, un champ cache est modifie, contenant la date au format datetime.
-
-       Options :
-       - label_(jour|mois|annee)
-       - size_(jour|mois|annee)
-       - maxlength_(jour|mois|annee)
-       - datetime, par défaut oui. Si pas oui, utilisera une date au format aaaa-mm-jj au lieu d'un datetime mysql
-
-       [(#SAISIE{date_jour_mois_annee, date_naissance,
-               label=Date de naissance
-       })]
-]
-#SET{valeur,#ENV{valeur,#ENV{defaut}}}
-[(#SET{id,[(#ENV**|md5|substr{0,6})]})]
-<input type='text' name="#ENV{nom}" id="#GET{id}" value="[(#GET{valeur}|sinon{0000-00-00[(#ENV{datetime,oui}|=={oui}|oui)00:00:00]})]" class='datetime' />
-
-<script type='text/javascript'>
-function activer_dateur_#GET{id}() {
-       jour = '\
-               <div class="choix">\
-                       [<label for="champ_#ENV{nom}_jour">(#ENV{label_jour,<:saisies:label_jour:>})</label>]\
-                       <input type="text" name="#ENV{nom}_jour" class="text date_jour[ (#ENV{class})]" id="champ_#ENV{nom}_jour"[ value="(#GET{valeur}|journum)"][ size="(#ENV{size_jour, 2})"][ maxlength="(#ENV{maxlength_jour, 2})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][(#ENV{obligatoire}|et{#HTML5}|oui) required="required"] onChange="saisies_date_jour_mois_annee_changer_date(this, \'#ENV{datetime,oui}\');" onkeyup="if (this.value.length == 2 && jQuery.inArray(event.keyCode, [9,16]) == -1) {jQuery(this).parent().next().find(\'input\').focus();}" />\
-               </div>\
-       ';
-
-       mois = '\
-               <div class="choix">\
-                       [<label for="champ_#ENV{nom}_mois">(#ENV{label_mois,<:saisies:label_mois:>})</label>]\
-                       <input type="text" name="#ENV{nom}_mois" class="text date_mois[ (#ENV{class})]" id="champ_#ENV{nom}_mois"[ value="(#GET{valeur}|mois)"][ size="(#ENV{size_mois, 2})"][ maxlength="(#ENV{maxlength_mois, 2})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][(#ENV{obligatoire}|et{#HTML5}|oui) required="required"] onChange="saisies_date_jour_mois_annee_changer_date(this, \'#ENV{datetime,oui}\');" onkeyup="if (this.value.length == 2 && jQuery.inArray(event.keyCode, [9,16]) == -1) {jQuery(this).parent().next().find(\'input\').focus();}" />\
-               </div>\
-       ';
-
-       annee = '\
-               <div class="choix">\
-                       [<label for="champ_#ENV{nom}_annee">(#ENV{label_annee,<:saisies:label_annee:>})</label>]\
-                       <input type="text" name="#ENV{nom}_annee" class="text date_annee[ (#ENV{class})]" id="champ_#ENV{nom}_annee"[ value="(#GET{valeur}|annee)"][ size="(#ENV{size_annee, 4})"][ maxlength="(#ENV{maxlength_annee, 4})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][(#ENV{obligatoire}|et{#HTML5}|oui) required="required"] onChange="saisies_date_jour_mois_annee_changer_date(this, \'#ENV{datetime,oui}\');" />\
-               </div>\
-       ';
-
-       if(!$.browser.msie || parseInt($.browser.version) >= 9)
-               jQuery('##GET{id}')[0].type = 'hidden';
-       else
-               jQuery('##GET{id}').css({'height':'0px','width':'0px','border':'none'});
-       jQuery('##GET{id}').after(jour + mois + annee);
-}
-
-jQuery(document).ready(function(){
-       activer_dateur_#GET{id}();
-});
-</script>
diff --git a/www/plugins/saisies/saisies/destinataires.html b/www/plugins/saisies/saisies/destinataires.html
deleted file mode 100644 (file)
index d7ef341..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-       #SET{type_choix, #ENV{type_choix,tous}}
-#SET{choix_destinataires, #ENV*{choix_destinataires,#ARRAY}}
-#SET{erreurs,#ENV**{erreurs/#ENV{nom}}}
-<BOUCLE_choix(CONDITION){si #GET{choix_destinataires}|count|<{2}|ou{#GET{type_choix}|=={tous}}}>
-<[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})] class="editer editer_[(#ENV{nom})][ (#ENV{obligatoire})][ (#GET{erreurs}|oui)erreur][ (#ENV{conteneur_class,#ENV{li_class}})][ saisie_(#ENV{type_saisie})]" [(#ENV{tout_afficher}|!={oui}|?{style="display:none;"})][ data-id="(#ENV{id_saisie})"]>
-       #ENV*{inserer_debut}
-       [<label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]">(#ENV*{label})[<span class='obligatoire'>(#ENV{obligatoire}|oui)[(#ENV*{info_obligatoire}|is_null|?{<:info_obligatoire_02:>,#ENV*{info_obligatoire}})]</span>]</label>]
-       [<span class='erreur_message'>(#GET{erreurs})</span>]
-       [<p class='explication'>(#ENV*{explication})</p>]
-       [<em class='attention'>(#ENV*{attention})</em>]
-       [(#REM) Si 0 ou 1 destinataire possible ou si c'est tous, le destinataire est défini automatiquement ]
-       <BOUCLE_tous(AUTEURS){tous}{id_auteur IN #GET*{choix_destinataires}}{par num nom,nom}>
-       [(#ENV{tout_afficher}|!={oui}|oui)
-       <input type="hidden" name="#ENV{nom}\[\]" value="#ID_AUTEUR" />
-       ]
-       [(#ENV{tout_afficher}|!={oui}|non)
-       <div class="choix">
-               <input type="checkbox" name="#ENV{nom}\[\]" class="checkbox"
-                       readonly="readonly" checked="checked"
-                       id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_destinataire#ID_AUTEUR"
-                       value="#ID_AUTEUR"[ (#ID_AUTEUR|in_array{#ENV{valeur_forcee,#ENV*{valeur,#ENV*{defaut,#ARRAY}}}}|oui)checked="checked"]
-               />
-               <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_destinataire#ID_AUTEUR">#NOM</label>
-       </div>
-       ]
-       </BOUCLE_tous>
-       <input [(#ENV{tout_afficher}|!={oui}|?{type="hidden",type="text" readonly="readonly"})] name="#ENV{nom}[]" value="1" />
-       <//B_tous>
-       #ENV*{inserer_fin}
-</[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})]>
-</BOUCLE_choix>
-
-[(#SET{valeur,[(#ENV*{valeur}|is_array|?{#ENV*{valeur},[(#ENV*{valeur}|explode{','})]})]})]
-<[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})] class="editer editer_[(#ENV{nom})][ (#ENV{obligatoire})][ (#GET{erreurs}|oui)erreur][ (#ENV{conteneur_class,#ENV{li_class}})][ saisie_(#ENV{type_saisie})]">
-
-       #ENV*{inserer_debut}
-       [<label[(#GET{type_choix}|=={un}|ou{#GET{type_choix}|=={un_radio}}|oui)for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"]>(#ENV*{label})[<span class='obligatoire'>(#ENV{obligatoire}|oui)[(#ENV*{info_obligatoire}|is_null|?{<:info_obligatoire_02:>,#ENV*{info_obligatoire}})]</span>]</label>]
-       [<span class='erreur_message'>(#GET{erreurs})</span>]
-       [<p class='explication'>(#ENV*{explication})</p>]
-       [<em class='attention'>(#ENV*{attention})</em>]
-       [(#REM) Sinon on propose le choix, en select ou en checkbox suivant l'option "type_choix" ]
-       <B_destinataires>
-               [(#GET{type_choix}|=={un}|oui)
-                       <select name="#ENV{nom}\[\]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]">
-                               [<option value="">(#ENV{option_intro})</option>]
-               ]
-               <BOUCLE_destinataires(AUTEURS){tous}{id_auteur IN #GET*{choix_destinataires}}{par num nom,nom}>
-                       [(#GET{type_choix}|=={plusieurs}|ou{#GET{type_choix}|=={un_radio}}|oui)
-                               <div class="choix">
-                                       <input type="[(#GET{type_choix}|=={plusieurs}|?{checkbox,radio})]" name="#ENV{nom}\[\]" class="checkbox"
-                                               id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_destinataire#ID_AUTEUR"
-                                               value="#ID_AUTEUR"[ (#ID_AUTEUR|in_array{#ENV*{valeur_forcee,#GET*{valeur,#ENV*{defaut,#ARRAY}}}}|oui)checked="checked"]
-                                       />
-                                       <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_destinataire#ID_AUTEUR"[(#ID_AUTEUR|in_array{#ENV*{valeur_forcee,#GET*{valeur,#ENV*{defaut,#ARRAY}}}}|oui)class="on"]>#NOM</label>
-                               </div>
-                       ]
-                       [(#GET{type_choix}|=={un}|oui)
-                               <option value="#ID_AUTEUR"[ (#ID_AUTEUR|in_array{#ENV{valeur_forcee,#GET*{valeur,#ENV*{defaut,#ARRAY}}}}|oui)selected="selected"]>#NOM</option>
-                       ]
-
-               </BOUCLE_destinataires>
-               [(#GET{type_choix}|=={un}|oui)
-                       </select>
-               ]
-       </B_destinataires>
-       #ENV*{inserer_fin}
-</[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})]>
-<//B_choix>
diff --git a/www/plugins/saisies/saisies/destinataires.yaml b/www/plugins/saisies/saisies/destinataires.yaml
deleted file mode 100644 (file)
index 20a4304..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-
-titre: '<:saisies:saisie_destinataires_titre:>'
-description: '<:saisies:saisie_destinataires_explication:>'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'auteurs'
-        options:
-          nom: 'choix_destinataires'
-          label: '<:saisies:option_choix_destinataires_label:>'
-          explication: '<:saisies:option_choix_destinataires_explication:>'
-          multiple: 'oui'
-          option_statut: 'oui'
-      -
-        saisie: 'radio'
-        options:
-          nom: 'type_choix'
-          datas:
-            tous: '<:saisies:option_type_choix_tous:>'
-            un: '<:saisies:option_type_choix_un:>'
-            un_radio: '<:saisies:option_type_choix_un_radio:>'
-            plusieurs: '<:saisies:option_type_choix_plusieurs:>'
-          defaut: 'tous'
-      -
-        saisie: 'input'
-        options:
-          nom: 'option_intro'
-          label: '<:saisies:option_option_destinataire_intro_label:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obli'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_destinataires_titre:>'
-    choix_destinataires: [1,2,3,4]
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/email.html b/www/plugins/saisies/saisies/email.html
deleted file mode 100644 (file)
index 35109c0..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[(#REM) \r
-               \r
-               Zone de saisie d'adresse mail. Sur les sites en HTML5, utilise type="email"\r
-               sur le input, et type="text" par défaut pour les autres.\r
-               Dans ce dernier cas, on renseigne quand même class="email".\r
-               \r
-][(#INCLURE{fond=saisies/input,\r
-                       env,\r
-            type=#HTML5|?{email,text},\r
-            class=[(#HTML5|?{[(#ENV{class}) ],[(#ENV{class}) ]email})]})]\r
diff --git a/www/plugins/saisies/saisies/email.yaml b/www/plugins/saisies/saisies/email.yaml
deleted file mode 100644 (file)
index 05f3c75..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-\r
-titre: '<:saisies:saisie_email_titre:>'\r
-description: '<:saisies:saisie_email_explication:>'\r
-icone: 'images/saisies_email.png'\r
-options:\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'description'\r
-      label: '<:saisies:option_groupe_description:>'\r
-    saisies:\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'label'\r
-          label: '<:saisies:option_label_label:>'\r
-          explication: '<:saisies:option_label_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'defaut'\r
-          label: '<:saisies:option_defaut_label:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'placeholder'\r
-          label: '<:saisies:option_placeholder_label:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'explication'\r
-          label: '<:saisies:option_explication_label:>'\r
-          explication: '<:saisies:option_explication_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'type'\r
-          label_case: '<:saisies:option_type_password:>'\r
-          valeur_oui: 'password'\r
-          valeur_non: 'text'\r
-          defaut: 'text'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'utilisation'\r
-      label: '<:saisies:option_groupe_utilisation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'maxlength'\r
-          label: '<:saisies:option_maxlength_label:>'\r
-          explication: '<:saisies:option_maxlength_explication:>'\r
-        verifier:\r
-          type: 'entier'\r
-          options:\r
-            min: 1\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'disable'\r
-          label_case: '<:saisies:option_disable_label:>'\r
-          explication: '<:saisies:option_disable_explication:>'\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'disable_avec_post'\r
-          label_case: '<:saisies:option_disable_avec_post_label:>'\r
-          explication: '<:saisies:option_disable_avec_post_explication:>'\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'readonly'\r
-          label_case: '<:saisies:option_readonly_label:>'\r
-          explication: '<:saisies:option_readonly_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'affichage'\r
-      label: '<:saisies:option_groupe_affichage:>'\r
-    saisies:\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si'\r
-          label: '<:saisies:option_afficher_si_label:>'\r
-          explication: '<:saisies:option_afficher_si_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si_remplissage'\r
-          label: '<:saisies:option_afficher_si_remplissage_label:>'\r
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'attention'\r
-          label: '<:saisies:option_attention_label:>'\r
-          explication: '<:saisies:option_attention_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'info_obligatoire'\r
-          label: '<:saisies:option_info_obligatoire_label:>'\r
-          explication: '<:saisies:option_info_obligatoire_explication:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'class'\r
-          label: '<:saisies:option_class_label:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'size'\r
-          label: '<:saisies:option_size_label:>'\r
-          explication: '<:saisies:option_size_explication:>'\r
-        verifier:\r
-          type: 'entier'\r
-          options:\r
-            min: 1\r
-      -\r
-        saisie: 'radio'\r
-        options:\r
-          nom: 'autocomplete'\r
-          label: '<:saisies:option_autocomplete_label:>'\r
-          explication: '<:saisies:option_autocomplete_explication:>' \r
-          datas:\r
-            defaut: '<:saisies:option_autocomplete_defaut:>'\r
-            on: '<:saisies:option_autocomplete_on:>'\r
-            off: '<:saisies:option_autocomplete_off:>'\r
-          defaut: 'defaut'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'validation'\r
-      label: '<:saisies:option_groupe_validation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'obligatoire'\r
-          label_case: '<:saisies:option_obligatoire_label:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'erreur_obligatoire'\r
-          label: '<:saisies:option_erreur_obligatoire_label:>'\r
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'\r
-defaut:\r
-  options:\r
-    label: '<:saisies:saisie_email_titre:>'\r
-    size: 40\r
-    # champs extras (definition du champ sql)\r
-    sql: "text DEFAULT '' NOT NULL"\r
-  verifier:\r
-    type: 'email'\r
diff --git a/www/plugins/saisies/saisies/explication.html b/www/plugins/saisies/saisies/explication.html
deleted file mode 100644 (file)
index a29a36d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})] class="editer pleine_largeur editer_explication[ explication_(#ENV{nom})][ (#ENV{conteneur_class,#ENV{li_class}})][ saisie_(#ENV{type_saisie})]"[ data-id="(#ENV{id_saisie})"]>
-       #ENV*{inserer_debut}
-       <div class="explication">
-               [(#ENV*{texte}|propre)]
-       </div>
-       #ENV*{inserer_fin}
-</[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})]>
diff --git a/www/plugins/saisies/saisies/explication.yaml b/www/plugins/saisies/saisies/explication.yaml
deleted file mode 100644 (file)
index 6aeed47..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-
-titre: '<:saisies:saisie_explication_titre:>'
-description: '<:saisies:saisie_explication_explication:>'
-icone: 'images/saisies_explication.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'texte'
-          label: '<:saisies:saisie_explication_titre:>'
-          explication: '<:saisies:saisie_explication_explication:>'
-          class: 'inserer_barre_edition'
-          cols: 40
-          rows: 5
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'conteneur_class'
-          label: '<:saisies:option_class_label:>'
-          size: 50
-defaut:
-  options:
-    texte: '<:saisies:saisie_explication_titre:>'
-    # champs extras (definition du champ sql)
-    # Non, cette saisie n'a rien à saisir en bdd !
-    # sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/fieldset.html b/www/plugins/saisies/saisies/fieldset.html
deleted file mode 100644 (file)
index f9ba0da..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#SET{pliable,#ENV{pliable}|et{#ENV{pliable}|!={non}}|?{'pliable', ''}}
-#SET{plie,#ENV{plie}|et{#ENV{plie}|!={non}}|?{'plie', ''}}
-
-[(#REM) S'il y a des erreurs pour au moins un des champs internes, on ne plie pas ! ]
-#SET{champs_internes, #ENV{saisies}|saisies_lister_par_nom}
-#SET{erreurs, #ENV**{erreurs}|sinon{#ARRAY}}
-#SET{erreurs_fieldset, #GET{erreurs}|array_intersect_key{#GET{champs_internes}}}
-[(#GET{erreurs_fieldset}|oui)
-       #SET{plie, ''}
-]
-#SET{erreur_ici,#ENV**{erreurs/#ENV{nom}}}
-
-<[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})] class="fieldset[ fieldset_(#ENV{nom})][ (#ENV{conteneur_class,#ENV{li_class}})][ saisie_(#ENV{type_saisie})][ (#GET{pliable})[ (#GET{plie})]]"[ data-id="(#ENV{id_saisie})"]>
-       #ENV*{inserer_debut}
-       <fieldset>
-
-               [(#ENV{label}|oui)
-                       [(#REM) Récupérer le tag qui sera utilisé pour la légende ]
-                       [(#SET{tag_titre_defaut,[<(#VAL{"{{{ titre }}}"}|propre|replace{"\n",""}|replace{"<(\S*).*>",$1,i})>]})]
-                       [(#SET{tag, [(#ENV*{tagfield,#GET{tag_titre_defaut}}|inserer_attribut{class,legend})]})]
-                       [(#INCLURE{fond=inclure/fieldset_legend, env}|wrap{#GET{tag}})]
-               ]
-
-               [<span class='erreur_message'>(#GET{erreur_ici})</span>]
-               [<p class='explication'>(#ENV*{explication})</p>]
-               [(#ENV{saisies}|is_array|oui)
-               <[(#ENV{saisies_base_conteneur,#DIV|sinon{ul}})] class="editer-groupe">
-                       #INCLURE{fond=#ENV{fond_generer,"inclure/generer_saisies"}, env, saisies=#ENV{saisies}, from_fieldset='on'}
-               </[(#ENV{saisies_base_conteneur,#DIV|sinon{ul}})]>
-               ]
-       </fieldset>
-       #ENV*{inserer_fin}
-</[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})]>
diff --git a/www/plugins/saisies/saisies/fieldset.yaml b/www/plugins/saisies/saisies/fieldset.yaml
deleted file mode 100644 (file)
index 2d3789c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-
-titre: '<:saisies:saisie_fieldset_titre:>'
-description: '<:saisies:saisie_fieldset_explication:>'
-icone: 'images/saisies_fieldset.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'case'
-        options:
-          nom: 'pliable'
-          label: '<:saisies:option_pliable_label:>'
-          label_case: '<:saisies:option_pliable_label_case:>'
-      -
-        saisie: 'case'
-        options:
-          nom: 'plie'
-          label: '<:saisies:option_plie_label:>'
-          label_case: '<:saisies:option_plie_label_case:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'conteneur_class'
-          label: '<:saisies:option_class_label:>'
-          size: 50
-defaut:
-  options:
-    label: '<:saisies:saisie_fieldset_titre:>'
-    # champs extras (definition du champ sql)
-    # Non, cette saisie n'a rien à saisir en bdd !
-    # sql: "text DEFAULT '' NOT NULL"
-  saisies: []
diff --git a/www/plugins/saisies/saisies/groupe_mots.html b/www/plugins/saisies/saisies/groupe_mots.html
deleted file mode 100644 (file)
index a363ee2..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-[(#REM) 
-
-  Parametres :
-  - class : classe(s) css ajoutes au select
-  - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple
-       Dans le cas multiple, defaut et valeur doivent être un array, sinon un int
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-    (seulement si non multiple)
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - table_liaison : permet de ne lister que les groupes de mots liés à une table en particulier
-    (champs tables_liees de spip_groupes_mots)
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  - groupes_exclus : tableau de groupes exclus
-  - afficher_id_groupe : afficher le numero du groupe en plus de son titre
-
-  Exemple d'appel :
-       [(#SAISIE{groupe_mots,groupes,
-               label=<:plugin:secteur_region:>,
-               multiple=oui,
-               table_liaison=articles})] 
-]
-<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple" size="#ENV{size,10}"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
-       [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)
-               <option value="0">[(#ENV{option_intro})]</option>]
-       <BOUCLE_groupes(GROUPES_MOTS){id_groupe !IN #ENV{groupes_exclus,#ARRAY}}{par num titre, titre}{tables_liees==#VAL{'(^|,)'}|concat{#ENV{table_liaison,.*},'($|,)'}}{tout}>
-               [(#ENV{multiple}|oui)
-               <option value="#ID_GROUPE"[(#ID_GROUPE|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]>#TITRE[ \(<:info_numero_abbreviation:>(#ENV{afficher_id_groupe,''}|?{#ID_GROUPE})\)]</option>]
-               [(#ENV{multiple}|non)
-               <option value="#ID_GROUPE"[(#ID_GROUPE|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#TITRE[ \(<:info_numero_abbreviation:>(#ENV{afficher_id_groupe,''}|?{#ID_GROUPE})\)]</option>]
-       </BOUCLE_groupes>
-</select>
diff --git a/www/plugins/saisies/saisies/hidden.html b/www/plugins/saisies/saisies/hidden.html
deleted file mode 100644 (file)
index 0f5bef6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})] class="editer editer_[(#ENV{nom})][ (#ENV{conteneur_class,#ENV{li_class}})][ saisie_(#ENV{type_saisie})]" [(#ENV{tout_afficher}|!={oui}|?{style="display:none;"})][ data-id="(#ENV{id_saisie})"]>
-       #ENV*{inserer_debut}
-       [(#ENV{tout_afficher}|!={oui}|oui)
-       <input type="hidden"[ class="(#ENV{class})"] name="#ENV{nom}" id="champ_[(#ENV{nom}|saisie_nom2classe)]" value="#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}"[ (#ENV*{attributs})] />
-       ]
-       [(#ENV{tout_afficher}|!={oui}|non)
-       [<label for="champ_[(#ENV{nom}|saisie_nom2classe)]">(#ENV*{label})[<span class='obligatoire'>(#ENV{obligatoire}|oui)[(#ENV*{info_obligatoire}|is_null|?{<:info_obligatoire_02:>,#ENV*{info_obligatoire}})]</span>]</label>]
-       <input type="text"[ class="(#ENV{class})"] name="#ENV{nom}" id="champ_[(#ENV{nom}|saisie_nom2classe)]" value="#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}" readonly="readonly" />
-       ]
-       
-       #ENV*{inserer_fin}
-</[(#ENV{saisies_base_conteneur,#DIV|sinon{li}})]>
diff --git a/www/plugins/saisies/saisies/hidden.yaml b/www/plugins/saisies/saisies/hidden.yaml
deleted file mode 100644 (file)
index 679767d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-titre: '<:saisies:saisie_hidden_titre:>'
-description: '<:saisies:saisie_hidden_explication:>'
-icone: 'images/saisies_hidden.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'class'
-          label: '<:saisies:option_class_label:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-          size: 50
-defaut:
-  options:
-    label: '<:saisies:saisie_hidden_titre:>'
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/input.html b/www/plugins/saisies/saisies/input.html
deleted file mode 100644 (file)
index 136323f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-[(#REM) \r
-\r
-  Parametres supplementaire :\r
-  - ** datas : tableau de donnees indice=>valeur\r
-  - defaut : valeur par defaut du parametre\r
-  - type : type de l'input (defaut: text)\r
-  - class : classe(s) css ajoutes a l'input\r
-  - size : taille du champ\r
-  - maxlength : nombre de caracteres maximum\r
-  - disable : champ insaisissable ? 'oui' (defaut : '')\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement\r
-  - autofocus : indique si le champ prend le focus a l'affichage (HTML5 requis)\r
-  - placeholder : texte du placeholder\r
-  \r
-  Exemple d'appel :\r
-       [(#SAISIE{input,couleur_foncee,\r
-               label=<:spa:couleur_foncee:>,\r
-               size=7,\r
-               datas=#ARRAY{\r
-                               0,valeur0,\r
-                               1,valeur1,\r
-                               2,valeur2}})]\r
-]\r
-\r
-#SET{type,#ENV{type,text}}\r
-\r
-[(#REM) datas peut être une chaine qu'on sait décomposer ]\r
-#SET{datas, #ENV*{datas}}\r
-#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}\r
-\r
-[(#REM) Pas de HTML5, pas de datas]\r
-#SET{datas, #HTML5|?{#GET{datas}}}\r
-\r
-[(#REM)  l'attribut autocomplete ne peut avoir pour valeur que on ou off ]\r
-#SET{val_autocomplete, #ARRAY}\r
-#SET{val_autocomplete, #GET{val_autocomplete}|push{on}}\r
-#SET{val_autocomplete, #GET{val_autocomplete}|push{off}}\r
-\r
-[(#REM) permettre de donner un identifiant de list specifique en option de la saisie\r
-]#SET{list_id,#ENV{list}}\r
-<B_selection>\r
-[(#SET{list_id,[(#GET{list_id,[champ_(#ENV{nom})_datas]})]})]\r
-<datalist id="#GET{list_id}">\r
-<BOUCLE_selection(POUR){tableau #GET{datas}}\r
->[     <option value="(#VALEUR|attribut_html)"></option>\r
-]</BOUCLE_selection>\r
-</datalist>\r
-</B_selection>\r
-<input type="#GET{type}" name="#ENV{nom}" class="#GET{type}[ (#ENV{class})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ list="(#GET{list_id})"][ value="(#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}})"][ size="(#ENV{size})"][ maxlength="(#ENV{maxlength})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][ placeholder="(#ENV{placeholder})"][(#HTML5|oui)[(#ENV{obligatoire}|et{#ENV{obligatoire}|!={non}}|oui) required="required"][ min="(#ENV{min})"][ max="(#ENV{max})"][ step="(#ENV{step})"][(#ENV{autofocus}|et{#ENV{autofocus}|!={non}}|oui) autofocus="autofocus"]][(#GET{val_autocomplete}|find{#ENV{autocomplete}}|oui) autocomplete="#ENV{autocomplete}"][ aria-describedby="(#ENV{describedby})"][ (#ENV*{attributs})] />\r
diff --git a/www/plugins/saisies/saisies/input.yaml b/www/plugins/saisies/saisies/input.yaml
deleted file mode 100644 (file)
index efa8f79..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-\r
-titre: '<:saisies:saisie_input_titre:>'\r
-description: '<:saisies:saisie_input_explication:>'\r
-icone: 'images/saisies_input.png'\r
-options:\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'description'\r
-      label: '<:saisies:option_groupe_description:>'\r
-    saisies:\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'label'\r
-          label: '<:saisies:option_label_label:>'\r
-          explication: '<:saisies:option_label_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'defaut'\r
-          label: '<:saisies:option_defaut_label:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'placeholder'\r
-          label: '<:saisies:option_placeholder_label:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'explication'\r
-          label: '<:saisies:option_explication_label:>'\r
-          explication: '<:saisies:option_explication_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'type'\r
-          label_case: '<:saisies:option_type_password:>'\r
-          valeur_oui: 'password'\r
-          valeur_non: 'text'\r
-          defaut: 'text'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'utilisation'\r
-      label: '<:saisies:option_groupe_utilisation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'maxlength'\r
-          label: '<:saisies:option_maxlength_label:>'\r
-          explication: '<:saisies:option_maxlength_explication:>'\r
-        verifier:\r
-          type: 'entier'\r
-          options:\r
-            min: 1\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'disable'\r
-          label_case: '<:saisies:option_disable_label:>'\r
-          explication: '<:saisies:option_disable_explication:>'\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'disable_avec_post'\r
-          label_case: '<:saisies:option_disable_avec_post_label:>'\r
-          explication: '<:saisies:option_disable_avec_post_explication:>'\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'readonly'\r
-          label_case: '<:saisies:option_readonly_label:>'\r
-          explication: '<:saisies:option_readonly_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'affichage'\r
-      label: '<:saisies:option_groupe_affichage:>'\r
-    saisies:\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si'\r
-          label: '<:saisies:option_afficher_si_label:>'\r
-          explication: '<:saisies:option_afficher_si_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si_remplissage'\r
-          label: '<:saisies:option_afficher_si_remplissage_label:>'\r
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'attention'\r
-          label: '<:saisies:option_attention_label:>'\r
-          explication: '<:saisies:option_attention_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'info_obligatoire'\r
-          label: '<:saisies:option_info_obligatoire_label:>'\r
-          explication: '<:saisies:option_info_obligatoire_explication:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'class'\r
-          label: '<:saisies:option_class_label:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'size'\r
-          label: '<:saisies:option_size_label:>'\r
-          explication: '<:saisies:option_size_explication:>'\r
-        verifier:\r
-          type: 'entier'\r
-          options:\r
-            min: 1\r
-      -\r
-        saisie: 'radio'\r
-        options:\r
-          nom: 'autocomplete'\r
-          label: '<:saisies:option_autocomplete_label:>'\r
-          explication: '<:saisies:option_autocomplete_explication:>' \r
-          datas:\r
-            defaut: '<:saisies:option_autocomplete_defaut:>'\r
-            on: '<:saisies:option_autocomplete_on:>'\r
-            off: '<:saisies:option_autocomplete_off:>'\r
-          defaut: 'defaut'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'validation'\r
-      label: '<:saisies:option_groupe_validation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'case'\r
-        options:\r
-          nom: 'obligatoire'\r
-          label_case: '<:saisies:option_obligatoire_label:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'erreur_obligatoire'\r
-          label: '<:saisies:option_erreur_obligatoire_label:>'\r
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'\r
-defaut:\r
-  options:\r
-    label: '<:saisies:saisie_input_titre:>'\r
-    size: 40\r
-    # champs extras (definition du champ sql)\r
-    sql: "text DEFAULT '' NOT NULL"\r
diff --git a/www/plugins/saisies/saisies/mot.html b/www/plugins/saisies/saisies/mot.html
deleted file mode 100644 (file)
index 5e6e22e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-[(#REM) 
-
-  Parametres :
-  - class : classe(s) css ajoutes au select
-  - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple (seulement si non multiple)
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - id_groupe : groupe des mots clés à afficher
-                Note : si ce groupe de mot est configuré pour avoir plusieurs
-                mots possibles, alors une liste de cases à cocher est
-                affichée au lieu du sélecteur habituel.
-                Utiliser `forcer_select=oui` pour éviter ce comportement
-                (par exemple en utilisation avec Chosen)
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  - size : la taille du sélecteur (seulement si multiple)
-  - groupes_exclus : liste d'ids de groupe dont on ne veut pas les mots
-  
-  Exemple d'appel :
-       [(#SAISIE{mot, en_region,
-               label=<:plugin:en_region:>})]
-]
-<BOUCLE_multiples(GROUPES_MOTS){id_groupe}{unseul!=oui}{si #ENV{forcer_select}|non}>
-       [(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
-       #SET{defaut, #ENV{defaut}|saisies_chaine2tableau}
-       [(#REM) valeur doit être un tableau ! ]
-       #SET{valeur, #ENV{valeur}|saisies_valeur2tableau}
-       [(#REM) valeur doit être un tableau ! ]
-       #SET{valeur_forcee, #ENV{valeur_forcee}|saisies_valeur2tableau}
-       <BOUCLE_checkmots(MOTS){par num titre, titre}{id_groupe}>
-       <div class="choix choix_#ID_MOT[ (#ENV{class})]">[(#SET{id,champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_[(#ID_MOT|concat{'-',#ENV{nom}}|md5)]})]
-               [(#SET{checked,[(#ID_MOT|in_array{#GET{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)]})]
-               <input type="checkbox" name="#ENV{nom}[]" class="checkbox" id="#GET{id}"[ (#GET{checked})checked="checked"] value="#ID_MOT"[ (#ENV*{attributs})] />
-               <label for="#GET{id}"[(#GET{checked})class="on"]>#TITRE</label>
-       </div>
-       </BOUCLE_checkmots>
-</BOUCLE_multiples>
-
-#SET{groupe,''}
-<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple"[ size="(#ENV{size})"]][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
-[(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)
-       <option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_mots(MOTS){par id_groupe, num titre, titre}{id_groupe ?}{!id_groupe IN #ENV{groupes_exclus}}>[(#ENV{id_groupe,''}|non|et{#GET{groupe}|=={#ID_GROUPE}|non}|oui)
-       [(#GET{groupe}|intval|>{0}|oui)</optgroup>]
-       [<optgroup label="(#TYPE|attribut_html)">][(#SET{groupe,#ID_GROUPE})]]
-       [(#ENV{multiple}|non)<option value="#ID_MOT"[(#ID_MOT|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui)selected="selected"]>#TITRE</option>]
-       [(#ENV{multiple}|oui)<option value="#ID_MOT"[(#ID_MOT|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui)selected="selected"]>#TITRE</option>]
-</BOUCLE_mots>
-       [(#ENV{id_groupe,''}|non)
-       </optgroup>]
-</select>
-<//B_multiples>
diff --git a/www/plugins/saisies/saisies/mot.yaml b/www/plugins/saisies/saisies/mot.yaml
deleted file mode 100644 (file)
index 6433628..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-
-titre: '<:saisies:saisie_mot_titre:>'
-description: '<:saisies:saisie_mot_explication:>'
-icone: 'images/saisies_mot.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'groupe_mots'
-        options:
-          nom: 'id_groupe'
-          label: '<:saisies:option_id_groupe_label:>'
-          afficher_id_groupe: ' '
-      -
-        saisie: 'input'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'option_intro'
-          label: '<:saisies:option_option_intro_label:>'
-          size: 50
-      -
-        saisie: 'case'
-        options:
-          nom: 'cacher_option_intro'
-          label_case: '<:saisies:option_cacher_option_intro_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'size'
-          label: '<:saisies:option_size_label:>'
-          explication: '<:saisies:option_size_explication:>'
-        verifier:
-          type: 'entier'
-          options:
-            min: 1
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_mot_titre:>'
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/oui_non.html b/www/plugins/saisies/saisies/oui_non.html
deleted file mode 100644 (file)
index 0eac98f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-[(#REM) 
-
-  Action :
-  - Rempli "on" si oui, "" si non.
-  
-  Parametres :
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{oui_non, afficher_liste,
-               label=<:plugin:afficher_liste:>,
-               explication=<:plugin:explication_afficher_liste:>})]
-]
-#SET{valeur,#ENV{valeur_forcee,#ENV{valeur}}|is_null|?{#ENV{defaut},#ENV{valeur_forcee,#ENV{valeur}}}}
-<div class="choix[ (#ENV{class})]">
-       <input type="radio" name="#ENV{nom}" class="radio" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_oui"[ (#GET{valeur}|=={#ENV{valeur_oui,on}}|oui)checked="checked"] value="#ENV{valeur_oui,on}" [ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][ aria-describedby="(#ENV{describedby})"] />
-       <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_oui"[(#GET{valeur}|=={#ENV{valeur_oui,on}}|oui)class="on"]><:item_oui:></label>
-</div>
-<div class="choix[ (#ENV{class})]">
-       <input type="radio" name="#ENV{nom}" class="radio" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_non"[ (#GET{valeur}|=={#ENV{valeur_non,''}}|ou{#GET{valeur}|non})checked="checked"] value="#ENV{valeur_non,''}" [ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][ aria-describedby="(#ENV{describedby})"] />
-       <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_non"[(#GET{valeur}|=={#ENV{valeur_non,''}}|ou{#GET{valeur}|non})class="on"]><:item_non:></label>
-</div>
diff --git a/www/plugins/saisies/saisies/oui_non.yaml b/www/plugins/saisies/saisies/oui_non.yaml
deleted file mode 100644 (file)
index fe92a2e..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-
-titre: '<:saisies:saisie_oui_non_titre:>'
-description: '<:saisies:saisie_oui_non_explication:>'
-icone: 'images/saisies_oui_non.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'readonly'
-          label: '<:saisies:option_readonly_label:>'
-          explication: '<:saisies:option_readonly_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_oui_non_titre:>'
-    # champs extras (definition du champ sql)
-    sql: "varchar(3) DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/pays.html b/www/plugins/saisies/saisies/pays.html
deleted file mode 100644 (file)
index c1c85b8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-[(#REM) 
-
-  ### /!\ table GEO_PAYS (geographie) ###
-       
-  Parametres :
-  - class : classe(s) css ajoutes au select
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{pays, pays,
-               label=<:plugin:info_pays:>})] 
-]
-<select name="#ENV{nom}" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
-[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_pays(GEO_PAYS){par multi nom}>
-       <option value="#ID_PAYS"[(#ID_PAYS|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#NOM</option>
-</BOUCLE_pays>
-</select>
diff --git a/www/plugins/saisies/saisies/police.html b/www/plugins/saisies/saisies/police.html
deleted file mode 100644 (file)
index 475524e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-[(#REM) 
-
-  ### /!\ boucle POUR ###
-  
-  Parametres :
-  - class : classe(s) css ajoutes au select
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{police, couleur_foncee, 
-               label=<:spa:couleur_foncee:>, 
-               obligatoire=non})] 
-]
-<select name="#ENV{nom}" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
-       [(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-       <BOUCLE_police(POUR){tableau #VAL{polices/}|find_all_in_path{\w+\.ttf}}{par cle}>
-               <option value="#CLE"[ (#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}|=={#CLE}|oui)selected="selected"]>#CLE</option>
-       </BOUCLE_police>
-</select>
diff --git a/www/plugins/saisies/saisies/position_construire_formulaire.html b/www/plugins/saisies/saisies/position_construire_formulaire.html
deleted file mode 100644 (file)
index 953d2c2..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<select name="#ENV{nom}" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]">
-       #SET{tab,#ENV{formulaire}}
-       #SET{tab_par_nom,#ENV{formulaire}|saisies_lister_par_nom}
-       #SET{padding,0}
-       #SET{liste_parents,#ARRAY{0,''}}
-       <BOUCLE_parcours(DATA){source tableau, #GET{tab}}>
-       #SET{saisie,#VALEUR}
-       <option value="#GET{saisie/options/nom}" style="padding-left:#GET{padding}px" [(#ENV{valeur,#ENV{saisie_a_positionner}}|=={#GET{saisie/options/nom}}|oui)selected="selected"]>
-               [(#GET{saisie/options/label}
-                       |sinon{#GET{saisie/options/nom}}
-                       |couper{60})]
-       </option>
-               <BOUCLE_test_enfants(CONDITION){si #GET{saisie/options/nom}|!={#ENV{saisie_a_positionner}}|et{#GET{saisie/saisies}|is_array}}>
-               #SET{tab,#GET{saisie/saisies}}
-               #SET{padding,#GET{padding}|plus{20}}
-               #SET{liste_parents,#GET{liste_parents}|push{#GET{saisie/options/nom}}}
-               <BOUCLE_parcours_recursif(BOUCLE_parcours)/>
-               #SET{padding,#GET{padding}|moins{20}}
-               #SET{liste_parents,#GET{liste_parents}|array_slice{0,-1}}
-               </BOUCLE_test_enfants>
-       </BOUCLE_parcours>
-       #SET{parent, #GET{liste_parents}|table_valeur{#GET{liste_parents}|count|moins{1}}}
-       <option value="[#GET{parent}]" style="padding-left:#GET{padding}px; font-style:italic;">
-               [(#GET{parent}|non)
-                       <:saisies:construire_position_fin_formulaire:>
-               ]
-               [(#GET{parent}|oui)
-                       #SET{groupe,#GET{tab_par_nom/#GET{parent}}}
-                       #SET{groupe,#GET{groupe/options/label}|sinon{#GET{groupe/options/nom}}|couper{60}}
-                       <:saisies:construire_position_fin_groupe{groupe=#GET{groupe}}:>
-               ]
-       </option>
-       </B_parcours>
-       #SET{parent, #GET{liste_parents}|table_valeur{#GET{liste_parents}|count|moins{1}}}
-       <option value="\[#GET{parent}\]" style="padding-left:#GET{padding}px; font-style:italic;">
-               [(#GET{parent}|non)
-                       <:saisies:construire_position_fin_formulaire:>
-               ]
-               [(#GET{parent}|oui)
-                       #SET{groupe,#GET{tab_par_nom/#GET{parent}}}
-                       #SET{groupe,#GET{groupe/options/label}|sinon{#GET{groupe/options/nom}}|couper{60}}
-                       <:saisies:construire_position_fin_groupe{groupe=#GET{groupe}}:>
-               ]
-       </option>
-       <//B_parcours>
-</select>
diff --git a/www/plugins/saisies/saisies/radio.html b/www/plugins/saisies/saisies/radio.html
deleted file mode 100644 (file)
index 09293a7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-[(#REM) 
-
-  ### /!\ boucle POUR (spip Bonux) ###
-  
-  Parametres :
-  - datas : tableau de donnees cle=>valeur
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{radio, afficher_liste,
-               label=<:plugin:afficher_liste:>,
-               explication=<:plugin:explication_afficher_liste:>,
-               datas=#ARRAY{
-                       cle1,valeur1,
-                       cle2,valeur2,
-                       cle3,valeur3}})]
-]
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV*{datas}}
-#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
-
-<BOUCLE_radio(POUR){tableau #GET{datas}}>
-#SET{disabled, #ENV{disable}|is_string|?{#ENV{disable}, #ENV{disable/#CLE}}}
-<div class="#ENV{choix,choix}[ (#ENV{choix,choix})_#CLE][ (#ENV{class})]">
-       <input type="radio" name="#ENV{nom}" class="radio" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_#COMPTEUR_BOUCLE"[ (#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}|=={#CLE}|oui)checked="checked"] value="#CLE"[(#GET{disabled}|oui) disabled="disabled"][ readonly="(#ENV{readonly})"][ aria-describedby="(#ENV{describedby})"] />
-       <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_#COMPTEUR_BOUCLE"[(#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}|=={#CLE}|oui)class="on"]>#VALEUR</label>
-</div>
-</BOUCLE_radio>
diff --git a/www/plugins/saisies/saisies/radio.yaml b/www/plugins/saisies/saisies/radio.yaml
deleted file mode 100644 (file)
index 80caa80..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-
-titre: '<:saisies:saisie_radio_titre:>'
-description: '<:saisies:saisie_radio_explication:>'
-icone: 'images/saisies_radio.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'datas'
-          label: '<:saisies:option_datas_label:>'
-          explication: '<:saisies:option_datas_explication:>'
-          rows: 10
-          cols: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'readonly'
-          label: '<:saisies:option_readonly_label:>'
-          explication: '<:saisies:option_readonly_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'class'
-          label: '<:saisies:option_class_label:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_radio_titre:>'
-    datas:
-      choix1: '<:saisies:saisie_radio_defaut_choix1:>'
-      choix2: '<:saisies:saisie_radio_defaut_choix2:>'
-      choix3: '<:saisies:saisie_radio_defaut_choix3:>'
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/recherche.html b/www/plugins/saisies/saisies/recherche.html
deleted file mode 100644 (file)
index 5ccf0d9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[(#REM) \r
-               Zone de recherche. Sur les sites en HTML5, utilise type="search"\r
-               sur le input, et type="text" par défaut pour les autres.\r
-               Dans ce dernier cas, on renseigne quand même class="search"\r
-               ("recherche" serait mieux, mais la saisie input utilise automatiquement\r
-               la valeur de #ENV{type}).\r
-][(#INCLURE{fond=saisies/input,\r
-                       env,\r
-            type=#HTML5|?{search,text},\r
-            class=[(#HTML5|?{[(#ENV{class})],[(#ENV{class}) ]search})]})]\r
diff --git a/www/plugins/saisies/saisies/secteur.html b/www/plugins/saisies/saisies/secteur.html
deleted file mode 100644 (file)
index f58bd75..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-[(#REM) \r
-\r
-  Parametres :\r
-  - class : classe(s) css ajoutes au select\r
-  - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple\r
-       Dans le cas multiple, defaut et valeur doivent etre un array, sinon un int\r
-  - recursif : si oui liste les rubriques de facon recursive, et pas uniquement les secteurs\r
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")\r
-    (seulement si non multiple)\r
-  - cacher_option_intro : pas de premier option vide  (defaut:"")\r
-  - defaut : valeur par defaut si pas présente dans l'environnement\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement\r
-  - size : la taille du sélecteur (seulement si multiple)\r
-        \r
-  Exemple d'appel :\r
-       [(#SAISIE{secteur,secteur_region,\r
-               label=<:plugin:secteur_region:>,\r
-               multiple=oui})] \r
-]\r
-<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple"[ size="(#ENV{size})"]][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>\r
-       [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)\r
-               <option value="">[(#ENV{option_intro})]</option>]\r
-       <BOUCLE_secteurs(RUBRIQUES){racine}{par num titre, titre}{tout}>\r
-               [(#ENV{multiple}|oui)\r
-               <option value="#ID_RUBRIQUE"[(#ID_RUBRIQUE|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]>#TITRE</option>]\r
-               [(#ENV{multiple}|non)\r
-               <option value="#ID_RUBRIQUE"[(#ID_RUBRIQUE|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#TITRE</option>]\r
-               [(#ENV{recursif}|oui)\r
-               <INCLURE{fond=prive/listes/rubriques_recursives,valeur=#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}},id_rubrique=#ID_RUBRIQUE,multiple} />]\r
-       </BOUCLE_secteurs>\r
-</select>\r
diff --git a/www/plugins/saisies/saisies/selecteur.html b/www/plugins/saisies/saisies/selecteur.html
deleted file mode 100644 (file)
index 01d8e89..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-[(#REM) Attention ! Nécessite SPIP 3 ! ]
-
-[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}})]
-
-[(#INCLURE{fond=formulaires/selecteur/generique,
-       selected=#GET{val},
-       name=#ENV{nom},
-       afficher_langue=#ENV{afficher_langue,''},
-       select=[(#ENV{multiple}|?{'',' '})],
-       whitelist=#ENV{whitelist,#ARRAY},
-       blacklist=#ENV{blacklist,#ARRAY},
-       racine=#ENV{racine},
-       objet=#ENV{objet,racine},
-       id_objet=#ENV{id_objet,0},
-       env})]
diff --git a/www/plugins/saisies/saisies/selecteur_article.html b/www/plugins/saisies/saisies/selecteur_article.html
deleted file mode 100644 (file)
index bbf8dcd..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-[(#REM) \r
-         \r
-  ### /!\ selecteur (spip Bonux) ###\r
-         Attention, ce qui est retourne est un tableau :\r
-         _request($name) = array('article|3', 'article|9', 'rubrique|10');\r
-         Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet "picker_selected" :\r
-         (picker_selected est dans prive/formulaires/selecteur/generique_fonctions.php de SPIP 3)\r
-         Cette fonction peut etre pratique dans une boucle en utilisant le critere IN\r
-         \r
-  Parametres :\r
-  - multiple : si oui, on peut selectionner plusieurs articles\r
-  - afficher_langue : si oui, on affiche la langue de l'objet selectionne\r
-  - afficher_art_dans_langue_interface : si oui, on n'affiche que les articles de la langue de l'interface\r
-  - limite_branche : branche dans laquelle on limite le selecteur\r
-  - defaut : valeur par defaut si pas présente dans l'environnement\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement. Doit être de type #ARRAY{'article|3','article|9',etc}\r
-        \r
-  Exemple d'appel :\r
-       [(#SAISIE{selecteur_article,id_article,\r
-               label=<:plugin:article_en_une:>})] \r
-]\r
-[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}})]\r
-\r
-[(#SET{filtrer_langue_article,[(#ENV{afficher_art_dans_langue_interface,0}|oui) #ENV{lang}]})]\r
-\r
-[(#REM) input necessaire au tag label for \r
-       Mais si on le garde, la saisie enregistree en base, n'est pas correcte\r
-   On pourrait rajouter l'id dans le input cree par Bonux, mais du coup manque la chaine "champ_"\r
-   Comme ca a l'air un peu tordu tout ca, tant pis pour l'erreur HTML\r
-   Yffic\r
-]\r
-[(#REM) Donner a manger a CFG ou CVT-configurer si aucune valeur definie ]\r
-<!--keepme: <input type="hidden" name="[(#ENV{nom,id_item})][]" value="" />-->\r
-[(#INCLURE{fond=formulaires/selecteur/articles,\r
-       selected=#GET{val},\r
-       name=#ENV{nom},\r
-       afficher_langue=#ENV{afficher_langue,''},\r
-       filtrer_langue_article=#GET{filtrer_langue_article,''},\r
-       select=[(#ENV{multiple}|?{0,1})],\r
-       limite_branche=#ENV{limite_branche,''},\r
-       rubriques=0})]\r
diff --git a/www/plugins/saisies/saisies/selecteur_article.yaml b/www/plugins/saisies/saisies/selecteur_article.yaml
deleted file mode 100644 (file)
index b2c94ca..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-\r
-titre: '<:saisies:saisie_selecteur_article_titre:>'\r
-description: '<:saisies:saisie_selecteur_article:>'\r
-icone: 'images/saisies_selecteur_article.png'\r
-options:\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'description'\r
-      label: '<:saisies:option_groupe_description:>'\r
-    saisies:\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'label'\r
-          label: '<:saisies:option_label_label:>'\r
-          explication: '<:saisies:option_label_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'explication'\r
-          label: '<:saisies:option_explication_label:>'\r
-          explication: '<:saisies:option_explication_explication:>'\r
-          size: 50\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'utilisation'\r
-      label: '<:saisies:option_groupe_utilisation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'multiple'\r
-          label: '<:saisies:option_multiple_label:>'\r
-          explication: '<:saisies:option_multiple_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'afficher_langue'\r
-          label: '<:saisies:option_aff_langue_label:>'\r
-          explication: '<:saisies:option_aff_langue_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'afficher_art_dans_langue_interface'\r
-          label: '<:saisies:option_aff_art_interface_label:>'\r
-          explication: '<:saisies:option_aff_art_interface_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable'\r
-          label: '<:saisies:option_disable_label:>'\r
-          explication: '<:saisies:option_disable_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable_avec_post'\r
-          label: '<:saisies:option_disable_avec_post_label:>'\r
-          explication: '<:saisies:option_disable_avec_post_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'readonly'\r
-          label: '<:saisies:option_readonly_label:>'\r
-          explication: '<:saisies:option_readonly_explication:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'limite_branche'\r
-          label: '<:saisies:option_limite_branche_label:>'\r
-          explication: '<:saisies:option_limite_branche_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'affichage'\r
-      label: '<:saisies:option_groupe_affichage:>'\r
-    saisies:\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si'\r
-          label: '<:saisies:option_afficher_si_label:>'\r
-          explication: '<:saisies:option_afficher_si_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si_remplissage'\r
-          label: '<:saisies:option_afficher_si_remplissage_label:>'\r
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'attention'\r
-          label: '<:saisies:option_attention_label:>'\r
-          explication: '<:saisies:option_attention_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'info_obligatoire'\r
-          label: '<:saisies:option_info_obligatoire_label:>'\r
-          explication: '<:saisies:option_info_obligatoire_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'obligatoire'\r
-      label: '<:saisies:option_groupe_validation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'obligatoire'\r
-          label: '<:saisies:option_obligatoire_label:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'erreur_obligatoire'\r
-          label: '<:saisies:option_erreur_obligatoire_label:>'\r
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'\r
-defaut:\r
-  options:\r
-    label: '<:saisies:saisie_selecteur_article_titre:>'\r
-    # champs extras (definition du champ sql)\r
-    sql: "text DEFAULT '' NOT NULL"\r
diff --git a/www/plugins/saisies/saisies/selecteur_document.html b/www/plugins/saisies/saisies/selecteur_document.html
deleted file mode 100644 (file)
index 49eeffd..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-[(#REM) 
-
-  Parametres supplementaire :
-  - defaut : valeur par defaut du parametre
-  - class : classe(s) css ajoutes a l'input
-  - size : taille du champ
-  - maxlength : nombre de caracteres maximum
-  - disable : champ insaisissable ? 'oui' (defaut : '')
-  - media : pour restreindre la modalboxe a un type de media particulier
-  - extension : pour restreindre a un type de fichier
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  - multiple : si "oui", permet de lister plusieurs id_document séparés par des virgules
-  
-  Note : dans les options, il faut definir 'env' a 'oui' pour que le selecteur puisse recuperer id_article, id_rubrique ou id_breve.
-  Note 2 : si on appelle le selecteur depuis une modalbox, il faut alors lui passer _modalbox_retour qui correspond a l'url de retour
-  apres selection du document. L'id du document sera alors passe par URL.
-]
-
-<input type="text" name="#ENV{nom}" class="text[ (#ENV{class})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ value="(#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}})"][ size="(#ENV{size})"][ maxlength="(#ENV{maxlength})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][(#ENV{obligatoire}|et{#HTML5}|oui) required="required"] />
-
-[(#REM) Si la mediatheque est presente ]
-[(#PLUGIN{medias}|oui)
-
-[(#SET{mod_fn,#ENV{_modalbox_retour}|?{2,1}})]
-
-[(#REM) Parcourir les documents de l'article ]
-[(#ENV{id_article}|oui)
-<p class='boutons'><input class='submit' type="button" name="parcourir" value="<:saisies:bouton_parcourir_docs_article:>"
-       onclick="jQuery.modalboxload(
-               '[(#URL_ECRIRE{popin-choisir_document,var_zajax=contenu&selectfunc=mediaselect#GET{mod_fn}_#ENV{nom}&id_article=#ENV{id_article}[&media=(#ENV{media})][&extension=(#ENV{extension})]})]',
-               {autoResize: true}
-       );"
-/></p>
-]
-
-[(#REM) Parcourir les documents de la rubrique ]
-[(#ENV{id_rubrique}|oui)
-<p class='boutons'><input class='submit' type="button" name="parcourir" value="<:saisies:bouton_parcourir_docs_rubrique:>"
-       onclick="jQuery.modalboxload(
-               '[(#URL_ECRIRE{popin-choisir_document,var_zajax=contenu&selectfunc=mediaselect#GET{mod_fn}_#ENV{nom}&id_rubrique=#ENV{id_rubrique}[&media=(#ENV{media})][&extension=(#ENV{extension})]})]',
-               {autoResize: true}
-       );"
-/></p>
-]
-
-[(#REM) Parcourir les documents de la breve ]
-[(#ENV{id_breve}|oui)
-<p class='boutons'><input class='submit' type="button" name="parcourir" value="<:saisies:bouton_parcourir_docs_breve:>"
-       onclick="jQuery.modalboxload(
-               '[(#URL_ECRIRE{popin-choisir_document,var_zajax=contenu&selectfunc=mediaselect#GET{mod_fn}_#ENV{nom}&id_breve=#ENV{id_breve}[&media=(#ENV{media})][&extension=(#ENV{extension})]})]',
-               {autoResize: true}
-       );"
-/></p>
-]
-
-[(#REM) Parcourir toute la mediatheque ]
-<p class='boutons'><input class='submit' type="button" name="parcourir" value="<:saisies:bouton_parcourir_mediatheque:>"
-       onclick="jQuery.modalboxload(
-               '[(#URL_ECRIRE{popin-choisir_document,var_zajax=contenu&selectfunc=mediaselect#GET{mod_fn}_#ENV{nom}[&media=(#ENV{media})][&extension=(#ENV{extension})]})]',
-               {autoResize: true}
-       );"
-/></p>
-
-
-[(#ENV{_modalbox_retour}|non)
-<script type="text/javascript">
-       function mediaselect1_#ENV{nom}(id){
-               jQuery.modalboxclose();
-               
-               [(#REM) Si multiple, on fait une liste à virgules ]
-               [(#ENV{multiple}|=={oui}|oui)
-               var valeur_actuelle = jQuery("#champ_#ENV{id,#ENV{nom}}").val();
-               valeur_actuelle = valeur_actuelle.split(',').filter(Boolean);
-               valeur_actuelle.push(id);
-               valeur_actuelle = valeur_actuelle.join(',');
-               jQuery("#champ_#ENV{id,#ENV{nom}}").val(valeur_actuelle).focus();
-               ]
-               [(#ENV{multiple}|=={oui}|non)
-               jQuery("#champ_#ENV{id,#ENV{nom}}").val(id).focus();
-               ]
-       };
-</script>
-]
-
-[(#ENV{_modalbox_retour}|oui)
-<script type="text/javascript">
-       function mediaselect2_#ENV{nom}(id){
-               jQuery.modalboxload('#ENV**{_modalbox_retour}&#ENV{nom}='+id);
-       };
-</script>
-]
-
-]
diff --git a/www/plugins/saisies/saisies/selecteur_document.yaml b/www/plugins/saisies/saisies/selecteur_document.yaml
deleted file mode 100644 (file)
index 0683f66..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-titre: '<:saisies:saisie_selecteur_document_titre:>'\r
-description: '<:saisies:saisie_selecteur_document:>'\r
-icone: 'images/saisies_selecteur_article.png'\r
-options:\r
- -\r
-   saisie: 'fieldset'\r
-   options:\r
-     nom: 'description'\r
-     label: '<:saisies:option_groupe_description:>'\r
-   saisies:\r
-     -\r
-       saisie: 'input'\r
-       options:\r
-         nom: 'label'\r
-         label: '<:saisies:option_label_label:>'\r
-         explication: '<:saisies:option_label_explication:>'\r
-         size: 50\r
-     -\r
-       saisie: 'input'\r
-       options:\r
-         nom: 'explication'\r
-         label: '<:saisies:option_explication_label:>'\r
-         explication: '<:saisies:option_explication_explication:>'\r
-         size: 50\r
- -\r
-   saisie: 'fieldset'\r
-   options:\r
-     nom: 'affichage'\r
-     label: '<:saisies:option_groupe_affichage:>'\r
-   saisies:\r
-     -\r
-       saisie: 'input'\r
-       options:\r
-         nom: 'attention'\r
-         label: '<:saisies:option_attention_label:>'\r
-         explication: '<:saisies:option_attention_explication:>'\r
-         size: 50\r
-     -\r
-       saisie: 'input'\r
-       options:\r
-         nom: 'info_obligatoire'\r
-         label: '<:saisies:option_info_obligatoire_label:>'\r
-         explication: '<:saisies:option_info_obligatoire_explication:>'\r
- -\r
-   saisie: 'fieldset'\r
-   options:\r
-     nom: 'obligatoire'\r
-     label: '<:saisies:option_groupe_validation:>'\r
-   saisies:\r
-     -\r
-       saisie: 'oui_non'\r
-       options:\r
-         nom: 'obligatoire'\r
-         label: '<:saisies:option_obligatoire_label:>'\r
-defaut:\r
- options:\r
-   label: '<:saisies:saisie_selecteur_document_titre:>'\r
-   # champs extras (definition du champ sql)\r
-   sql: "text DEFAULT '' NOT NULL"
\ No newline at end of file
diff --git a/www/plugins/saisies/saisies/selecteur_langue.html b/www/plugins/saisies/saisies/selecteur_langue.html
deleted file mode 100644 (file)
index fe57d42..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-[(#REM) 
-       
-  Parametres :
-  - class : classe(s) css ajoutes au select
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{selecteur_langue,lang,
-               label=<:plugin:info_langue:>})] 
-]
-[(#SET{valeur,[(#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,''}}})]})]
-[(#SET{langues,[(#VAL{changer_lang}|liste_options_langues{#GET{valeur}})]})]
-<select name="#ENV{nom}" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
-<BOUCLE_si_spip2(CONDITION){si (#GET{langues}|is_array|non)}>
-#GET{langues}
-</BOUCLE_si_spip2>
-[(#INCLURE{fond=prive/formulaires/inc-options-langues,name=changer_lang,default=#GET{valeur,#LANG}})]
-<//B_si_spip2>
-</select>
diff --git a/www/plugins/saisies/saisies/selecteur_rubrique.html b/www/plugins/saisies/saisies/selecteur_rubrique.html
deleted file mode 100644 (file)
index 1590ab2..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-[(#REM) \r
-         \r
-  ### /!\ selecteur (spip Bonux) ###\r
-         Attention, ce qui est retourne est un tableau :\r
-         _request($name) = array('article|3', 'article|9', 'rubrique|10');\r
-         Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :\r
-         [(#CHAMP|picker_selected{article})]\r
-         Cette fonction peut etre pratique dans une boucle en utilisant le critere IN\r
-         \r
-  Parametres :\r
-  - multiple : si oui, on peut selectionner plusieurs rubriques\r
-  - afficher_langue : si oui, on affiche la langue de l'objet selectionne\r
-  - afficher_rub_dans_langue_interface : si oui, on n'affiche que les rubriques de la langue de l'interface\r
-  - defaut : valeur par defaut si pas présente dans l'environnement\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement\r
-  \r
-  Exemple d'appel :\r
-       [(#SAISIE{selecteur_rubrique,rubriques_menu,\r
-               multiple=oui,\r
-               label=<:plugin:article_en_une:>})] \r
-]\r
-\r
-[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}})]\r
-\r
-[(#SET{filtrer_langue_rubrique,[(#ENV{afficher_rub_dans_langue_interface,0}|oui) #ENV{lang}]})]\r
-\r
-[(#REM) input necessaire au tag label for \r
-       Mais si on le garde, la saisie enregistree en base, n'est pas correcte\r
-   On pourrait rajouter l'id dans le input cree par Bonux, mais du coup manque la chaine "champ_"\r
-   Comme ca a l'air un peu tordu tout ca, tant pis pour l'erreur HTML\r
-   Yffic\r
-]\r
-[(#REM) Donner a manger a CFG ou CVT-configurer si aucune valeur definie ]\r
-<!--keepme: <input type="hidden" name="[(#ENV{nom,id_item})][]" id="[champ_(#ENV{nom,id_item})]" value="" />-->\r
-[(#INCLURE{fond=formulaires/selecteur/rubriques,\r
-       selected=#GET{val},\r
-       name=#ENV{nom},\r
-       afficher_langue=#ENV{afficher_langue,''},\r
-       filtrer_langue_rubrique=#GET{filtrer_langue_rubrique,''},\r
-       select=[(#ENV{multiple}|?{0,1})]})]\r
diff --git a/www/plugins/saisies/saisies/selecteur_rubrique.yaml b/www/plugins/saisies/saisies/selecteur_rubrique.yaml
deleted file mode 100644 (file)
index c95f355..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-\r
-titre: '<:saisies:saisie_selecteur_rubrique_titre:>'\r
-description: '<:saisies:saisie_selecteur_rubrique:>'\r
-icone: 'images/saisies_selecteur_rubrique.png'\r
-options:\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'description'\r
-      label: '<:saisies:option_groupe_description:>'\r
-    saisies:\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'label'\r
-          label: '<:saisies:option_label_label:>'\r
-          explication: '<:saisies:option_label_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'explication'\r
-          label: '<:saisies:option_explication_label:>'\r
-          explication: '<:saisies:option_explication_explication:>'\r
-          size: 50\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'utilisation'\r
-      label: '<:saisies:option_groupe_utilisation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'multiple'\r
-          label: '<:saisies:option_multiple_label:>'\r
-          explication: '<:saisies:option_multiple_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'afficher_langue'\r
-          label: '<:saisies:option_aff_langue_label:>'\r
-          explication: '<:saisies:option_aff_langue_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'afficher_rub_dans_langue_interface'\r
-          label: '<:saisies:option_aff_rub_interface_label:>'\r
-          explication: '<:saisies:option_aff_rub_interface_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable'\r
-          label: '<:saisies:option_disable_label:>'\r
-          explication: '<:saisies:option_disable_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable_avec_post'\r
-          label: '<:saisies:option_disable_avec_post_label:>'\r
-          explication: '<:saisies:option_disable_avec_post_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'readonly'\r
-          label: '<:saisies:option_readonly_label:>'\r
-          explication: '<:saisies:option_readonly_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'affichage'\r
-      label: '<:saisies:option_groupe_affichage:>'\r
-    saisies:\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si'\r
-          label: '<:saisies:option_afficher_si_label:>'\r
-          explication: '<:saisies:option_afficher_si_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si_remplissage'\r
-          label: '<:saisies:option_afficher_si_remplissage_label:>'\r
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'attention'\r
-          label: '<:saisies:option_attention_label:>'\r
-          explication: '<:saisies:option_attention_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'info_obligatoire'\r
-          label: '<:saisies:option_info_obligatoire_label:>'\r
-          explication: '<:saisies:option_info_obligatoire_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'obligatoire'\r
-      label: '<:saisies:option_groupe_validation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'obligatoire'\r
-          label: '<:saisies:option_obligatoire_label:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'erreur_obligatoire'\r
-          label: '<:saisies:option_erreur_obligatoire_label:>'\r
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'\r
-defaut:\r
-  options:\r
-    label: '<:saisies:saisie_selecteur_rubrique_titre:>'\r
-    # champs extras (definition du champ sql)\r
-    sql: "text DEFAULT '' NOT NULL"\r
diff --git a/www/plugins/saisies/saisies/selecteur_rubrique_article.html b/www/plugins/saisies/saisies/selecteur_rubrique_article.html
deleted file mode 100644 (file)
index 16607d9..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-[(#REM) \r
-         \r
-  ### /!\ selecteur (spip Bonux) ###\r
-         Attention, ce qui est retourne est un tableau :\r
-         _request($name) = array('article|3', 'article|9', 'rubrique|10');\r
-         Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :\r
-         [(#CHAMP|picker_selected{article})]\r
-         Cette fonction peut etre pratique dans une boucle en utilisant le critere IN\r
-         \r
-  Parametres :\r
-  - multiple : si oui, on peut selectionner plusieurs rubriques\r
-  - afficher_langue : si oui, on affiche la langue de l'objet selectionne\r
-  - afficher_art_dans_langue_interface : si oui, on n'affiche que les articles de la langue de l'interface\r
-  - afficher_rub_dans_langue_interface : si oui, on n'affiche que les rubriques de la langue de l'interface\r
-  - defaut : valeur par defaut si pas présente dans l'environnement\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement\r
-        \r
-  Exemple d'appel :\r
-       [(#SAISIE{selecteur_rubrique_article,menu,\r
-               multiple=1,\r
-               label=<:plugin:choisir_le_menu:>})] \r
-]\r
-[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}})]\r
-\r
-[(#SET{filtrer_langue_article,[(#ENV{afficher_art_dans_langue_interface,0}|oui) #ENV{lang}]})]\r
-[(#SET{filtrer_langue_rubrique,[(#ENV{afficher_rub_dans_langue_interface,0}|oui) #ENV{lang}]})]\r
-\r
-[(#REM) input necessaire au tag label for \r
-       Mais si on le garde, la saisie enregistree en base, n'est pas correcte\r
-   On pourrait rajouter l'id dans le input cree par Bonux, mais du coup manque la chaine "champ_"\r
-   Comme ca a l'air un peu tordu tout ca, tant pis pour l'erreur HTML\r
-   Yffic\r
-]\r
-[(#REM) Donner a manger a CFG ou CVT-configurer si aucune valeur definie ]\r
-<!--keepme: <input type="hidden" name="[(#ENV{nom,id_item})][]" id="[champ_(#ENV{nom,id_item})]" value="" /> -->\r
-\r
-[(#INCLURE{fond=formulaires/selecteur/articles,\r
-       selected=#GET{val},\r
-       name=#ENV{nom},\r
-       afficher_langue=#ENV{afficher_langue,''},\r
-       filtrer_langue_article=#GET{filtrer_langue_article,''},\r
-       filtrer_langue_rubrique=#GET{filtrer_langue_rubrique,''},\r
-       select=[(#ENV{multiple}|?{0,1})],\r
-       rubriques=1})]\r
-\r
diff --git a/www/plugins/saisies/saisies/selecteur_rubrique_article.yaml b/www/plugins/saisies/saisies/selecteur_rubrique_article.yaml
deleted file mode 100644 (file)
index 5559bd1..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-\r
-titre: '<:saisies:saisie_selecteur_rubrique_article_titre:>'\r
-description: '<:saisies:saisie_selecteur_rubrique_article:>'\r
-icone: 'images/saisies_selecteur_rubrique_article.png'\r
-options:\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'description'\r
-      label: '<:saisies:option_groupe_description:>'\r
-    saisies:\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'label'\r
-          label: '<:saisies:option_label_label:>'\r
-          explication: '<:saisies:option_label_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'explication'\r
-          label: '<:saisies:option_explication_label:>'\r
-          explication: '<:saisies:option_explication_explication:>'\r
-          size: 50\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'utilisation'\r
-      label: '<:saisies:option_groupe_utilisation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'multiple'\r
-          label: '<:saisies:option_multiple_label:>'\r
-          explication: '<:saisies:option_multiple_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'afficher_langue'\r
-          label: '<:saisies:option_aff_langue_label:>'\r
-          explication: '<:saisies:option_aff_langue_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'afficher_art_dans_langue_interface'\r
-          label: '<:saisies:option_aff_art_interface_label:>'\r
-          explication: '<:saisies:option_aff_art_interface_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'afficher_rub_dans_langue_interface'\r
-          label: '<:saisies:option_aff_rub_interface_label:>'\r
-          explication: '<:saisies:option_aff_rub_interface_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable'\r
-          label: '<:saisies:option_disable_label:>'\r
-          explication: '<:saisies:option_disable_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'disable_avec_post'\r
-          label: '<:saisies:option_disable_avec_post_label:>'\r
-          explication: '<:saisies:option_disable_avec_post_explication:>'\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'readonly'\r
-          label: '<:saisies:option_readonly_label:>'\r
-          explication: '<:saisies:option_readonly_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'affichage'\r
-      label: '<:saisies:option_groupe_affichage:>'\r
-    saisies:\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si'\r
-          label: '<:saisies:option_afficher_si_label:>'\r
-          explication: '<:saisies:option_afficher_si_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'textarea'\r
-        options:\r
-          nom: 'afficher_si_remplissage'\r
-          label: '<:saisies:option_afficher_si_remplissage_label:>'\r
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'\r
-          rows: 5\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'attention'\r
-          label: '<:saisies:option_attention_label:>'\r
-          explication: '<:saisies:option_attention_explication:>'\r
-          size: 50\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'info_obligatoire'\r
-          label: '<:saisies:option_info_obligatoire_label:>'\r
-          explication: '<:saisies:option_info_obligatoire_explication:>'\r
-  -\r
-    saisie: 'fieldset'\r
-    options:\r
-      nom: 'obligatoire'\r
-      label: '<:saisies:option_groupe_validation:>'\r
-    saisies:\r
-      -\r
-        saisie: 'oui_non'\r
-        options:\r
-          nom: 'obligatoire'\r
-          label: '<:saisies:option_obligatoire_label:>'\r
-      -\r
-        saisie: 'input'\r
-        options:\r
-          nom: 'erreur_obligatoire'\r
-          label: '<:saisies:option_erreur_obligatoire_label:>'\r
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'\r
-defaut:\r
-  options:\r
-    label: '<:saisies:saisie_selecteur_rubrique_article_titre:>'\r
-    # champs extras (definition du champ sql)\r
-    sql: "text DEFAULT '' NOT NULL"\r
diff --git a/www/plugins/saisies/saisies/selecteur_site.html b/www/plugins/saisies/saisies/selecteur_site.html
deleted file mode 100644 (file)
index 3787e45..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-[(#REM)\r
-\r
-Saisies qui liste les sites syndiques\r
-Par défaut ne liste que ceux des rubriques à la racine (secteurs)\r
-\r
-  Parametres :\r
-  - class : classe(s) css ajoutes au select\r
-  - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple\r
-    Dans le cas multiple, defaut et valeur doivent etre un array, sinon un int\r
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")\r
-    (seulement si non multiple)\r
-  - cacher_option_intro : pas de premier option vide  (defaut:"")\r
-  - syndication : 'oui' ou 'non' (sélectionner uniquement les sites avec ou sans syndication)\r
-  - defaut : valeur par defaut si pas présente dans l'environnement\r
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement\r
-\r
-]\r
-<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple" size="#ENV{size,10}"][ (#ENV*{attributs})]>\r
-       [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)\r
-               <option value="0">[(#ENV{option_intro})]</option>]\r
-       <BOUCLE_secteurs(RUBRIQUES){racine}{par num titre, titre}{tout}>\r
-       <B_sites>\r
-       <optgroup label="#TITRE">\r
-               <BOUCLE_sites(SITES){id_secteur}{par nom_site}{syndication ?}>\r
-               [(#ENV{multiple}|oui)\r
-               <option value="#ID_SYNDIC"[(#ID_SYNDIC|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]>#NOM_SITE</option>]\r
-               [(#ENV{multiple}|non)\r
-               <option value="#ID_SYNDIC"[(#ID_SYNDIC|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#NOM_SITE</option>]\r
-               </BOUCLE_sites>\r
-       </optgroup>\r
-       </B_sites>\r
-       </BOUCLE_secteurs>\r
-</select>\r
diff --git a/www/plugins/saisies/saisies/selection.html b/www/plugins/saisies/saisies/selection.html
deleted file mode 100644 (file)
index 7c0ec57..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-[(#REM) 
-
-  ### /!\ boucle POUR (spip Bonux) ###
-       
-  Parametres :
-  - ** datas : tableau de donnees
-               liste simple : cle=>valeur
-               liste avec groupes :  cle=> tableau (cle=>valeur)
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - class : classe(s) css ajoutes au select
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemples d'appels
-  pour une liste simple :
-       [(#SAISIE{selection,produits,
-               label=<:plugin:info_produits:>,
-               datas=#ARRAY{
-                       cle1,valeur1,
-                       cle2,valeur2,
-                       cle3,valeur3}})]
-  pour une liste avec groupes :
-       [(#SAISIE{selection,produits,
-               label=<:plugin:info_produits:>,
-               datas=#ARRAY{
-                       cle1,#ARRAY{
-                               cle1,valeur1,
-                               cle2,valeur2},
-                       cle2,#ARRAY{
-                               cle1,valeur1,
-                               cle2,valeur2}}})] 
-]
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV*{datas}|saisies_chaine2tableau}
-
-[(#REM) Attention, la valeur ou la valeur forcée peut être une chaine vide. On doit donc tester avec is_null. ]
-#SET{valeur,#ENV{valeur_forcee}|is_null|?{#ENV{valeur}|is_null|?{#ENV{defaut},#ENV{valeur}},#ENV{valeur_forcee}}}
-
-<select [(#HTML5|oui)[(#ENV{obligatoire}|et{#ENV{obligatoire}|!={non}}|oui) required="required"]] name="#ENV{nom}" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ size="(#ENV{size})"][ (#ENV*{attributs})]>
-[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_selection(POUR){tableau #GET{datas}}>
-       <B_cond>
-       <optgroup label="#CLE">
-       <BOUCLE_cond(CONDITION){si #VALEUR|is_array}><BOUCLE_optgroup(POUR){tableau #VALEUR}>
-               <option value="#CLE"[(#CLE|=={#GET{valeur}}|oui)selected="selected"]>#VALEUR</option>
-       </BOUCLE_optgroup></BOUCLE_cond>
-       </optgroup>
-       </B_cond>
-       <option value="#CLE"[(#CLE|=={#GET{valeur}}|oui)selected="selected"]>#VALEUR</option>
-       <//B_cond>
-</BOUCLE_selection>
-</select>
diff --git a/www/plugins/saisies/saisies/selection.yaml b/www/plugins/saisies/saisies/selection.yaml
deleted file mode 100644 (file)
index 210c484..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-
-titre: '<:saisies:saisie_selection_titre:>'
-description: '<:saisies:saisie_selection_explication:>'
-icone: 'images/saisies_selection.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'datas'
-          label: '<:saisies:option_datas_label:>'
-          explication: '<:saisies:option_datas_sous_groupe_explication:>'
-          rows: 10
-          cols: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'option_intro'
-          label: '<:saisies:option_option_intro_label:>'
-          size: 50
-      -
-        saisie: 'case'
-        options:
-          nom: 'cacher_option_intro'
-          label_case: '<:saisies:option_cacher_option_intro_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'class'
-          label: '<:saisies:option_class_label:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'size'
-          label: '<:saisies:option_size_label:>'
-          explication: '<:saisies:option_size_explication:>'
-        verifier:
-          type: 'entier'
-          options:
-            min: 1
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_selection_titre:>'
-    datas:
-      choix1: '<:saisies:saisie_radio_defaut_choix1:>'
-      choix2: '<:saisies:saisie_radio_defaut_choix2:>'
-      choix3: '<:saisies:saisie_radio_defaut_choix3:>'
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/selection_multiple.html b/www/plugins/saisies/saisies/selection_multiple.html
deleted file mode 100755 (executable)
index 6cd36b3..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-[(#REM) 
-
-  ### /!\ boucle POUR (spip Bonux) ###
-       
-  Parametres :
-  - datas : tableau de donnees cle=>valeur
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - class : classe(s) css ajoutes au select
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{selection_multiple,produits,
-               label=<:plugin:info_produits:>,
-               datas=#ARRAY{
-                       cle1,valeur1,
-                       cle2,valeur2,
-                       cle3,valeur3}})] 
-]
-
-[(#REM) datas peut être une chaine qu'on sait décomposer ]
-#SET{datas, #ENV{datas}|saisies_chaine2tableau}
-
-[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
-#SET{defaut, #ENV{defaut}|saisies_chaine2tableau}
-
-[(#REM) valeur peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
-#SET{valeur, #ENV{valeur}|saisies_valeur2tableau}
-
-<select name="#ENV{nom}[]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]" multiple="multiple"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ size="(#ENV{size,10})"][ (#ENV*{attributs})]>
-[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_selection(POUR){tableau #GET{datas}}>
-       <B_cond>
-       <optgroup label="#CLE">
-       <BOUCLE_cond(CONDITION){si #VALEUR|is_array}><BOUCLE_optgroup(POUR){tableau #VALEUR}>
-               <option value="#CLE" [(#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui) selected="selected"]>#VALEUR</option>
-       </BOUCLE_optgroup></BOUCLE_cond>
-       </optgroup>
-       </B_cond>
-       <option value="#CLE" [(#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui) selected="selected"]>#VALEUR</option>
-       <//B_cond>
-</BOUCLE_selection>
-</select>
diff --git a/www/plugins/saisies/saisies/selection_multiple.yaml b/www/plugins/saisies/saisies/selection_multiple.yaml
deleted file mode 100644 (file)
index 494caf2..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-
-titre: '<:saisies:saisie_selection_multiple_titre:>'
-description: '<:saisies:saisie_selection_multiple_explication:>'
-icone: 'images/saisies_selection_multiple.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'datas'
-          label: '<:saisies:option_datas_label:>'
-          explication: '<:saisies:option_datas_sous_groupe_explication:>'
-          rows: 10
-          cols: 50
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-          rows: 10
-          cols: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'option_intro'
-          label: '<:saisies:option_option_intro_label:>'
-          size: 50
-      -
-        saisie: 'case'
-        options:
-          nom: 'cacher_option_intro'
-          label_case: '<:saisies:option_cacher_option_intro_label:>'
-          defaut: 'on'
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'size'
-          label: '<:saisies:option_size_label:>'
-          explication: '<:saisies:option_size_explication:>'
-        verifier:
-          type: 'entier'
-          options:
-            min: 1
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'obligatoire'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_selection_multiple_titre:>'
-    datas:
-      choix1: '<:saisies:saisie_radio_defaut_choix1:>'
-      choix2: '<:saisies:saisie_radio_defaut_choix2:>'
-      choix3: '<:saisies:saisie_radio_defaut_choix3:>'
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/selection_par_groupe.html b/www/plugins/saisies/saisies/selection_par_groupe.html
deleted file mode 100644 (file)
index 750612d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-[(#REM) 
-
-  ### /!\ boucle POUR (spip Bonux) ###
-       
-  Parametres :
-  - ** datas : tableau de donnees groupe=>array(cle=>valeur)
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - class : classe(s) css ajoutes au select
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{selection_par_groupe,produits,
-               label=<:plugin:info_produits:>,
-               datas=#ARRAY{
-                       groupe 1,#ARRAY{
-                               cle1,valeur1,
-                               cle2,valeur2,
-                               cle3,valeur3},
-                       groupe 2,#ARRAY{
-                               cle4,valeur1,
-                               cle5,valeur2,
-                               cle6,valeur3}}})] 
-]
-<select name="#ENV{nom}" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
-[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_groupes(POUR){tableau #ENV{datas}}>
-       <optgroup label="[(#CLE|attribut_html)]">
-               <BOUCLE_selection(POUR){tableau #VALEUR}>
-                       <option value="#CLE" [(#CLE|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]>#VALEUR</option>
-               </BOUCLE_selection>
-       </optgroup>
-</BOUCLE_groupes>
-</select>
diff --git a/www/plugins/saisies/saisies/statuts_auteurs.html b/www/plugins/saisies/saisies/statuts_auteurs.html
deleted file mode 100644 (file)
index 5534881..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-[(#REM)
-
-  Parametres :
-  - class : classe(s) css ajoutes au select
-  - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple
-       Dans le cas multiple, defaut et valeur doivent être un array, sinon un int
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-    (seulement si non multiple)
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-  - afficher_tous : permet d'afficher une option de valeur "tous" correspondant à tous les utilisateurs
-  - poubelle : permet d'afficher le statut poubelle
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  - size : dans le cas d'un select multiple, limite le nombre de lignes au chiffre passé
-  
-  Exemple d'appel :
-       [(#SAISIE{statuts_auteurs,statuts,
-               label=<:plugin:statuts_des_auteurs:>,
-               multiple=oui})]
-]
-
-<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple" size="[(#ENV{size,#ENV{afficher_tous}|?{4,3}})]"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
-       [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)
-               <option value="">[(#ENV{option_intro})]</option>]
-       [(#ENV{multiple}|oui)
-               <option value="0minirezo"[(#VAL{0minirezo}|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]><:info_administrateurs:></option>
-               <option value="1comite"[(#VAL{1comite}|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]><:info_redacteurs:></option>
-               <option value="6forum"[(#VAL{6forum}|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]><:info_visiteurs:></option>
-               [(#ENV{poubelle}|oui)
-               <option value="5poubelle"[(#VAL{5poubelle}|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]><:texte_statut_poubelle:></option>]
-               [(#ENV{afficher_tous}|oui)
-               <option value="tous"[(#VAL{tous}|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]><:saisies:tous_visiteurs:></option>]  ]
-       [(#ENV{multiple}|non)
-               <option value="0minirezo"[(#VAL{0minirezo}|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]><:info_administrateurs:></option>
-               <option value="1comite"[(#VAL{1comite}|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]><:info_redacteurs:></option>
-               <option value="6forum"[(#VAL{6forum}|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]><:info_visiteurs:></option>
-               [(#ENV{poubelle}|oui)
-                       <option value="5poubelle"[(#VAL{5poubelle}|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui) selected="selected"]><:texte_statut_poubelle:></option>]
-               [(#ENV{afficher_tous}|oui)
-               <option value="tous"[(#VAL{tous}|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui) selected="selected"]><:saisies:tous_visiteurs:></option>]
-       ]
-</select>
-
diff --git a/www/plugins/saisies/saisies/telephone.html b/www/plugins/saisies/saisies/telephone.html
deleted file mode 100644 (file)
index 2c52797..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-[(#REM) \r
-\r
-               Zone de saisie de numero de telephone. Sur les sites en HTML5,\r
-               utilise type="tel" sur le input (et donc class="tel"); et\r
-               type="text" par défaut pour les autres (et donc class="text").\r
-               Dans ce dernier cas, on renseigne quand même class="tel" pour\r
-               avoir une classe cohérente avec ou sans HTML5.\r
-\r
-][(#INCLURE{fond=saisies/input,\r
-                       env,\r
-            type=#HTML5|?{tel,text},\r
-            class=[(#HTML5|?{[(#ENV{class})],[(#ENV{class}) ]tel})]})]\r
diff --git a/www/plugins/saisies/saisies/textarea.html b/www/plugins/saisies/saisies/textarea.html
deleted file mode 100644 (file)
index 6fc3f70..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-[(#REM)
-
-  Parametres :
-  - class : classe(s) css ajoutes au textarea
-  - rows : nombre de ligne, par defaut : 20 
-  - cols : nombre de caracteres de large, par defaut : 40 (cela depend aussi et surtout du CSS)
-  - inserer_barre : barre d'outils du porte plume à insérer (forum ou edition par défaut)
-  - previsualisation : si égale à 'oui', ajoute l'onglet de prévisualisation
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-
-  Exemple d'appel :
-       [(#SAISIE{textarea, couleur_foncee,
-               label=<:spa:couleur_foncee:>,
-               obligatoire=non})]
-]
-
-[(#REM) Si la valeur est un tableau, le plugin sait le transformer en chaine, plutôt que d'afficher "Array" ]
-#SET{valeur, #ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}
-#SET{valeur, #GET{valeur}|is_array|?{(#GET{valeur}|saisies_tableau2chaine), #GET{valeur}}}
-<textarea name="#ENV{nom}" class="[(#ENV{class}) ][inserer_barre_(#ENV{inserer_barre}) ][(#ENV{previsualisation}|oui)inserer_previsualisation]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]" rows="[(#ENV{rows,20})]" cols="[(#ENV{cols,40})]"[ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][ placeholder="(#ENV{placeholder})"][(#ENV{obligatoire}|et{#ENV{obligatoire}|!={non}}|et{#HTML5}|oui) required="required"][ aria-describedby="(#ENV{describedby})"][ (#ENV*{attributs})]>
-#GET{valeur}</textarea>
diff --git a/www/plugins/saisies/saisies/textarea.yaml b/www/plugins/saisies/saisies/textarea.yaml
deleted file mode 100644 (file)
index d345d53..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-
-titre: '<:saisies:saisie_textarea_titre:>'
-description: '<:saisies:saisie_textarea_explication:>'
-icone: 'images/saisies_textarea.png'
-options:
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'description'
-      label: '<:saisies:option_groupe_description:>'
-    saisies:
-      -
-        saisie: 'input'
-        options:
-          nom: 'label'
-          label: '<:saisies:option_label_label:>'
-          explication: '<:saisies:option_label_explication:>'
-          size: 50
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'defaut'
-          label: '<:saisies:option_defaut_label:>'
-          rows: 4
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'placeholder'
-          label: '<:saisies:option_placeholder_label:>'
-          rows: 4
-      -
-        saisie: 'input'
-        options:
-          nom: 'explication'
-          label: '<:saisies:option_explication_label:>'
-          explication: '<:saisies:option_explication_explication:>'
-          size: 50
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'utilisation'
-      label: '<:saisies:option_groupe_utilisation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable'
-          label: '<:saisies:option_disable_label:>'
-          explication: '<:saisies:option_disable_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'disable_avec_post'
-          label: '<:saisies:option_disable_avec_post_label:>'
-          explication: '<:saisies:option_disable_avec_post_explication:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'readonly'
-          label: '<:saisies:option_readonly_label:>'
-          explication: '<:saisies:option_readonly_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'affichage'
-      label: '<:saisies:option_groupe_affichage:>'
-    saisies:
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si'
-          label: '<:saisies:option_afficher_si_label:>'
-          explication: '<:saisies:option_afficher_si_explication:>'
-          rows: 5
-      -
-        saisie: 'textarea'
-        options:
-          nom: 'afficher_si_remplissage'
-          label: '<:saisies:option_afficher_si_remplissage_label:>'
-          explication: '<:saisies:option_afficher_si_remplissage_explication:>'
-          rows: 5
-      -
-        saisie: 'input'
-        options:
-          nom: 'attention'
-          label: '<:saisies:option_attention_label:>'
-          explication: '<:saisies:option_attention_explication:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'info_obligatoire'
-          label: '<:saisies:option_info_obligatoire_label:>'
-          explication: '<:saisies:option_info_obligatoire_explication:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'class'
-          label: '<:saisies:option_class_label:>'
-          size: 50
-      -
-        saisie: 'input'
-        options:
-          nom: 'rows'
-          label: '<:saisies:option_rows_label:>'
-          explication: '<:saisies:option_rows_explication:>'
-        verifier:
-          type: 'entier'
-          options:
-            min: 1
-      -
-        saisie: 'input'
-        options:
-          nom: 'cols'
-          label: '<:saisies:option_cols_label:>'
-          explication: '<:saisies:option_cols_explication:>'
-        verifier:
-          type: 'entier'
-          options:
-            min: 1
-      -
-        saisie: 'selection'
-        options:
-          nom: 'inserer_barre'
-          label: '<:saisies:option_inserer_barre_label:>'
-          explication: '<:saisies:option_inserer_barre_explication:>'
-          option_intro: <:item_non:>
-          datas:
-            edition: '<:saisies:option_inserer_barre_choix_edition:>'
-            forum: '<:saisies:option_inserer_barre_choix_forum:>'
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'previsualisation'
-          label: '<:saisies:option_previsualisation_label:>'
-          explication: '<:saisies:option_previsualisation_explication:>'
-  -
-    saisie: 'fieldset'
-    options:
-      nom: 'validation'
-      label: '<:saisies:option_groupe_validation:>'
-    saisies:
-      -
-        saisie: 'oui_non'
-        options:
-          nom: 'obligatoire'
-          label: '<:saisies:option_obligatoire_label:>'
-      -
-        saisie: 'input'
-        options:
-          nom: 'erreur_obligatoire'
-          label: '<:saisies:option_erreur_obligatoire_label:>'
-          explication: '<:saisies:option_erreur_obligatoire_explication:>'
-defaut:
-  options:
-    label: '<:saisies:saisie_textarea_titre:>'
-    cols: 40
-    rows: 5
-    # champs extras (definition du champ sql)
-    sql: "text DEFAULT '' NOT NULL"
diff --git a/www/plugins/saisies/saisies/true_false.html b/www/plugins/saisies/saisies/true_false.html
deleted file mode 100644 (file)
index 1d53ec8..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-[(#REM) 
-
-  Action :
-  - Rempli "true" si oui, "false" si non.
-  
-  Parametres :
-  - defaut : valeur par defaut si pas présente dans l'environnement
-  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
-  
-  Exemple d'appel :
-       [(#SAISIE{true_false, afficher_liste,
-               label=<:plugin:afficher_liste:>,
-               explication=<:plugin:explication_afficher_liste:>})]
-]
-#SET{valeur,#ENV{valeur_forcee,#ENV{valeur}}|is_null|?{#ENV{defaut},#ENV{valeur_forcee,#ENV{valeur}}}}
-<div class="choix">
-       <input type="radio" name="#ENV{nom}" class="radio" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_true"[ (#GET{valeur}|=={true}|oui)checked="checked"] value="true" [ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][ aria-describedby="(#ENV{describedby})"] />
-       <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_true"[(#GET{valeur}|=={true}|oui)class="on"]><:item_oui:></label>
-</div>
-<div class="choix">
-       <input type="radio" name="#ENV{nom}" class="radio" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_false"[ (#GET{valeur}|=={false}|oui)checked="checked"] value="false" [ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"][ aria-describedby="(#ENV{describedby})"] />
-       <label for="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_false"[(#GET{valeur}|=={false}|oui)class="on"]><:item_non:></label>
-</div>
diff --git a/www/plugins/saisies/saisies/url.html b/www/plugins/saisies/saisies/url.html
deleted file mode 100644 (file)
index 6ec595a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-[(#REM) \r
-               \r
-               Zone de saisie d'URL. Sur les sites en HTML5, utilise type="url"\r
-               sur le input (et donc class="url"), et type="text" par défaut\r
-               pour les autres (et donc class="text"). Dans ce dernier cas, on\r
-               renseigne quand même class="url" pour avoir une classe cohérente\r
-               avec ou sans HTML5.\r
-               \r
-][(#INCLURE{fond=saisies/input,\r
-                       env,\r
-            type=#HTML5|?{url,text},\r
-            class=[(#HTML5|?{[(#ENV{class}) ],[(#ENV{class}) ]url})]})]\r
diff --git a/www/plugins/saisies/saisies_fonctions.php b/www/plugins/saisies/saisies_fonctions.php
deleted file mode 100644 (file)
index 321ffaa..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-<?php
-
-/**
- * Déclaration de fonctions pour les squelettes
- *
- * @package SPIP\Saisies\Fonctions
-**/
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/saisies');
-include_spip('balise/saisie');
-// picker_selected (spip 3)
-include_spip('formulaires/selecteur/generique_fonctions');
-
-/**
- * Retourne une balise `div` si on est en SPIP >= 3.1, sinon le texte en parametre.
- *
- * @example `[(#VAL{ul}|saisie_balise_structure_formulaire)]`
- * @see balise_DIV_dist() pour une écriture plus courte.
- * @note Préférer `[(#DIV|sinon{ul})]` dans les squelettes, plus lisible.
- *
- * @param $tag
- *   ul ou li
- * @return string
- *   $tag initial ou div
- */
-function saisie_balise_structure_formulaire($tag) {
-
-       static $is_div = null;
-       if (is_null($is_div)) {
-               $version = explode('.', $GLOBALS['spip_version_branche']);
-               if ($version[0] > 3 or ($version[0] == 3 and $version[1] > 0)) {
-                       $is_div = true;
-               }
-       }
-       if ($is_div) {
-               return 'div';
-       }
-       return $tag;
-}
-
-if (
-       !function_exists('balise_DIV_dist')
-       and $version = explode('.', $GLOBALS['spip_version_branche'])
-       and ($version[0]>3 or ($version[0]==3 and $version[1] > 0))
-) {
-
-       /**
-        * Compile la balise `DIV` qui retourne simplement le texte `div`
-        *
-        * Sert à la compatibilité entre SPIP 3.0 et SPIP 3.1+
-        *
-        * Variante d'écriture, plus courte, que le filtre `saisie_balise_structure_formulaire`
-        *
-        * À partir de SPIP 3.1
-        * - ul.editer-groupe deviennent des div.editer-groupe
-        * - li.editer devient div.editer
-        *
-        * @see saisie_balise_structure_formulaire()
-        * @example
-        *     `[(#DIV|sinon{ul})]`
-        *
-        * @param Pile $p
-        * @return Pile
-        */
-       function balise_DIV_dist($p) {
-               $p->code = "'div'";
-               $p->interdire_scripts = false;
-               return $p;
-       }
-}
-
-/**
- * Traiter la valeur de la vue en fonction du env
- * si un traitement a ete fait en amont (champs extra) ne rien faire
- * si pas de traitement defini (formidable) passer typo ou propre selon le type du champ
- *
- * @param string $valeur
- * @param string|array $env
- * @return string
- */
-function saisie_traitement_vue($valeur, $env) {
-       if (is_string($env)) {
-               $env = unserialize($env);
-       }
-       if (!function_exists('propre')) {
-               include_spip('inc/texte');
-       }
-
-       $valeur = trim($valeur);
-
-       // si traitement est renseigne, alors le champ est deja mis en forme
-       // (saisies)
-       // sinon on fait une mise en forme smart
-       if ($valeur and !isset($env['traitements'])) {
-               if (in_array($env['type_saisie'], array('textarea'))) {
-                       $valeur = propre($valeur);
-               } else {
-                       $valeur = '<p>' . typo($valeur) . '</p>';
-               }
-       }
-
-       return $valeur;
-}
-
-/**
- * Passer un nom en une valeur compatible avec une classe css
- *
- * - toto => toto,
- * - toto/truc => toto_truc,
- * - toto[truc] => toto_truc
- *
- * @param string $nom
- * @return string
-**/
-function saisie_nom2classe($nom) {
-       return str_replace(array('/', '[', ']', '&#91;', '&#93;'), array('_', '_', '', '_', ''), $nom);
-}
-
-/**
- * Passer un nom en une valeur compatible avec un `name` de formulaire
- *
- * - toto => toto,
- * - toto/truc => toto[truc],
- * - toto/truc/ => toto[truc][],
- * - toto[truc] => toto[truc]
- *
- * @see saisie_name2nom() pour l'inverse.
- * @param string $nom
- * @return string
-**/
-function saisie_nom2name($nom) {
-       if (false === strpos($nom, '/')) {
-               return $nom;
-       }
-       $nom = explode('/', $nom);
-       $premier = array_shift($nom);
-       $nom = implode('][', $nom);
-       return $premier . '[' . $nom . ']';
-}
-
-/**
- * Passer un `name` en un format de nom compris de saisies
- *
- * - toto => toto,
- * - toto[truc] => toto/truc,
- * - toto[truc][] => toto/truc/
- * - toto/truc => toto/truc
- *
- * @see saisie_nom2name() pour l'inverse.
- * @param string $name
- * @return string
- **/
-function saisie_name2nom($name) {
-       if (false === strpos($name, '[')) {
-               return $name;
-       }
-       $name = explode('[', str_replace(']', '', $name));
-       return implode('/', $name);
-}
-
-/**
- * Compile la balise `#GLOBALS{xxx}` qui retourne la valeur d'une vilaine variable globale de même nom si elle existe
- *
- * @example
- *     ```
- *     #GLOBALS{debut_intertitre}
- *     ```
- *
- * @param Champ $p
- *     Pile au niveau de la balise
- * @return Champ
- *     Pile complétée du code php de la balise.
-**/
-function balise_GLOBALS_dist($p) {
-       if (function_exists('balise_ENV')) {
-               return balise_ENV($p, '$GLOBALS');
-       } else {
-               return balise_ENV_dist($p, '$GLOBALS');
-       }
-}
-
-/**
- * Liste les éléments du sélecteur générique triés
- *
- * Les éléments sont triés par objets puis par identifiants
- *
- * @example
- *     L'entrée :
- *     'rubrique|3,rubrique|5,article|2'
- *     Retourne :
- *     array(
- *        0 => array('objet'=>'article', 'id_objet' => 2),
- *        1 => array('objet'=>'rubrique', 'id_objet' => 3),
- *        2 => array('objet'=>'rubrique', 'id_objet' => 5),
- *     )
- *
- * @param string $selected
- *     Liste des objets sélectionnés
- * @return array
- *     Liste des objets triés
-**/
-function picker_selected_par_objet($selected) {
-       $res = array();
-       $liste = picker_selected($selected);
-       // $liste : la sortie dans le désordre
-       if (!$liste) {
-               return $res;
-       }
-
-       foreach ($liste as $l) {
-               if (!isset($res[ $l['objet'] ])) {
-                       $res[ $l['objet'] ] = array();
-               }
-               $res[$l['objet']][] = $l['id_objet'];
-       }
-       // $res est trié par objet, puis par identifiant
-       ksort($res);
-       foreach ($res as $objet => $ids) {
-               sort($res[$objet]);
-       }
-
-       // on remet tout en file
-       $liste = array();
-       foreach ($res as $objet => $ids) {
-               foreach ($ids as $id) {
-                       $liste[] = array('objet' => $objet, 'id_objet' => $id);
-               }
-       }
-
-       return $liste;
-}
-
-
-/**
- * Lister les objets qui ont une url_edit renseignée et qui sont éditables.
- *
- * @return array Liste des objets :
- *               index : nom de la table (spip_articles, spip_breves, etc.)
- *               'type' : le type de l'objet ;
- *               'url_edit' : l'url d'édition de l'objet ;
- *               'texte_objets' : le nom humain de l'objet éditorial.
- */
-function lister_tables_objets_edit() {
-       include_spip('base/abstract_sql');
-
-       $objets = lister_tables_objets_sql();
-       $objets_edit = array();
-
-       foreach ($objets as $objet => $definition) {
-               if (isset($definition['editable']) and isset($definition['url_edit']) and $definition['url_edit'] != '') {
-                       $objets_edit[$objet] = array('type' => $definition['type'], 'url_edit' => $definition['url_edit'], 'texte_objets' => $definition['texte_objets']);
-               }
-       }
-       $objets_edit = array_filter($objets_edit);
-
-       return $objets_edit;
-}
-
-/**
- * Afficher la chaine de langue traduite.
- *
- * @param string $chaine
- * @return string
- */
-function saisies_label($chaine) {
-       $chaine = trim($chaine);
-       if (preg_match("/:>$/", $chaine)) {
-               $chaine = preg_replace("/^&lt;:/", "", $chaine);
-               $chaine = preg_replace("/^<;:/", "", $chaine);
-               $chaine = preg_replace("/:>$/", "", $chaine);
-               return _T($chaine);
-       }
-
-       return $chaine;
-}
\ No newline at end of file
diff --git a/www/plugins/saisies/saisies_options.php b/www/plugins/saisies/saisies_options.php
deleted file mode 100644 (file)
index c35bebe..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * Déclaration systématiquement chargées
- *
- * @package SPIP\Saisies
-**/
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-if (!function_exists('_T_ou_typo')) {
-       /**
-        * une fonction qui regarde si $texte est une chaine de langue
-        * de la forme <:qqch:>
-        * si oui applique _T()
-        * si non applique typo() suivant le mode choisi
-        *
-        * @param mixed $valeur
-        *     Une valeur à tester. Si c'est un tableau, la fonction s'appliquera récursivement dessus.
-        * @param string $mode_typo
-        *     Le mode d'application de la fonction typo(), avec trois valeurs possibles "toujours", "jamais" ou "multi".
-        * @return mixed
-        *     Retourne la valeur éventuellement modifiée.
-        */
-       function _T_ou_typo($valeur, $mode_typo = 'toujours') {
-               // Si la valeur est bien une chaine (et pas non plus un entier déguisé)
-               if (is_string($valeur) and !intval($valeur)) {
-                       // Si la chaine est du type <:truc:> on passe à _T()
-                       if (preg_match('/^\<:(.*?):\>$/', $valeur, $match)) {
-                               $valeur = _T($match[1]);
-                       } else {
-                               // Sinon on la passe a typo()
-                               if (!in_array($mode_typo, array('toujours', 'multi', 'jamais'))) {
-                                       $mode_typo = 'toujours';
-                               }
-
-                               if ($mode_typo == 'toujours' or ($mode_typo == 'multi' and strpos($valeur, '<multi>') !== false)) {
-                                       include_spip('inc/texte');
-                                       $valeur = typo($valeur);
-                               }
-                       }
-               } elseif (is_array($valeur)) {
-                       // Si c'est un tableau, on reapplique la fonction récursivement
-                       foreach ($valeur as $cle => $valeur2) {
-                               $valeur[$cle] = _T_ou_typo($valeur2, $mode_typo);
-                       }
-               }
-
-               return $valeur;
-       }
-}
diff --git a/www/plugins/saisies/saisies_pipelines.php b/www/plugins/saisies/saisies_pipelines.php
deleted file mode 100644 (file)
index f262d21..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php\r
-\r
-/**\r
- * Utilisation des pipelines\r
- *\r
- * @package SPIP\Saisies\Pipelines\r
-**/\r
-\r
-// Sécurité\r
-if (!defined('_ECRIRE_INC_VERSION')) {\r
-       return;\r
-}\r
-\r
-/**\r
- * Ajoute les scripts JS et CSS de saisies dans l'espace privé\r
- *\r
- * @param string $flux\r
- * @return string\r
-**/\r
-function saisies_header_prive($flux) {\r
-       $js = find_in_path('javascript/saisies.js');\r
-       $flux .= "\n<script type='text/javascript' src='$js'></script>\n";\r
-       $css = generer_url_public('saisies.css');\r
-       $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";\r
-       $css_constructeur = find_in_path('css/formulaires_constructeur.css');\r
-       $flux .= "\n<link rel='stylesheet' href='$css_constructeur' type='text/css' />\n";\r
-       \r
-       return $flux;\r
-}\r
-\r
-/**\r
- * Ajoute les scripts JS et CSS de saisies dans l'espace public\r
- *\r
- * Ajoute également de quoi gérer le datepicker de la saisie date si\r
- * celle-ci est utilisée dans la page.\r
- *\r
- * @param string $flux\r
- * @return string\r
-**/\r
-function saisies_affichage_final($flux) {\r
-       if (\r
-               $GLOBALS['html'] // si c'est bien du HTML\r
-               and ($p = strpos($flux, '<!--!inserer_saisie_editer-->')) !== false // et qu'on a au moins une saisie\r
-               and strpos($flux, '<head') !== false // et qu'on a la balise <head> quelque part\r
-       ) {\r
-               // On insère la CSS devant le premier <link> trouvé\r
-               if (!$pi = strpos($flux, '<link') and !$pi = strpos($flux, '</head')) {\r
-                       $pi = $p; // si pas de <link inserer comme un goret entre 2 <li> de saisies\r
-               }\r
-               $css = generer_url_public('saisies.css');\r
-               $ins_css = "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";\r
-\r
-               if (strpos($flux, 'saisie_date') !==false) {//si on a une saisie de type date, on va charger les css de jquery_ui\r
-                       include_spip('jqueryui_pipelines');\r
-                       if (function_exists('jqueryui_dependances')) {\r
-                               $ui_plugins = jqueryui_dependances(array('jquery.ui.datepicker'));\r
-                               $theme_css = 'jquery.ui.theme';\r
-                               $ui_css_dir = 'css';\r
-                               // compatibilité SPIP 3.1 et jQuery UI 1.11\r
-                               $version = explode('.', $GLOBALS['spip_version_branche']);\r
-                               if ($version[0] > 3 or ($version[0] == 3 and $version[1] > 0)) {\r
-                                       $theme_css = 'theme';\r
-                                       $ui_css_dir = 'css/ui';\r
-                               }\r
-                               array_push($ui_plugins, $theme_css);\r
-                               foreach ($ui_plugins as $ui_plug) {\r
-                                               // compatibilité pour les versions < SPIP 3.2\r
-                                               if ($version[0] < 3 or ($version[0] == 3 and $version[1] < 2)) {\r
-                                                       $ui_plug_css = find_in_path("$ui_css_dir/$ui_plug.css");\r
-                                                       if (strpos($flux, "$ui_css_dir/$ui_plug.css") === false) {// si pas déjà chargé\r
-                                                               $ins_css .= "\n<link rel='stylesheet' href='$ui_plug_css' type='text/css' media='all' />\n";\r
-                                                       }\r
-                                               }\r
-                               }\r
-                               // compatibilité SPIP 3.2 et jQuery UI 1.12\r
-                if ($version[0] == 3 and $version[1] > 1) {\r
-                               $ins_css .= "\n<link rel='stylesheet' type='text/css' media='all' href='" . find_in_path('css/ui/jquery-ui.css') . "' />\n";\r
-                               }\r
-                       }\r
-               }\r
-\r
-               $flux = substr_replace($flux, $ins_css, $pi, 0);\r
-               // On insère le JS à la fin du <head>\r
-               $pos_head = strpos($flux, '</head');\r
-               $js = find_in_path('javascript/saisies.js');\r
-               $ins_js = "\n<script type='text/javascript' src='$js'></script>\n";\r
-               $flux = substr_replace($flux, $ins_js, $pos_head, 0);\r
-       }\r
-       \r
-       return $flux;\r
-}\r
-\r
-\r
-/**\r
- * Déclarer automatiquement les champs d'un formulaire CVT qui déclare des saisies\r
- *\r
- * Recherche une fonction `formulaires_XX_saisies_dist` et l'utilise si elle\r
- * est présente. Cette fonction doit retourner une liste de saisies dont on se\r
- * sert alors pour calculer les champs utilisés dans le formulaire.\r
- *\r
- * @param array $flux\r
- * @return array\r
-**/\r
-function saisies_formulaire_charger($flux) {\r
-       // Si le flux data est inexistant, on quitte : Le CVT d'origine a décidé de ne pas continuer\r
-       if (!is_array($flux['data'])) {\r
-               return $flux;\r
-       }\r
-\r
-       // Il faut que la fonction existe et qu'elle retourne bien un tableau\r
-       include_spip('inc/saisies');\r
-       $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);\r
-\r
-       if ($saisies) {\r
-               // On ajoute au contexte les champs à déclarer\r
-               $contexte = saisies_lister_valeurs_defaut($saisies);\r
-               $flux['data'] = array_merge($contexte, $flux['data']);\r
-\r
-               // On ajoute le tableau complet des saisies\r
-               $flux['data']['_saisies'] = $saisies;\r
-       }\r
-       return $flux;\r
-}\r
-\r
-/**\r
- * Aiguiller CVT vers un squelette propre à Saisies lorsqu'on a déclaré des saisies et qu'il n'y a pas déjà un HTML\r
- *\r
- * Dans le cadre d'un formulaire CVT demandé, si ce formulaire a déclaré des saisies, et\r
- * qu'il n'y a pas de squelette spécifique pour afficher le HTML du formulaire,\r
- * alors on utilise le formulaire générique intégré au plugin saisie, qui calculera le HTML\r
- * à partir de la déclaration des saisies indiquées.\r
- *\r
- * @see saisies_formulaire_charger()\r
- *\r
- * @param array $flux\r
- * @return array\r
-**/\r
-function saisies_styliser($flux) {\r
-       if (\r
-               // Si on cherche un squelette de formulaire\r
-               strncmp($flux['args']['fond'], 'formulaires/', 12) == 0\r
-               // Et qu'il y a des saisies dans le contexte\r
-               and isset($flux['args']['contexte']['_saisies'])\r
-               // Et que le fichier choisi est vide ou n'existe pas\r
-               and include_spip('inc/flock')\r
-               and $ext = $flux['args']['ext']\r
-               and lire_fichier($flux['data'].'.'.$ext, $contenu_squelette)\r
-               and !trim($contenu_squelette)\r
-       ) {\r
-               $flux['data'] = preg_replace("/\.$ext$/", '', find_in_path("formulaires/inc-saisies-cvt.$ext"));\r
-       }\r
-\r
-       return $flux;\r
-}\r
-\r
-/**\r
- * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT\r
- *\r
- * Si un formulaire CVT a déclaré des saisies, on utilise sa déclaration\r
- * pour effectuer les vérifications du formulaire.\r
- *\r
- * @see saisies_formulaire_charger()\r
- * @uses saisies_verifier()\r
- *\r
- * @param array $flux\r
- *     Liste des erreurs du formulaire\r
- * @return array\r
- *     iste des erreurs\r
- */\r
-function saisies_formulaire_verifier($flux) {\r
-       // Il faut que la fonction existe et qu'elle retourne bien un tableau\r
-       include_spip('inc/saisies');\r
-       $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);\r
-       if ($saisies) {\r
-               // On ajoute au contexte les champs à déclarer\r
-               $erreurs = saisies_verifier($saisies);\r
-               if ($erreurs and !isset($erreurs['message_erreur'])) {\r
-                       $erreurs['message_erreur'] = _T('saisies:erreur_generique');\r
-               }\r
-\r
-               $flux['data'] = array_merge($erreurs, $flux['data']);\r
-\r
-       }\r
-\r
-       return $flux;\r
-}\r
diff --git a/www/plugins/saisies/svn.revision b/www/plugins/saisies/svn.revision
deleted file mode 100644 (file)
index f852373..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/saisies/trunk
-Revision: 107777
-Dernier commit: 2017-11-27 20:11:15 +0100 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/saisies/trunk</origine>
-<revision>107777</revision>
-<commit>2017-11-27 20:11:15 +0100 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/skel_lhc/contenu/evenement.html b/www/plugins/skel_lhc/contenu/evenement.html
new file mode 100755 (executable)
index 0000000..8482350
--- /dev/null
@@ -0,0 +1,20 @@
+<BOUCLE_contenu_article(ARTICLES){id_article}>
+[(#REM) Fil d'Ariane ]
+<p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><BOUCLE_ariane(HIERARCHIE){id_article}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; <strong class="on">(#TITRE|couper{80})</strong>]</p>
+</BOUCLE_contenu_article>
+
+<div class="contenu-principal">
+       <div class="cartouche">
+               <BOUCLE_evenement(EVENEMENTS){id_evenement}>
+               [(#LOGO_ARTICLE||image_reduire{200,200})]
+               <h3 class="#EDIT{titre}">#TITRE</h3>
+               <strong>[(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE})]</strong>
+       </div>
+       [<div class="surlignable #EDIT{descriptif}">
+               (#DESCRIPTIF)
+       </div>]
+               <div class="ajax">
+                       #FORMULAIRE_RESERVATION{#ENV{id_evenement},#ENV{id_article}, #ENV{retour}, #ENV{options}}
+               </div>
+               </BOUCLE_evenement>
+</div>
diff --git a/www/plugins/skel_lhc/evenement.html b/www/plugins/skel_lhc/evenement.html
new file mode 100644 (file)
index 0000000..5bc02b5
--- /dev/null
@@ -0,0 +1,3 @@
+<BOUCLE_principale_evenement(EVENEMENTS){id_evenement}>
+<INCLURE{fond=structure}{env}{id_article=#ENV{id_article,#ID_ARTICLE}}{type=evenement}{composition=#COMPOSITION} />
+</BOUCLE_principale_evenement>
diff --git a/www/plugins/skel_lhc/formulaires/inc-reservation_connection.html b/www/plugins/skel_lhc/formulaires/inc-reservation_connection.html
new file mode 100644 (file)
index 0000000..561c9a8
--- /dev/null
@@ -0,0 +1,103 @@
+#SET{id_auteur,#SESSION{id_auteur}}
+<div class="identifiants">
+       <BOUCLE_connecte(CONDITION){si #GET{id_auteur}|>{0}}>
+               <div class="donnes_personnels">
+                       <div class="nom">
+                               <span class="label"><:reservation:label_nom:></span> <span>#NOM</span>
+                       </div>
+                       <div class="nom">
+                               <span class="label"><:reservation:label_email:></span> <span>#EMAIL</span>
+                       </div>
+                       <BOUCLE_extras(DATA){source tableau, #ENV{champs_extras_auteurs}}>
+                               #SET{nom,#OPTIONS|table_valeur{nom}}
+                               <div class="#GET{nom}">
+                                       <span class="label">[(#OPTIONS|table_valeur{label})]</span> <span>#ENV{#GET{nom}}</span>
+                               </div>
+                       </BOUCLE_extras>
+               </div>
+               <div class="editer-groupe">
+               [(#SAISIE{checkbox,modifier_donnees_auteur,
+                       label=<:reservation:label_modifier_identifiants_personnels:>,
+                       datas=#ARRAY{1,<:reservation:ok:>}
+                       })]
+               </div>
+       </BOUCLE_connecte>
+
+       <div class="editer-groupe donnees_auteur">
+               [(#SAISIE{input,#ENV{name_nom,nom},label=<:reservation:label_nom:>,obligatoire=oui})]
+
+               [(#SAISIE{input,#ENV{name_email,email},label=<:reservation:label_email:>,obligatoire=oui})]
+
+               [(#REM)Géneration des champs extras auteurs]
+
+               #GENERER_SAISIES{#ENV{champs_extras_auteurs}}
+       </div>
+
+
+       <!--extra_connection1-->
+[(#GET{id_auteur}|>{0}|non|et{#ENV{enregistrement_inscrit}|=={on}|oui})
+       <div class="editer-groupe">
+               [(#ENV{enregistrement_inscrit_obligatoire}|!={on}|?{
+                       [(#SAISIE{checkbox,enregistrer,
+                               class=enregistrer,
+                               label=<:reservation:label_enregistrer:>,
+                               datas=#ARRAY{1,<:reservation:ok:>}
+                       })]
+                       ,
+                       #SET{obligatoire,oui}
+               })]
+               <div class="editer-groupe block_mp">
+                       [(#SAISIE{input,#ENV{name_new_login,new_login},
+                               label=<:item_login:>,
+                               obligatoire=#GET{obligatoire}
+                       })]
+                       [(#SAISIE{input,#ENV{name_new_pass,new_pass},
+                               type="password",
+                               label=<:reservation:label_mot_passe:>,
+                               obligatoire=#GET{obligatoire},
+                               class=password,explication=<:info_plus_cinq_car:>
+                       })]
+                       [(#SAISIE{input,#ENV{name_new_pass2,new_pass2},
+                               type="password",
+                               label=<:reservation:label_mot_passe2:>,
+                               obligatoire=#GET{obligatoire},
+                               class=password
+                       })]
+               </div>
+       </div>
+]
+</div>
+
+<!--extra_connection2-->
+<BOUCLE_condition(CONDITION){si #ENV{enregistrement_inscrit_obligatoire}|!={on}|oui}>
+       <script type="text/javascript">
+               /*<![CDATA[*/
+               if (!$('input[name="enregistrer[]"]').is(':checked')) {
+                       $('.block_mp').hide();
+               }
+
+               $('input[name="enregistrer[]"]').click(function() {
+                       $('.block_mp').slideToggle('slow', function() {
+                       });
+               });
+               /*]]>*/
+       </script>
+</BOUCLE_condition>
+
+<BOUCLE_condition2(CONDITION){si #GET{id_auteur}|>{0}|oui}>
+       <script type="text/javascript">
+               /*<![CDATA[*/
+                       if (!$('input[name="modifier_donnees_auteur[]"]').is(':checked')) {
+                               $('.donnees_auteur').hide();
+                       }
+                       else {
+                               $('.donnes_personnels').hide();
+                       }
+
+                       $('input[name="modifier_donnees_auteur[]"]').click(function() {
+                               $('.donnees_auteur').slideToggle('slow', function() {});
+                               $('.donnes_personnels').slideToggle('slow', function() {});
+                       });
+               /*]]>*/
+       </script>
+</BOUCLE_condition2>
diff --git a/www/plugins/skel_lhc/formulaires/inc-reservation_evenements.html b/www/plugins/skel_lhc/formulaires/inc-reservation_evenements.html
new file mode 100644 (file)
index 0000000..2c4b2e3
--- /dev/null
@@ -0,0 +1,43 @@
+<B_art_or>
+<div class='editer editer_id_evenement[ (#ENV**{erreurs}|table_valeur{id_evenement}|oui)erreur]'>
+       [<div class='erreur_message'>(#ENV**{erreurs}|table_valeur{id_evenement})</div>]
+<BOUCLE_art_or (DATA){source tableau,#ENV{evenements}} {id_evenement_source ?} {par date_debut}>
+       #SET{prix,#VALEUR{prix}}
+       [(#REM) Si le plugin prix objets est activé on regarde si il y a un prix attaché à l'évenement]
+       #SET{prix2, #INCLURE{
+               fond=formulaires/inc-reservation_evenements_prix,
+               id_evenement=#VALEUR{id_evenement},
+               id_evenement_source,
+               id_article,
+               prix=#GET{prix}
+       }|sinon{
+                       #INCLURE{fond=formulaires/inc-reservation_evenements_prix,
+                               id_evenement=#VALEUR{id_evenement_source},
+                               id_article,
+                               prix=#GET{prix}
+                       }
+               }
+       }
+
+               #SET{id_article,#ID_ARTICLE}
+       [(#COMPTEUR_BOUCLE|!={1}|oui)
+               </div>
+               <div class='editer editer_id_evenement[ (#ENV**{erreurs}|table_valeur{id_evenement}|oui)erreur]'>
+       ]
+       [<div class="location" itemprop="location">
+               <legend>Informations complémentaires</legend>
+               <span class="lieu">(#LIEU)</span>[<br />
+               <span class="adresse">(#ADRESSE|PtoBR)</span>]
+       </div>]
+       <legend>Inscription</legend>
+       [(#PLACES|>{0}|oui)
+               <INCLURE{fond=inclure/places_disponibles,
+               id_evenement,
+               places,
+               statut=#VAL|statuts_complet} />]
+       <INCLURE{fond=formulaires/inc-reservation_evenements_champ,
+               id_evenement,
+               prix=#GET{prix2},evenements=#ENV{id_evenement}} />
+</BOUCLE_art_or>
+<!--extra_evenements-->
+</B_art_or>
diff --git a/www/plugins/skel_lhc/formulaires/reservation.html b/www/plugins/skel_lhc/formulaires/reservation.html
new file mode 100755 (executable)
index 0000000..b9d46ec
--- /dev/null
@@ -0,0 +1,48 @@
+<div class="formulaire_spip formulaire_#FORM formulaire_#FORM-#ENV{id,#ENV{id_evenement}}">
+       [(#PLUGIN{declinaisons}|?{
+               #SET{champs, #INCLURE{fond=formulaires/inc-reservation_evenements_declinaisons,env}}
+               ,
+               #SET{champs, #INCLURE{fond=formulaires/inc-reservation_evenements,env}}
+       })]
+       [(#GET{champs}|?{
+               [<div class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</div>]
+               [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>]
+               [(#ENV{editable})
+                       <form method='post' action='#ENV{action}' enctype='multipart/form-data'>
+                               <div>
+                                       [(#REM) declarer les hidden qui declencheront le service du
+                                       formulaire parametre : url d'action ]
+                                       #ACTION_FORMULAIRE{#ENV{action}}
+                                       <fieldset>
+                                               <div class="editer-groupe evenements">
+                                                       #GET{champs}
+                                               </div>
+                                       </fieldset>
+                                       <fieldset>
+                                               <INCLURE {fond=formulaires/inc-reservation_connection,env} />
+                                       </fieldset>
+                                       [(#CONFIG{reservation_evenement/destinataires_supplementaires}|=={on}|oui)
+                                       <fieldset>
+                                               <legend><:reservation:notifications_cfg_titre:></legend>
+                                               <div class="editer-groupe">
+                                                       [(#SAISIE{
+                                                               input,
+                                                               destinataires_supplementaires,
+                                                               label=<:reservation:label_destinataires_supplementaires:>,
+                                                               explication=<:reservation:explication_destinataires_supplementaires:>})]
+                                               </div>
+                                       </fieldset>]
+                                       <INCLURE {fond=formulaires/inc-reservation_champs_extras_reservation,env} />
+
+                                       [(#REM) ajouter les saisies supplementaires : extra et autre, a cet
+                                       endroit ]
+                                       <!--extra-->
+                                       <p class='boutons'>
+                                               <input type='submit' class='submit' value='<:bouton_enregistrer:>' />
+                                       </p>
+                               </div>
+                       </form>
+               ]
+               ,<:reservation:erreur_pas_evenement:>
+               })]
+</div>
index 350257e..91bf398 100644 (file)
     padding: 1px;
 }
 
-.cartouche {
-    float: right;
-}
+/*** Zone 8 images ***/
+#featured-list-visible {
+       padding: 0;
+       margin: 0;
+       list-style: none;
+}
+
+#featured-list-visible .post {
+       padding: 0;
+       margin: 0 36px 26px 0;
+       width: 213px;
+       height: 176px;
+       float: left;
+}
+#featured-list-visible .post:nth-child(4n+4) {
+       margin-right: 0;
+}
+#featured-list-visible .post:last-child {
+       margin-bottom: 0;
+}
+#featured-list-visible .post a {
+       display: block;
+       border: 5px solid #93989b;
+       border-radius: 3px;
+       width: 203px;
+       height: 166px;
+       overflow: hidden;       
+}
+#featured-list-visible .post a:hover {
+       border-color: #293238;  
+}
+#featured-list-visible .post img {
+    -ms-filter: "prodig:DXImageTransform.Microsoft.Alpha(Opacity=100)"; /* Hack IE8 */
+    filter: alpha(opacity = 100); /* Hack IE 5-7 */
+    -webkit-transition: opacity 0.5s ease-in-out;/* transition pour Chrome et Safari */
+    -moz-transition: opacity 0.5s ease-in-out;/* transition pour Firefox */
+    -o-transition: opacity 0.5s ease-in-out;/* transition pour Opéra */
+    transition: opacity 0.5s ease-in-out;
+}
+#featured-list-visible .post:hover img {
+    border-color: #293238;
+    opacity: 0.7;
+    -ms-filter:"prodig:DXImageTransform.Microsoft.Alpha(Opacity=70)"; /* Hack IE 8 */
+    filter: alpha(opacity = 70);
+}
+#featured-list-visible .post .info_art {
+    height: 156px;
+    visibility: visible;
+} 
 
 .page-header .page-title {
     color: #16212c;
@@ -148,3 +194,36 @@ dl.spip_documents {
     color: #16212c;
     border: none;
 }
+
+.calendriermini .ui-datepicker-buttonpane button, .formulaire_spip .boutons input, input.submit {
+ float:right;
+ margin:.5em .2em .4em;
+ cursor:pointer;
+ padding:0 10px;
+ width:auto;
+ overflow:visible;
+ background-color: #F39200;
+ color: #FFF;
+ border: 0 none;
+ border-radius: 10px;
+ line-height: 30px;
+ height: 30px;
+ font-weight: bold;
+ font-size: 14px;
+ text-align: center;
+}
+
+/*** Reservation événements ***/
+
+.reponse_formulaire_ok {
+  color: #16212c;
+}
+
+thead th {
+  background: none repeat scroll 0 0 #7F7F7E;
+  color: #fff;
+}
+
+#secondary.sidebar .ui-datepicker-calendar a:link {
+  color: #16212c;
+}
index 346e0e0..96032b7 100755 (executable)
 <!-- Bloc images articles -->
 <div id="main-wrap">
        <div id="main">
+               <div id="secondary-full">
+                       <div class="clear-fix" role="main" id="content">
+                               <B_evenements>
+                               <div class="page-header">
+                               <h2 class="page-title"><:agenda:evenements_a_venir:></h2>
+                               </div>
+                                               <ul class="clear-fix" id="featured-list-visible">
+                                                       <BOUCLE_evenements(EVENEMENTS){par date}{evenement_a_venir}{0,8}>
+                                                       <li class="post post-#COMPTEUR_BOUCLE">
+                                                               <a href="#URL_EVENEMENT" title="#TITRE">
+                                                               [(#LOGO_ARTICLE||?{
+                                                               [(#LOGO_ARTICLE|image_reduire{203,166}|image_recadre{203,166,center})]
+                                                               ,
+                                                               [<img src="(#CHEMIN{img/nologo.png})" alt="" class="spip_logos" width="203" height="166" />]
+                                                               })]
+                                                               <div class="info_art">
+                                                                       <h3>[(#TITRE|couper{15,'...'})]</h3>
+                                                                       <h4>[(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE})]</h4>
+                                                                       <p>#LIEU</p>
+                                                                       [(#INSCRIPTION|oui)<p>Événement sur inscription</p>]
+                                                               </div>
+                                                               </a>
+                                                       </li>
+                                                       </BOUCLE_evenements>
+                                               </ul>
+                               </B_evenements>
+                       </div>          
+               </div>
+               
+               <div class="clear"></div>
                <div id="primary-full">
                        <div class="clear-fix" role="main" id="content">
                                
                                                        <li class="post post-#COMPTEUR_BOUCLE">
                                                                <a href="#URL_ARTICLE" title="#TITRE">
                                                                [(#LOGO_ARTICLE||?{
-                                                                [(#LOGO_ARTICLE|image_reduire{203,166}|image_recadre{203,166,center})]
-                                                               ,
-                                                               [<img src="(#CHEMIN{img/nologo.png})" alt="" class="spip_logos" width="203" height="166" />]
-                                                           })]
-                                                           <div class="info_art">
-                                                               <h3>[(#TITRE|couper{15,'...'})]</h3>
-                                                               <p>[(#INTRODUCTION|couper{100})]</p>
-                                                           </div>
+                                                               [(#LOGO_ARTICLE|image_reduire{203,166}|image_recadre{203,166,center})]
+                                                               ,
+                                                               [<img src="(#CHEMIN{img/nologo.png})" alt="" class="spip_logos" width="203" height="166" />]
+                                                               })]
+                                                               <div class="info_art">
+                                                                       <h3>[(#TITRE|couper{15,'...'})]</h3>
+                                                                       <p>[(#INTRODUCTION|couper{100})]</p>
+                                                               </div>
                                                                </a>            
                                                        </li>
                                                        </BOUCLE_articles1>
index 9b18d47..3966ee8 100755 (executable)
@@ -10,7 +10,7 @@
     <nom>Squelette Heureux Cyclage</nom>
     <auteur lien="https://www.heureux-cyclage.org/_ludovic-chevalier_.html">Ludovic CHEVALIER</auteur>
     <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GNU/GPL</licence>
-    <copyright>2011-2019</copyright>
+    <copyright>2011-2021</copyright>
     <pipeline nom="insert_head" inclure="skel_lhc_pipelines.php" />
     <necessite nom="abomailmans" compatibilite= "[1.1.4;]" />
     <necessite nom="compositions" compatibilite= "[3.3.2;]" />
@@ -26,6 +26,7 @@
     <necessite nom="notifications" compatibilite= "[3.0.10;]" />
     <necessite nom="odt2spip" compatibilite= "[2.0.1;]" />
     <necessite nom="piwik" compatibilite= "[0.6.0;]" />
+    <necessite nom="reservation_evenement" compatibilite= "[2.0.0;]" />
     <necessite nom="rssarticle" compatibilite= "[1.1.0;]" />
     <necessite nom="typoenluminee" compatibilite= "[3.3.2;]" />
     <necessite nom="zengarden" compatibilite= "[2.5.2;]" />
diff --git a/www/plugins/spip-bonux b/www/plugins/spip-bonux
new file mode 160000 (submodule)
index 0000000..b4a269a
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit b4a269a690dbbe51f5bfbd01b403bba94511e266
diff --git a/www/plugins/spip-bonux-3/demo/boucle_et_saut.html b/www/plugins/spip-bonux-3/demo/boucle_et_saut.html
deleted file mode 100644 (file)
index c43b737..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-[(#REM)
-
-  Squelette
-  (c) 2009 xxx
-  Distribue sous licence GPL
-
-]
-<BOUCLE_art(ARTICLES){par id_article}{0,10}{'-'}>
-#TOTAL_BOUCLE:#COMPTEUR_BOUCLE:#ID_ARTICLE
-</BOUCLE_art>
-<hr />
-<BOUCLE_art2(ARTICLES){par id_article}{0,10}{'-'}>
-#TOTAL_BOUCLE:#COMPTEUR_BOUCLE:#ID_ARTICLE
-[(#SAUTER{1})]
-</BOUCLE_art2>
diff --git a/www/plugins/spip-bonux-3/demo/boucles_iterations.html b/www/plugins/spip-bonux-3/demo/boucles_iterations.html
deleted file mode 100644 (file)
index 004663d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<BOUCLE_test10(POUR){tableau 1:10}>
-#CLE/#VALEUR<br />
-</BOUCLE_test10>
-#TOTAL_BOUCLE
-</B_test10>
-
-<hr />
-<BOUCLE_test11(POUR){tableau 1:2:10}>
-#CLE/#VALEUR<br />
-</BOUCLE_test11>
-#TOTAL_BOUCLE
-</B_test11>
-
-<hr />
-
-<BOUCLE_test12(POUR){tableau 10:-2:1}>
-#CLE/#VALEUR<br />
-</BOUCLE_test12>
-#TOTAL_BOUCLE
-</B_test12>
-
-<B_test13>
-       <p class="pagination">#PAGINATION</p>
-<BOUCLE_test13(POUR){tableau 1:100}{pagination}>
-#CLE/#VALEUR<br />
-</BOUCLE_test13>
-[#TOTAL_BOUCLE/#GRAND_TOTAL]
-</B_test13>
-
-<hr />
-
-<BOUCLE_test14(POUR){tableau 1:7}>
-       <BOUCLE_test15(POUR){tableau 1:#VALEUR}>
-       #VALEUR
-       </BOUCLE_test15>
-       <br />
-</BOUCLE_test14>
diff --git a/www/plugins/spip-bonux-3/demo/noeud.html b/www/plugins/spip-bonux-3/demo/noeud.html
deleted file mode 100644 (file)
index 8444005..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-[(#REM)
-
-  Squelette
-  (c) xxx
-  Distribue sous licence GPL
-
-]
-#CACHE{0}
-
-<BOUCLE_rubn(RUBRIQUES){noeud}>
-<li>#ID_RUBRIQUE</li>
-</BOUCLE_rubn>
-<hr />
-<BOUCLE_rubf(RUBRIQUES){!feuille}>
-<li>#ID_RUBRIQUE</li>
-</BOUCLE_rubf>
\ No newline at end of file
diff --git a/www/plugins/spip-bonux-3/img_pack/annuler-recherche.png b/www/plugins/spip-bonux-3/img_pack/annuler-recherche.png
deleted file mode 100644 (file)
index f138239..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/annuler-recherche.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/article-12.png b/www/plugins/spip-bonux-3/img_pack/article-12.png
deleted file mode 100644 (file)
index 3d1a092..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/article-12.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/deplier-droite.gif b/www/plugins/spip-bonux-3/img_pack/deplier-droite.gif
deleted file mode 100644 (file)
index b6a570d..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/deplier-droite.gif and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/deplier-droite.png b/www/plugins/spip-bonux-3/img_pack/deplier-droite.png
deleted file mode 100644 (file)
index 01dcd02..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/deplier-droite.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/frame-close.png b/www/plugins/spip-bonux-3/img_pack/frame-close.png
deleted file mode 100644 (file)
index 92fc307..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/frame-close.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/item-add.gif b/www/plugins/spip-bonux-3/img_pack/item-add.gif
deleted file mode 100644 (file)
index 33faedb..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/item-add.gif and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/item-add.png b/www/plugins/spip-bonux-3/img_pack/item-add.png
deleted file mode 100644 (file)
index 9675083..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/item-add.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/item-remove.png b/www/plugins/spip-bonux-3/img_pack/item-remove.png
deleted file mode 100644 (file)
index 6346715..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/item-remove.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/logo-bonux.gif b/www/plugins/spip-bonux-3/img_pack/logo-bonux.gif
deleted file mode 100644 (file)
index 2c1db2e..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/logo-bonux.gif and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/message_erreur-24.png b/www/plugins/spip-bonux-3/img_pack/message_erreur-24.png
deleted file mode 100644 (file)
index dfdd5c9..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/message_erreur-24.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/message_notice-24.png b/www/plugins/spip-bonux-3/img_pack/message_notice-24.png
deleted file mode 100644 (file)
index 7f80d7b..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/message_notice-24.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/message_ok-24.png b/www/plugins/spip-bonux-3/img_pack/message_ok-24.png
deleted file mode 100644 (file)
index 55708cb..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/message_ok-24.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/spip-bonux.png b/www/plugins/spip-bonux-3/img_pack/spip-bonux.png
deleted file mode 100644 (file)
index d787156..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/spip-bonux.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/tri_asc-12.png b/www/plugins/spip-bonux-3/img_pack/tri_asc-12.png
deleted file mode 100644 (file)
index 788c725..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/tri_asc-12.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/tri_asc-16.png b/www/plugins/spip-bonux-3/img_pack/tri_asc-16.png
deleted file mode 100644 (file)
index 19b2e99..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/tri_asc-16.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/tri_asc-24.png b/www/plugins/spip-bonux-3/img_pack/tri_asc-24.png
deleted file mode 100644 (file)
index 02267bc..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/tri_asc-24.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/tri_asc.png b/www/plugins/spip-bonux-3/img_pack/tri_asc.png
deleted file mode 100644 (file)
index f6d5357..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/tri_asc.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/tri_desc-12.png b/www/plugins/spip-bonux-3/img_pack/tri_desc-12.png
deleted file mode 100644 (file)
index e2b7e6d..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/tri_desc-12.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/tri_desc-16.png b/www/plugins/spip-bonux-3/img_pack/tri_desc-16.png
deleted file mode 100644 (file)
index 47e1d28..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/tri_desc-16.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/img_pack/tri_desc-24.png b/www/plugins/spip-bonux-3/img_pack/tri_desc-24.png
deleted file mode 100644 (file)
index 3f3a153..0000000
Binary files a/www/plugins/spip-bonux-3/img_pack/tri_desc-24.png and /dev/null differ
diff --git a/www/plugins/spip-bonux-3/inc/date_gestion.php b/www/plugins/spip-bonux-3/inc/date_gestion.php
deleted file mode 100644 (file)
index 1ab6f6a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Plugin Spip-Bonux
- * Le plugin qui lave plus SPIP que SPIP
- * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
- * Licence GPL
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Recuperer les champs date_xx et heure_xx, verifier leur coherence et les reformater
- *
- * @param string $suffixe
- * @param bool $horaire
- * @param array $erreurs
- * @return int
- */
-function verifier_corriger_date_saisie($suffixe, $horaire, &$erreurs) {
-       include_spip('inc/filtres');
-       $date = _request("date_$suffixe").($horaire?' '.trim(_request("heure_$suffixe")).':00':'');
-       $date = recup_date($date);
-       if (!$date) {
-               return '';
-       }
-       $ret = null;
-       if (!$ret=mktime(0, 0, 0, $date[1], $date[2], $date[0])) {
-               $erreurs["date_$suffixe"] = _T('spip_bonux:erreur_date');
-       } elseif (!$ret=mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0])) {
-               $erreurs["date_$suffixe"] = _T('spip_bonux:erreur_heure');
-       }
-       if ($ret) {
-               if (trim(_request("date_$suffixe") !== ($d=date('d/m/Y', $ret)))) {
-                       $erreurs["date_$suffixe"] = _T('spip_bonux:erreur_date_corrigee');
-                       set_request("date_$suffixe", $d);
-               }
-               if ($horaire and trim(_request("heure_$suffixe") !== ($h = date('H:i', $ret)))) {
-                       $erreurs["heure_$suffixe"] = _T('spip_bonux:erreur_heure_corrigee');
-                       set_request("heure_$suffixe", $h);
-               }
-       }
-       return $ret;
-}
diff --git a/www/plugins/spip-bonux-3/inc/exporter_csv.php b/www/plugins/spip-bonux-3/inc/exporter_csv.php
deleted file mode 100644 (file)
index bdd0323..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-/**
- * Plugin Spip-Bonux
- * Le plugin qui lave plus SPIP que SPIP
- * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
- * Licence GPL
- *
- * Fonctions d'export d'une requete sql ou d'un tableau
- * au format CSV
- * Merge du plugin csv_import et spip-surcharges
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/charsets');
-include_spip('inc/filtres');
-include_spip('inc/texte');
-
-/**
- * Exporter un champ pour un export CSV : pas de retour a la ligne,
- * et echapper les guillements par des doubles guillemets
- * @param string $champ
- * @return string
- */
-function exporter_csv_champ($champ) {
-       #$champ = str_replace("\r", "\n", $champ);
-       #$champ = preg_replace(",[\n]+,ms", "\n", $champ);
-       #$champ = str_replace("\n", ", ", $champ);
-       $champ = preg_replace(',[\s]+,ms', ' ', $champ);
-       $champ = str_replace('"', '""', $champ);
-       return '"'.$champ.'"';
-}
-
-/**
- * Exporter une ligne complete au format CSV, avec delimiteur fourni
- * @param array $ligne
- * @param string $delim
- * @return string
- */
-function exporter_csv_ligne($ligne, $delim = ',', $importer_charset = null) {
-       $output = join($delim, array_map('exporter_csv_champ', $ligne))."\r\n";
-       if ($importer_charset) {
-               $output = str_replace('’', '\'', $output);
-               $output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
-       }
-       return $output;
-}
-
-
-function inc_exporter_csv_dist($titre, $resource, $delim = ',', $entetes = null, $envoyer = true) {
-
-       $filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre))));
-
-       if ($delim == 'TAB') {
-               $delim = "\t";
-       }
-       if (!in_array($delim, array(',', ';', "\t"))) {
-               $delim = ',';
-       }
-
-       $charset = $GLOBALS['meta']['charset'];
-       $importer_charset = null;
-       if ($delim == ',') {
-               $extension = 'csv';
-       } else {
-               $extension = 'xls';
-               # Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut
-               $importer_charset = $charset = 'iso-8859-1';
-       }
-       $filename = "$filename.$extension";
-
-       $output = '';
-       if ($entetes and is_array($entetes) and count($entetes)) {
-               $output = exporter_csv_ligne($entetes, $delim, $importer_charset);
-       }
-
-       // on passe par un fichier temporaire qui permet de ne pas saturer la memoire
-       // avec les gros exports
-       $fichier = sous_repertoire(_DIR_CACHE, 'export') . $filename;
-       $fp = fopen($fichier, 'w');
-       $length = fwrite($fp, $output);
-
-       while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
-               $output = exporter_csv_ligne($row, $delim, $importer_charset);
-               $length += fwrite($fp, $output);
-       }
-       fclose($fp);
-       if ($envoyer) {
-               ob_start();
-               Header("Content-Type: text/comma-separated-values; charset=$charset");
-               Header("Content-Disposition: attachment; filename=$filename");
-               //non supporte
-               //Header("Content-Type: text/plain; charset=$charset");
-               Header("Content-Length: $length");
-               ob_clean();
-               flush();
-               readfile($fichier);
-       }
-
-       return $fichier;
-}
diff --git a/www/plugins/spip-bonux-3/inc/importer_csv.php b/www/plugins/spip-bonux-3/inc/importer_csv.php
deleted file mode 100644 (file)
index 2ca3e56..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-/**
- * Plugin Spip-Bonux
- * Le plugin qui lave plus SPIP que SPIP
- * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
- * Licence GPL
- *
- * Fonctions de lecture d'un fichier CSV pour transformation en array()
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/charsets');
-
-/**
- * Based on an example by ramdac at ramdac dot org
- * Returns a multi-dimensional array from a CSV file optionally using the
- * first row as a header to create the underlying data as associative arrays.
- * @param string $file Filepath including filename
- * @param bool $head Use first row as header.
- * @param string $delim Specify a delimiter other than a comma.
- * @param int $len Line length to be passed to fgetcsv
- * @return array or false on failure to retrieve any rows.
- */
-
-/**
- * Importer le charset d'une ligne
- *
- * Importe un texte de CSV dans un charset et le passe dans le charset du site (utf8 probablement)
- * Les CSV peuvent sous ms@@@ avoir le charset 'iso-8859-1', mais pasfois aussi 'windows-1252' :/
- *
- * @param mixed $texte
- * @param bool|string $definir_charset_source
- *     false : ne fait rien
- *     string : utilisera pour les prochains imports le charset indiqué
- *     true : remet le charset d'import par défaut de la fonction
- * @return array
- */
-function importer_csv_importcharset($texte, $definir_charset_source = false) {
-       // le plus frequent, en particulier avec les trucs de ms@@@
-       static $charset_source = 'iso-8859-1';
-       if ($definir_charset_source) {
-               if ($definir_charset_source === true) {
-                       $charset_source = 'iso-8859-1';
-               } else {
-                       $charset_source = $definir_charset_source;
-               }
-       }
-       // mais open-office sait faire mieux, donc mefiance !
-       if (is_utf8($texte)) {
-               $charset = 'utf-8';
-       } else {
-               $charset = $charset_source;
-       }
-       return importer_charset($texte, $charset);
-}
-
-/**
- * enlever les accents des cles presentes dans le head,
- * sinon ca pose des problemes ...
- *
- * @param string $key
- * @return string
- */
-function importer_csv_nettoie_key($key) {
-       return translitteration($key);
-       /*$accents=array('�','�','�','�','�',"�","�","'");
-       $accents_rep=array('e','e','e','a','u',"o","c","_");
-       return str_replace($accents,$accents_rep,$key);*/
-}
-
-/**
- * Lit un fichier csv et retourne un tableau
- * si $head est true, la premiere ligne est utilisee en header
- * pour generer un tableau associatif
- *
- * @param string $file
- * @param bool $head
- * @param string $delim
- * @param string $enclos
- * @param int $len
- * @param string $charset_source
- *     Permet de définir un charset source du CSV, si différent de utf-8 ou iso-8859-1
- * @return array
- */
-function inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '') {
-       $return = false;
-       if (@file_exists($file)
-               and $handle = fopen($file, 'r')) {
-               if ($charset_source) {
-                       importer_csv_importcharset('', $charset_source);
-               }
-               if ($head) {
-                       $header = fgetcsv($handle, $len, $delim, $enclos);
-                       if ($header) {
-                               $header = array_map('importer_csv_importcharset', $header);
-                               $header = array_map('importer_csv_nettoie_key', $header);
-                               $header_type = array();
-                               foreach ($header as $heading) {
-                                       if (!isset($header_type[$heading])) {
-                                               $header_type[$heading] = 'scalar';
-                                       } else {
-                                               $header_type[$heading] = 'array';
-                                       }
-                               }
-                       }
-               }
-               while (($data = fgetcsv($handle, $len, $delim, $enclos)) !== false) {
-                       $data = array_map('importer_csv_importcharset', $data);
-                       if ($head and isset($header)) {
-                               $row = array();
-                               foreach ($header as $key => $heading) {
-                                       if ($header_type[$heading] == 'array') {
-                                               if (!isset($row[$heading])) {
-                                                       $row[$heading] = array();
-                                               }
-                                               if (isset($data[$key]) and strlen($data[$key])) {
-                                                       $row[$heading][]= $data[$key];
-                                               }
-                                       } else {
-                                               $row[$heading]=(isset($data[$key])) ? $data[$key] : '';
-                                       }
-                               }
-                               $return[]=$row;
-                       } else {
-                               $return[]=$data;
-                       }
-               }
-               if ($charset_source) {
-                       importer_csv_importcharset('', true);
-               }
-       }
-       return $return;
-}
diff --git a/www/plugins/spip-bonux-3/javascript/jquery.qtip-1.0.0-rc3.js b/www/plugins/spip-bonux-3/javascript/jquery.qtip-1.0.0-rc3.js
deleted file mode 100644 (file)
index b71c021..0000000
+++ /dev/null
@@ -1,2040 +0,0 @@
-/*!
-* jquery.qtip. The jQuery tooltip plugin
-*
-* Copyright (c) 2009 Craig Thompson
-* http://craigsworks.com
-*
-* Licensed under MIT
-* http://www.opensource.org/licenses/mit-license.php
-*
-* Launch  : February 2009
-* Version : 1.0.0-rc3
-* Released: Tuesday 12th May, 2009 - 00:00
-* Debug: jquery.qtip.debug.js
-*/
-
-"use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
-/*jslint browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true */
-
-/*global window: false, jQuery: false */
-(function ($) {
-       // Assign cache and event initialisation on document load
-       $(document).ready(function () {
-               // Adjust positions of the tooltips on window resize or scroll if enabled
-               var i;
-               $(window).bind('resize scroll', function (event) {
-                       for (i = 0; i < $.fn.qtip.interfaces.length; i++) {
-                               // Access current elements API
-                               var api = $.fn.qtip.interfaces[i];
-
-                               // Update position if resize or scroll adjustments are enabled
-                               if(api && api.status && api.status.rendered && api.options.position.type !== 'static' && api.elements.tooltip.is(':visible') &&
-                               (api.options.position.adjust.scroll && event.type === 'scroll' || api.options.position.adjust.resize && event.type === 'resize')) {
-                                       // Queue the animation so positions are updated correctly
-                                       api.updatePosition(event, true);
-                               }
-                       }
-               });
-
-               // Hide unfocus toolipts on document mousedown
-               $(document).bind('mouseenter.qtip', function (event) {
-                       if($(event.target).parents('div.qtip').length === 0) {
-                               var tooltip = $('.qtipSelector'),
-                                       api = tooltip.qtip('api');
-
-                               // Only hide if its visible and not the tooltips target
-                               if(tooltip.is(':visible') && api && api.status && !api.status.disabled && $(event.target).add(api.elements.target).length > 1) { api.hide(event); }
-                       }
-               });
-       });
-
-       // Corner object parser
-       function Corner(corner) {
-               if(!corner){ return false; }
-
-               this.x = String(corner).replace(/middle/i, 'center').match(/left|right|center/i)[0].toLowerCase();
-               this.y = String(corner).replace(/middle/i, 'center').match(/top|bottom|center/i)[0].toLowerCase();
-               this.offset = { left: 0, top: 0 };
-               this.precedance = (corner.charAt(0).search(/^(t|b)/) > -1) ? 'y' : 'x';
-               this.string = function(){ return (this.precedance === 'y') ? this.y+this.x : this.x+this.y; };
-       }
-
-       // Tip coordinates calculator
-       function calculateTip(corner, width, height) {
-               // Define tip coordinates in terms of height and width values
-               var tips = {
-                       bottomright: [[0, 0], [width, height], [width, 0]],
-                       bottomleft: [[0, 0], [width, 0], [0, height]],
-                       topright: [[0, height], [width, 0], [width, height]],
-                       topleft: [[0, 0], [0, height], [width, height]],
-                       topcenter: [[0, height], [width / 2, 0], [width, height]],
-                       bottomcenter: [[0, 0], [width, 0], [width / 2, height]],
-                       rightcenter: [[0, 0], [width, height / 2], [0, height]],
-                       leftcenter: [[width, 0], [width, height], [0, height / 2]]
-               };
-               tips.lefttop = tips.bottomright;
-               tips.righttop = tips.bottomleft;
-               tips.leftbottom = tips.topright;
-               tips.rightbottom = tips.topleft;
-
-               return tips[corner];
-       }
-
-       // Border coordinates calculator
-       function calculateBorders(radius) {
-               var borders;
-
-               // Use canvas element if supported
-               if($('<canvas />').get(0).getContext) {
-                       borders = {
-                               topLeft: [radius, radius],
-                               topRight: [0, radius],
-                               bottomLeft: [radius, 0],
-                               bottomRight: [0, 0]
-                       };
-               }
-
-               // Canvas not supported - Use VML (IE)
-               else if($.browser.msie) {
-                       borders = {
-                               topLeft: [-90, 90, 0],
-                               topRight: [-90, 90, -radius],
-                               bottomLeft: [90, 270, 0],
-                               bottomRight: [90, 270, -radius]
-                       };
-               }
-
-               return borders;
-       }
-
-
-       // Build a jQuery style object from supplied style object
-       function jQueryStyle(style, sub) {
-               var styleObj, i;
-
-               styleObj = $.extend(true, {}, style);
-               for (i in styleObj) {
-                       if(sub === true && (/(tip|classes)/i).test(i)) { delete styleObj[i]; }
-                       else if(!sub && (/(width|border|tip|title|classes|user)/i).test(i)) { delete styleObj[i]; }
-               }
-
-               return styleObj;
-       }
-
-       // Sanitize styles
-       function sanitizeStyle(style) {
-               if(typeof style.tip !== 'object') {
-                       style.tip = { corner: style.tip };
-               }
-               if(typeof style.tip.size !== 'object') {
-                       style.tip.size = {
-                               width: style.tip.size,
-                               height: style.tip.size
-                       };
-               }
-               if(typeof style.border !== 'object') {
-                       style.border = {
-                               width: style.border
-                       };
-               }
-               if(typeof style.width !== 'object') {
-                       style.width = {
-                               value: style.width
-                       };
-               }
-               if(typeof style.width.max === 'string') { style.width.max = parseInt(style.width.max.replace(/([0-9]+)/i, "$1"), 10); }
-               if(typeof style.width.min === 'string') { style.width.min = parseInt(style.width.min.replace(/([0-9]+)/i, "$1"), 10); }
-
-               // Convert deprecated x and y tip values to width/height
-               if(typeof style.tip.size.x === 'number') {
-                       style.tip.size.width = style.tip.size.x;
-                       delete style.tip.size.x;
-               }
-               if(typeof style.tip.size.y === 'number') {
-                       style.tip.size.height = style.tip.size.y;
-                       delete style.tip.size.y;
-               }
-
-               return style;
-       }
-
-       // Build styles recursively with inheritance
-       function buildStyle() {
-               var self, i, styleArray, styleExtend, finalStyle, ieAdjust;
-               self = this;
-
-               // Build style options from supplied arguments
-               styleArray = [true, {}];
-               for(i = 0; i < arguments.length; i++){ styleArray.push(arguments[i]); }
-               styleExtend = [$.extend.apply($, styleArray)];
-
-               // Loop through each named style inheritance
-               while(typeof styleExtend[0].name === 'string') {
-                       // Sanitize style data and append to extend array
-                       styleExtend.unshift(sanitizeStyle($.fn.qtip.styles[styleExtend[0].name]));
-               }
-
-               // Make sure resulting tooltip className represents final style
-               styleExtend.unshift(true, {
-                       classes: {
-                               tooltip: 'qtip-' + (arguments[0].name || 'defaults')
-                       }
-               }, $.fn.qtip.styles.defaults);
-
-               // Extend into a single style object
-               finalStyle = $.extend.apply($, styleExtend);
-
-               // Adjust tip size if needed (IE 1px adjustment bug fix)
-               ieAdjust = ($.browser.msie) ? 1 : 0;
-               finalStyle.tip.size.width += ieAdjust;
-               finalStyle.tip.size.height += ieAdjust;
-
-               // Force even numbers for pixel precision
-               if(finalStyle.tip.size.width % 2 > 0) { finalStyle.tip.size.width += 1; }
-               if(finalStyle.tip.size.height % 2 > 0) { finalStyle.tip.size.height += 1; }
-
-               // Sanitize final styles tip corner value
-               if(finalStyle.tip.corner === true) {
-                       if(self.options.position.corner.tooltip === 'center' && self.options.position.corner.target === 'center') {
-                               finalStyle.tip.corner = false;
-                       }
-                       else {
-                               finalStyle.tip.corner = self.options.position.corner.tooltip;
-                       }
-               }
-
-               return finalStyle;
-       }
-
-       // Border canvas draw method
-       function drawBorder(canvas, coordinates, radius, color) {
-               // Create corner
-               var context = canvas.get(0).getContext('2d');
-               context.fillStyle = color;
-               context.beginPath();
-               context.arc(coordinates[0], coordinates[1], radius, 0, Math.PI * 2, false);
-               context.fill();
-       }
-
-       // Create borders using canvas and VML
-       function createBorder() {
-               var self, i, width, radius, color, coordinates, containers, size, betweenWidth, betweenCorners, borderTop, borderBottom, borderCoord, sideWidth, vertWidth;
-               self = this;
-
-               // Destroy previous border elements, if present
-               self.elements.wrapper.find('.qtip-borderBottom, .qtip-borderTop').remove();
-
-               // Setup local variables
-               width = self.options.style.border.width;
-               radius = self.options.style.border.radius;
-               color = self.options.style.border.color || self.options.style.tip.color;
-
-               // Calculate border coordinates
-               coordinates = calculateBorders(radius);
-
-               // Create containers for the border shapes
-               containers = {};
-               for (i in coordinates) {
-                       // Create shape container
-                       containers[i] = '<div rel="' + i + '" style="' + ((/Left/).test(i) ? 'left' : 'right') + ':0; ' + 'position:absolute; height:' + radius + 'px; width:' + radius + 'px; overflow:hidden; line-height:0.1px; font-size:1px">';
-
-                       // Canvas is supported
-                       if($('<canvas />').get(0).getContext) { containers[i] += '<canvas height="' + radius + '" width="' + radius + '" style="vertical-align: top"></canvas>'; }
-
-                       // No canvas, but if it's IE use VML
-                       else if($.browser.msie) {
-                               size = radius * 2 + 3;
-                               containers[i] += '<v:arc stroked="false" fillcolor="' + color + '" startangle="' + coordinates[i][0] + '" endangle="' + coordinates[i][1] + '" ' + 'style="width:' + size + 'px; height:' + size + 'px; margin-top:' + ((/bottom/).test(i) ? -2 : -1) + 'px; ' + 'margin-left:' + ((/Right/).test(i) ? coordinates[i][2] - 3.5 : -1) + 'px; ' + 'vertical-align:top; display:inline-block; behavior:url(#default#VML)"></v:arc>';
-
-                       }
-
-                       containers[i] += '</div>';
-               }
-
-               // Create between corners elements
-               betweenWidth = self.getDimensions().width - (Math.max(width, radius) * 2);
-               betweenCorners = '<div class="qtip-betweenCorners" style="height:' + radius + 'px; width:' + betweenWidth + 'px; ' + 'overflow:hidden; background-color:' + color + '; line-height:0.1px; font-size:1px;">';
-
-               // Create top border container
-               borderTop = '<div class="qtip-borderTop" dir="ltr" style="height:' + radius + 'px; ' + 'margin-left:' + radius + 'px; line-height:0.1px; font-size:1px; padding:0;">' + containers.topLeft + containers.topRight + betweenCorners;
-               self.elements.wrapper.prepend(borderTop);
-
-               // Create bottom border container
-               borderBottom = '<div class="qtip-borderBottom" dir="ltr" style="height:' + radius + 'px; ' + 'margin-left:' + radius + 'px; line-height:0.1px; font-size:1px; padding:0;">' + containers.bottomLeft + containers.bottomRight + betweenCorners;
-               self.elements.wrapper.append(borderBottom);
-
-               // Draw the borders if canvas were used (Delayed til after DOM creation)
-               if($('<canvas />').get(0).getContext) {
-                       self.elements.wrapper.find('canvas').each(function () {
-                               borderCoord = coordinates[$(this).parent('[rel]:first').attr('rel')];
-                               drawBorder.call(self, $(this), borderCoord, radius, color);
-                       });
-               }
-
-               // Create a phantom VML element (IE won't show the last created VML element otherwise)
-               else if($.browser.msie) { self.elements.tooltip.append('<v:image style="behavior:url(#default#VML);"></v:image>'); }
-
-               // Setup contentWrapper border
-               sideWidth = Math.max(radius, (radius + (width - radius)));
-               vertWidth = Math.max(width - radius, 0);
-               self.elements.contentWrapper.css({
-                       border: '0px solid ' + color,
-                       borderWidth: vertWidth + 'px ' + sideWidth + 'px'
-               });
-       }
-
-       // Canvas tip drawing method
-       function drawTip(canvas, coordinates, color) {
-               // Setup properties
-               var context = canvas.get(0).getContext('2d');
-               context.fillStyle = color;
-
-               // Create tip
-               context.beginPath();
-               context.moveTo(coordinates[0][0], coordinates[0][1]);
-               context.lineTo(coordinates[1][0], coordinates[1][1]);
-               context.lineTo(coordinates[2][0], coordinates[2][1]);
-               context.fill();
-       }
-
-       function positionTip(corner) {
-               var self, ieAdjust, positionAdjust, paddingCorner, paddingSize, newMargin;
-               self = this;
-
-               // Return if tips are disabled or tip is not yet rendered
-               if(self.options.style.tip.corner === false || !self.elements.tip) { return; }
-               if(!corner) { corner = new Corner(self.elements.tip.attr('rel')); }
-
-               // Setup adjustment variables
-               ieAdjust = positionAdjust = ($.browser.msie) ? 1 : 0;
-
-               // Set initial position
-               self.elements.tip.css(corner[corner.precedance], 0);
-
-               // Set position of tip to correct side
-               if(corner.precedance === 'y') {
-                       // Adjustments for IE6 - 0.5px border gap bug
-                       if($.browser.msie) {
-                               if(parseInt($.browser.version.charAt(0), 10) === 6) { positionAdjust = corner.y === 'top' ? -3 : 1; }
-                               else { positionAdjust = corner.y === 'top' ? 1 : 2; }
-                       }
-
-                       if(corner.x === 'center') {
-                               self.elements.tip.css({
-                                       left: '50%',
-                                       marginLeft: -(self.options.style.tip.size.width / 2)
-                               });
-                       }
-                       else if(corner.x === 'left') {
-                               self.elements.tip.css({
-                                       left: self.options.style.border.radius - ieAdjust
-                               });
-                       }
-                       else {
-                               self.elements.tip.css({
-                                       right: self.options.style.border.radius + ieAdjust
-                               });
-                       }
-
-                       if(corner.y === 'top') {
-                               self.elements.tip.css({
-                                       top: -positionAdjust
-                               });
-                       }
-                       else {
-                               self.elements.tip.css({
-                                       bottom: positionAdjust
-                               });
-                       }
-
-               }
-               else {
-                       // Adjustments for IE6 - 0.5px border gap bug
-                       if($.browser.msie) {
-                               positionAdjust = (parseInt($.browser.version.charAt(0), 10) === 6) ? 1 : (corner.x === 'left' ? 1 : 2);
-                       }
-
-                       if(corner.y === 'center') {
-                               self.elements.tip.css({
-                                       top: '50%',
-                                       marginTop: -(self.options.style.tip.size.height / 2)
-                               });
-                       }
-                       else if(corner.y === 'top') {
-                               self.elements.tip.css({
-                                       top: self.options.style.border.radius - ieAdjust
-                               });
-                       }
-                       else {
-                               self.elements.tip.css({
-                                       bottom: self.options.style.border.radius + ieAdjust
-                               });
-                       }
-
-                       if(corner.x === 'left') {
-                               self.elements.tip.css({
-                                       left: -positionAdjust
-                               });
-                       }
-                       else {
-                               self.elements.tip.css({
-                                       right: positionAdjust
-                               });
-                       }
-               }
-
-               // Adjust tooltip padding to compensate for tip
-               paddingCorner = 'padding-' + corner[corner.precedance];
-               paddingSize = self.options.style.tip.size[corner.precedance === 'x' ? 'width' : 'height'];
-               self.elements.tooltip.css('padding', 0).css(paddingCorner, paddingSize);
-
-               // Match content margin to prevent gap bug in IE6 ONLY
-               if($.browser.msie && parseInt($.browser.version.charAt(0), 6) === 6) {
-                       newMargin = parseInt(self.elements.tip.css('margin-top'), 10) || 0;
-                       newMargin += parseInt(self.elements.content.css('margin-top'), 10) || 0;
-
-                       self.elements.tip.css({ marginTop: newMargin });
-               }
-       }
-
-       // Create tip using canvas and VML
-       function createTip(corner) {
-               var self, color, coordinates, coordsize, path, tip;
-               self = this;
-
-               // Destroy previous tip, if there is one
-               if(self.elements.tip !== null) { self.elements.tip.remove(); }
-
-               // Setup color and corner values
-               color = self.options.style.tip.color || self.options.style.border.color;
-               if(self.options.style.tip.corner === false) { return; }
-               else if(!corner) { corner = new Corner(self.options.style.tip.corner); }
-
-               // Calculate tip coordinates
-               coordinates = calculateTip(corner.string(), self.options.style.tip.size.width, self.options.style.tip.size.height);
-
-               // Create tip element
-               self.elements.tip = '<div class="' + self.options.style.classes.tip + '" dir="ltr" rel="' + corner.string() + '" style="position:absolute; ' + 'height:' + self.options.style.tip.size.height + 'px; width:' + self.options.style.tip.size.width + 'px; ' + 'margin:0 auto; line-height:0.1px; font-size:1px;"></div>';
-
-               // Attach new tip to tooltip element
-               self.elements.tooltip.prepend(self.elements.tip);
-
-               // Use canvas element if supported
-               if($('<canvas />').get(0).getContext) { tip = '<canvas height="' + self.options.style.tip.size.height + '" width="' + self.options.style.tip.size.width + '"></canvas>'; }
-
-               // Canvas not supported - Use VML (IE)
-               else if($.browser.msie) {
-                       // Create coordize and tip path using tip coordinates
-                       coordsize = self.options.style.tip.size.width + ',' + self.options.style.tip.size.height;
-                       path = 'm' + coordinates[0][0] + ',' + coordinates[0][1];
-                       path += ' l' + coordinates[1][0] + ',' + coordinates[1][1];
-                       path += ' ' + coordinates[2][0] + ',' + coordinates[2][1];
-                       path += ' xe';
-
-                       // Create VML element
-                       tip = '<v:shape fillcolor="' + color + '" stroked="false" filled="true" path="' + path + '" coordsize="' + coordsize + '" ' + 'style="width:' + self.options.style.tip.size.width + 'px; height:' + self.options.style.tip.size.height + 'px; ' + 'line-height:0.1px; display:inline-block; behavior:url(#default#VML); ' + 'vertical-align:' + (corner.y === 'top' ? 'bottom' : 'top') + '"></v:shape>';
-
-                       // Create a phantom VML element (IE won't show the last created VML element otherwise)
-                       tip += '<v:image style="behavior:url(#default#VML);"></v:image>';
-
-                       // Prevent tooltip appearing above the content (IE z-index bug)
-                       self.elements.contentWrapper.css('position', 'relative');
-               }
-
-               // Create element reference and append vml/canvas
-               self.elements.tip = self.elements.tooltip.find('.' + self.options.style.classes.tip).eq(0);
-               self.elements.tip.html(tip);
-
-               // Draw the canvas tip (Delayed til after DOM creation)
-               if($('<canvas  />').get(0).getContext) { drawTip.call(self, self.elements.tip.find('canvas:first'), coordinates, color); }
-
-               // Fix IE small tip bug
-               if(corner.y === 'top' && $.browser.msie && parseInt($.browser.version.charAt(0), 10) === 6) {
-                       self.elements.tip.css({
-                               marginTop: -4
-                       });
-               }
-
-               // Set the tip position
-               positionTip.call(self, corner);
-       }
-
-       // Create title bar for content
-       function createTitle() {
-               var self = this;
-
-               // Destroy previous title element, if present
-               if(self.elements.title !== null) { self.elements.title.remove(); }
-
-               // Append new ARIA attribute to tooltip
-               self.elements.tooltip.attr('aria-labelledby', 'qtip-' + self.id + '-title');
-
-               // Create title element
-               self.elements.title = $('<div id="qtip-' + self.id + '-title" class="' + self.options.style.classes.title + '"></div>').css(jQueryStyle(self.options.style.title, true)).css({
-                       zoom: ($.browser.msie) ? 1 : 0
-               }).prependTo(self.elements.contentWrapper);
-
-               // Update title with contents if enabled
-               if(self.options.content.title.text) { self.updateTitle.call(self, self.options.content.title.text); }
-
-               // Create title close buttons if enabled
-               if(self.options.content.title.button !== false && typeof self.options.content.title.button === 'string') {
-                       self.elements.button = $('<a class="' + self.options.style.classes.button + '" role="button" style="float:right; position: relative"></a>').css(jQueryStyle(self.options.style.button, true)).html(self.options.content.title.button).prependTo(self.elements.title).click(function (event) {
-                               if(!self.status.disabled) { self.hide(event); }
-                       });
-               }
-       }
-
-       // Assign hide and show events
-       function assignEvents() {
-               var self, showTarget, hideTarget, inactiveEvents;
-               self = this;
-
-               // Setup event target variables
-               showTarget = self.options.show.when.target;
-               hideTarget = self.options.hide.when.target;
-
-               // Add tooltip as a hideTarget is its fixed
-               if(self.options.hide.fixed) { hideTarget = hideTarget.add(self.elements.tooltip); }
-
-               // Define events which reset the 'inactive' event handler
-               inactiveEvents = ['click', 'dblclick', 'mousedown', 'mouseup', 'mousemove',
-                                                       'mouseout', 'mouseenter', 'mouseleave', 'mouseover'];
-
-               // Define 'inactive' event timer method
-               function inactiveMethod(event) {
-                       if(self.status.disabled === true) { return; }
-
-                       //Clear and reset the timer
-                       clearTimeout(self.timers.inactive);
-                       self.timers.inactive = setTimeout(function () {
-                               // Unassign 'inactive' events
-                               $(inactiveEvents).each(function () {
-                                       hideTarget.unbind(this + '.qtip-inactive');
-                                       self.elements.content.unbind(this + '.qtip-inactive');
-                               });
-
-                               // Hide the tooltip
-                               self.hide(event);
-                       }, self.options.hide.delay);
-               }
-
-               // Check if the tooltip is 'fixed'
-               if(self.options.hide.fixed === true) {
-                       self.elements.tooltip.bind('mouseover.qtip', function () {
-                               if(self.status.disabled === true) { return; }
-
-                               // Reset the hide timer
-                               clearTimeout(self.timers.hide);
-                       });
-               }
-
-               // Define show event method
-               function showMethod(event) {
-                       if(self.status.disabled === true) { return; }
-
-                       // If set, hide tooltip when inactive for delay period
-                       if(self.options.hide.when.event === 'inactive') {
-                               // Assign each reset event
-                               $(inactiveEvents).each(function () {
-                                       hideTarget.bind(this + '.qtip-inactive', inactiveMethod);
-                                       self.elements.content.bind(this + '.qtip-inactive', inactiveMethod);
-                               });
-
-                               // Start the inactive timer
-                               inactiveMethod();
-                       }
-
-                       // Clear hide timers
-                       clearTimeout(self.timers.show);
-                       clearTimeout(self.timers.hide);
-
-                       // Start show timer
-                       if(self.options.show.delay > 0) {
-                               self.timers.show = setTimeout(function () {
-                                       self.show(event);
-                               }, self.options.show.delay);
-                       }
-                       else {
-                               self.show(event);
-                       }
-               }
-
-               // Define hide event method
-               function hideMethod(event) {
-                       if(self.status.disabled === true) { return; }
-
-                       // Prevent hiding if tooltip is fixed and event target is the tooltip
-                       if(self.options.hide.fixed === true && (/mouse(out|leave)/i).test(self.options.hide.when.event) && $(event.relatedTarget).parents('div.qtip[id^="qtip"]').length > 0) {
-                               // Prevent default and popagation
-                               event.stopPropagation();
-                               event.preventDefault();
-
-                               // Reset the hide timer
-                               clearTimeout(self.timers.hide);
-                               return false;
-                       }
-
-                       // Clear timers and stop animation queue
-                       clearTimeout(self.timers.show);
-                       clearTimeout(self.timers.hide);
-                       self.elements.tooltip.stop(true, true);
-
-                       // If tooltip has displayed, start hide timer
-                       self.timers.hide = setTimeout(function () {
-                               self.hide(event);
-                       }, self.options.hide.delay);
-               }
-
-               // If mouse is the target, update tooltip position on mousemove
-               if(self.options.position.target === 'mouse' && self.options.position.type !== 'static') {
-                       showTarget.bind('mousemove.qtip', function (event) {
-                               // Set the new mouse positions if adjustment is enabled
-                               self.cache.mouse = {
-                                       left: event.pageX,
-                                       top: event.pageY
-                               };
-
-                               // Update the tooltip position only if the tooltip is visible and adjustment is enabled
-                               if(self.status.disabled === false && self.options.position.adjust.mouse === true && self.options.position.type !== 'static' && self.elements.tooltip.css('display') !== 'none') {
-                                       self.updatePosition(event);
-                               }
-                       });
-               }
-
-               // Both events and targets are identical, apply events using a toggle
-               if((self.options.show.when.target.add(self.options.hide.when.target).length === 1 &&
-               self.options.show.when.event === self.options.hide.when.event && self.options.hide.when.event !== 'inactive') ||
-               self.options.hide.when.event === 'unfocus') {
-                       self.cache.toggle = 0;
-                       // Use a toggle to prevent hide/show conflicts
-                       showTarget.bind(self.options.show.when.event + '.qtip', function (event) {
-                               if(self.cache.toggle === 0) { showMethod(event); }
-                               else { hideMethod(event); }
-                       });
-               }
-
-               // Events are not identical, bind normally
-               else {
-                       showTarget.bind(self.options.show.when.event + '.qtip', showMethod);
-
-                       // If the hide event is not 'inactive', bind the hide method
-                       if(self.options.hide.when.event !== 'inactive') { hideTarget.bind(self.options.hide.when.event + '.qtip', hideMethod); }
-               }
-
-               // Focus the tooltip on mouseover
-               if((/(fixed|absolute)/).test(self.options.position.type)) { self.elements.tooltip.bind('mouseover.qtip', self.focus); }
-       }
-
-       // BGIFRAME JQUERY PLUGIN ADAPTION
-       //   Special thanks to Brandon Aaron for this plugin
-       //   http://plugins.jquery.com/project/bgiframe
-       function bgiframe() {
-               var self, html, dimensions;
-               self = this;
-               dimensions = self.getDimensions();
-
-               // Setup iframe HTML string
-               html = '<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:false" ' + 'style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=\'0\'); border: 1px solid red; ' + 'height:' + dimensions.height + 'px; width:' + dimensions.width + 'px" />';
-
-               // Append the new HTML and setup element reference
-               self.elements.bgiframe = self.elements.wrapper.prepend(html).children('.qtip-bgiframe:first');
-       }
-
-       // Define primary construct function
-       function construct() {
-               var self, content, url, data, method;
-               self = this;
-
-               // Call API method
-               self.beforeRender.call(self);
-
-               // Set rendered status to true
-               self.status.rendered = 2;
-
-               // Create initial tooltip elements
-               self.elements.tooltip = '<div qtip="' + self.id + '" id="qtip-' + self.id + '" role="tooltip" ' + 'aria-describedby="qtip-' + self.id + '-content" class="qtip ' + (self.options.style.classes.tooltip || self.options.style) + '" ' + 'style="display:none; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0; position:' + self.options.position.type + ';"> ' + '  <div class="qtip-wrapper" style="position:relative; overflow:hidden; text-align:left;"> ' + '    <div class="qtip-contentWrapper" style="overflow:hidden;"> ' + '       <div id="qtip-' + self.id + '-content" class="qtip-content ' + self.options.style.classes.content + '"></div> ' + '</div></div></div>';
-
-               // Append to container element
-               self.elements.tooltip = $(self.elements.tooltip);
-               self.elements.tooltip.appendTo(self.options.position.container);
-
-               // Setup tooltip qTip data
-               self.elements.tooltip.data('qtip', {
-                       current: 0,
-                       interfaces: [self]
-               });
-
-               // Setup element references
-               self.elements.wrapper = self.elements.tooltip.children('div:first');
-               self.elements.contentWrapper = self.elements.wrapper.children('div:first');
-               self.elements.content = self.elements.contentWrapper.children('div:first').css(jQueryStyle(self.options.style));
-
-               // Apply IE hasLayout fix to wrapper and content elements
-               if($.browser.msie) { self.elements.wrapper.add(self.elements.content).css({ zoom: 1 }); }
-
-               // Setup tooltip attributes
-               if(self.options.hide.when.event === 'unfocus') { self.elements.tooltip.attr('unfocus', true); }
-
-               // If an explicit width is set, updateWidth prior to setting content to prevent dirty rendering
-               if(typeof self.options.style.width.value === 'number') { self.updateWidth(); }
-
-               // Create borders and tips if supported by the browser
-               if($('<canvas />').get(0).getContext || $.browser.msie) {
-                       // Create border
-                       if(self.options.style.border.radius > 0) { createBorder.call(self); }
-                       else {
-                               self.elements.contentWrapper.css({
-                                       border: self.options.style.border.width + 'px solid ' + self.options.style.border.color
-                               });
-                       }
-
-                       // Create tip if enabled
-                       if(self.options.style.tip.corner !== false) { createTip.call(self); }
-               }
-
-               // Neither canvas or VML is supported, tips and borders cannot be drawn!
-               else {
-                       // Set defined border width
-                       self.elements.contentWrapper.css({
-                               border: self.options.style.border.width + 'px solid ' + self.options.style.border.color
-                       });
-
-                       // Reset border radius and tip
-                       self.options.style.border.radius = 0;
-                       self.options.style.tip.corner = false;
-               }
-
-               // Use the provided content string or DOM array
-               if((typeof self.options.content.text === 'string' && self.options.content.text.length > 0) || (self.options.content.text.jquery && self.options.content.text.length > 0)) { 
-                       content = self.options.content.text; 
-               }
-
-               // Check for valid title and alt attributes
-               else { content = ' '; }
-
-               // Set the tooltips content and create title if enabled
-               if(self.options.content.title.text !== false) { createTitle.call(self); }
-               self.updateContent(content, false);
-
-               // Assign events and toggle tooltip with focus
-               assignEvents.call(self);
-               if(self.options.show.ready === true) { self.show(); }
-
-               // Retrieve ajax content if provided
-               if(self.options.content.url !== false) {
-                       url = self.options.content.url;
-                       data = self.options.content.data;
-                       method = self.options.content.method || 'get';
-                       self.loadContent(url, data, method);
-               }
-
-               // Call API method and log event
-               self.status.rendered = true;
-               self.onRender.call(self);
-       }
-
-       // Instantiator
-       function QTip(target, options, id) {
-               // Declare this reference
-               var self = this;
-
-               // Setup class attributes
-               self.id = id;
-               self.options = options;
-               self.status = {
-                       animated: false,
-                       rendered: false,
-                       disabled: false,
-                       focused: false
-               };
-               self.elements = {
-                       target: target.addClass(self.options.style.classes.target),
-                       tooltip: null,
-                       wrapper: null,
-                       content: null,
-                       contentWrapper: null,
-                       title: null,
-                       button: null,
-                       tip: null,
-                       bgiframe: null
-               };
-               self.cache = {
-                       attr: false,
-                       mouse: {},
-                       toggle: 0,
-                       overflow: { left: false, top: false }
-               };
-               self.timers = {};
-
-               // Define exposed API methods
-               $.extend(self, self.options.api, {
-                       show: function (event) {
-                               var returned, solo;
-
-                               // Make sure tooltip is rendered and if not, return
-                               if(!self.status.rendered) { return false; }
-
-                               // Only continue if element is visible
-                               if(self.elements.tooltip.css('display') !== 'none') { return self; }
-
-                               // Clear animation queue
-                               self.elements.tooltip.stop(true, false);
-
-                               // Call API method and if return value is false, halt
-                               returned = self.beforeShow.call(self, event);
-                               if(returned === false) { return self; }
-
-                               // Define afterShow callback method
-                               function afterShow() {
-                                       // Set ARIA hidden status attribute
-                                       self.elements.tooltip.attr('aria-hidden', true);
-
-                                       // Call API method and focus if it isn't static
-                                       if(self.options.position.type !== 'static') { self.focus(); }
-                                       self.onShow.call(self, event);
-
-                                       // Prevent antialias from disappearing in IE7 by removing filter and opacity attribute
-                                       if($.browser.msie) { 
-                                               var ieStyle = self.elements.tooltip.get(0).style;
-                                               ieStyle.removeAttribute('filter');
-                                               ieStyle.removeAttribute('opacity');
-                                       }
-                                       else {
-                                               self.elements.tooltip.css({ opacity: '' });
-                                       }
-                               }
-
-                               // Maintain toggle functionality if enabled
-                               self.cache.toggle = 1;
-
-                               // Update tooltip position if it isn't static
-                               if(self.options.position.type !== 'static') {
-                                       self.updatePosition(event, (self.options.show.effect.length > 0 && self.rendered !== 2));
-                               }
-
-                               // Hide other tooltips if tooltip is solo
-                               if(typeof self.options.show.solo === 'object') {
-                                       solo = $(self.options.show.solo);
-                               }
-                               else if(self.options.show.solo === true) {
-                                       solo = $('div.qtip').not(self.elements.tooltip);
-                               }
-                               if(solo) {
-                                       solo.each(function () {
-                                               if($(this).qtip('api').status.rendered === true) { $(this).qtip('api').hide(); }
-                                       });
-                               }
-
-                               // Show tooltip
-                               if(typeof self.options.show.effect.type === 'function') {
-                                       self.options.show.effect.type.call(self.elements.tooltip, self.options.show.effect.length);
-                                       self.elements.tooltip.queue(function () {
-                                               afterShow();
-                                               $(this).dequeue();
-                                       });
-                               }
-                               else {
-                                       switch (self.options.show.effect.type.toLowerCase()) {
-                                               case 'fade':
-                                                       self.elements.tooltip.fadeIn(self.options.show.effect.length, afterShow);
-                                               break;
-
-                                               case 'slide':
-                                                       self.elements.tooltip.slideDown(self.options.show.effect.length, function () {
-                                                               afterShow();
-                                                               if(self.options.position.type !== 'static') { self.updatePosition(event, true); }
-                                                       });
-                                               break;
-
-                                               case 'grow':
-                                                       self.elements.tooltip.show(self.options.show.effect.length, afterShow);
-                                               break;
-
-                                               default:
-                                                       self.elements.tooltip.show(null, afterShow);
-                                               break;
-                                       }
-
-                                       // Add active class to tooltip
-                                       self.elements.tooltip.addClass(self.options.style.classes.active);
-                               }
-
-                               // Log event and return
-                               return self;
-                       },
-
-                       hide: function (event) {
-                               var returned;
-
-                               // Make sure tooltip is rendered and if not, return
-                               if(!self.status.rendered) { return false; }
-
-                               // Only continue if element is visible
-                               else if(self.elements.tooltip.css('display') === 'none') { return self; }
-
-                               // Stop show timer and animation queue
-                               clearTimeout(self.timers.show);
-                               self.elements.tooltip.stop(true, false);
-
-                               // Call API method and if return value is false, halt
-                               returned = self.beforeHide.call(self, event);
-                               if(returned === false) { return self; }
-
-                               // Define afterHide callback method
-                               function afterHide() {
-                                       // Set ARIA hidden status attribute
-                                       self.elements.tooltip.attr('aria-hidden', true);
-
-                                       // Remove opacity attribute
-                                       if($.browser.msie) { 
-                                               self.elements.tooltip.get(0).style.removeAttribute('opacity');
-                                       }
-                                       else {
-                                               self.elements.tooltip.css({ opacity: '' });
-                                       }
-
-                                       // Call API callback
-                                       self.onHide.call(self, event);
-                               }
-
-                               // Maintain toggle functionality if enabled
-                               self.cache.toggle = 0;
-
-                               // Hide tooltip
-                               if(typeof self.options.hide.effect.type === 'function') {
-                                       self.options.hide.effect.type.call(self.elements.tooltip, self.options.hide.effect.length);
-                                       self.elements.tooltip.queue(function () {
-                                               afterHide();
-                                               $(this).dequeue();
-                                       });
-                               }
-                               else {
-                                       switch (self.options.hide.effect.type.toLowerCase()) {
-                                               case 'fade':
-                                                       self.elements.tooltip.fadeOut(self.options.hide.effect.length, afterHide);
-                                               break;
-
-                                               case 'slide':
-                                                       self.elements.tooltip.slideUp(self.options.hide.effect.length, afterHide);
-                                               break;
-
-                                               case 'grow':
-                                                       self.elements.tooltip.hide(self.options.hide.effect.length, afterHide);
-                                               break;
-
-                                               default:
-                                                       self.elements.tooltip.hide(null, afterHide);
-                                               break;
-                                       }
-
-                                       // Remove active class to tooltip
-                                       self.elements.tooltip.removeClass(self.options.style.classes.active);
-                               }
-
-                               // Log event and return
-                               return self;
-                       },
-
-                       toggle: function (event, state) {
-                               var condition = /boolean|number/.test(typeof state) ? state : !self.elements.tooltip.is(':visible');
-
-                               self[condition ? 'show' : 'hide'](event);
-
-                               return self;
-                       },
-
-                       updatePosition: function (event, animate) {
-                               if(!self.status.rendered) {
-                                       return false;
-                               }
-
-                               var posOptions = options.position,
-                                       target = $(posOptions.target),
-                                       elemWidth = self.elements.tooltip.outerWidth(),
-                                       elemHeight = self.elements.tooltip.outerHeight(),
-                                       targetWidth, targetHeight, position,
-                                       my = posOptions.corner.tooltip,
-                                       at = posOptions.corner.target,
-                                       returned,
-                                       coords, i, mapName, imagePos,
-                                       adapt = {
-                                               left: function () {
-                                                       var leftEdge = $(window).scrollLeft(),
-                                                               rightEdge = $(window).width() + $(window).scrollLeft(),
-                                                               myOffset = my.x === 'center' ? elemWidth/2 : elemWidth,
-                                                               atOffset = my.x === 'center' ? targetWidth/2 : targetWidth,
-                                                               borderAdjust = (my.x === 'center' ? 1 : 2) * self.options.style.border.radius,
-                                                               offset = -2 * posOptions.adjust.x,
-                                                               pRight = position.left + elemWidth,
-                                                               adj;
-
-                                                       // Cut off by right side of window
-                                                       if(pRight > rightEdge) {
-                                                               adj = offset - myOffset - atOffset + borderAdjust;
-
-                                                               // Shifting to the left will make whole qTip visible, or will minimize how much is cut off
-                                                               if(position.left + adj > leftEdge || leftEdge - (position.left + adj) < pRight - rightEdge) {
-                                                                       return { adjust: adj, tip: 'right' };
-                                                               }
-                                                       }
-                                                       // Cut off by left side of window
-                                                       if(position.left < leftEdge) {
-                                                               adj = offset + myOffset + atOffset - borderAdjust;
-
-                                                               // Shifting to the right will make whole qTip visible, or will minimize how much is cut off
-                                                               if(pRight + adj < rightEdge || pRight + adj - rightEdge < leftEdge - position.left) {
-                                                                       return { adjust: adj, tip: 'left' };
-                                                               }
-                                                       }
-
-                                                       return { adjust: 0, tip: my.x };
-                                               },
-                                               top: function () {
-                                                       var topEdge = $(window).scrollTop(),
-                                                               bottomEdge = $(window).height() + $(window).scrollTop(),
-                                                               myOffset = my.y === 'center' ? elemHeight/2 : elemHeight,
-                                                               atOffset = my.y === 'center' ? targetHeight/2 : targetHeight,
-                                                               borderAdjust = (my.y === 'center' ? 1 : 2) * self.options.style.border.radius,
-                                                               offset = -2 * posOptions.adjust.y,
-                                                               pBottom = position.top + elemHeight,
-                                                               adj;
-
-                                                       // Cut off by bottom of window
-                                                       if(pBottom > bottomEdge) {
-                                                               adj = offset - myOffset - atOffset + borderAdjust;
-
-                                                               // Shifting to the top will make whole qTip visible, or will minimize how much is cut off
-                                                               if(position.top + adj > topEdge || topEdge - (position.top + adj) < pBottom - bottomEdge) {
-                                                                       return { adjust: adj, tip: 'bottom' };
-                                                               }
-                                                       }
-                                                       // Cut off by top of window
-                                                       if(position.top < topEdge) {
-                                                               adj = offset + myOffset + atOffset - borderAdjust;
-
-                                                               // Shifting to the top will make whole qTip visible, or will minimize how much is cut off
-                                                               if(pBottom + adj < bottomEdge || pBottom + adj - bottomEdge < topEdge - position.top) {
-                                                                       return { adjust: adj, tip: 'top' };
-                                                               }
-                                                       }
-
-                                                       return { adjust: 0, tip: my.y };
-                                               }
-                                       };
-
-                               if(event && options.position.target === 'mouse') {
-                                       // Force left top to allow flipping
-                                       at = { x: 'left', y: 'top' };
-                                       targetWidth = targetHeight = 0;
-                                       
-                                       // Use cached mouse coordiantes if not available
-                                       if(!event.pageX) {
-                                               position = self.cache.mouse;
-                                       }
-                                       else {
-                                               position = {
-                                                       top: event.pageY,
-                                                       left: event.pageX
-                                               };
-                                       }
-                               }
-                               else {
-                                       if(target[0] === document) {
-                                               targetWidth = target.width();
-                                               targetHeight = target.height();
-                                               position = { top: 0, left: 0 };
-                                       }
-                                       else if(target[0] === window) {
-                                               targetWidth = target.width();
-                                               targetHeight = target.height();
-                                               position = {
-                                                       top: target.scrollTop(),
-                                                       left: target.scrollLeft()
-                                               };
-                                       }
-                                       else if(target.is('area')) {
-                                               // Retrieve coordinates from coords attribute and parse into integers
-                                               coords = self.options.position.target.attr('coords').split(',');
-                                               for(i = 0; i < coords.length; i++) { coords[i] = parseInt(coords[i], 10); }
-
-                                               // Setup target position object
-                                               mapName = self.options.position.target.parent('map').attr('name');
-                                               imagePos = $('img[usemap="#' + mapName + '"]:first').offset();
-                                               position = {
-                                                       left: Math.floor(imagePos.left + coords[0]),
-                                                       top: Math.floor(imagePos.top + coords[1])
-                                               };
-
-                                               // Determine width and height of the area
-                                               switch (self.options.position.target.attr('shape').toLowerCase()) {
-                                                       case 'rect':
-                                                               targetWidth = Math.ceil(Math.abs(coords[2] - coords[0]));
-                                                               targetHeight = Math.ceil(Math.abs(coords[3] - coords[1]));
-                                                       break;
-
-                                                       case 'circle':
-                                                               targetWidth = coords[2] + 1;
-                                                               targetHeight = coords[2] + 1;
-                                                       break;
-
-                                                       case 'poly':
-                                                               targetWidth = coords[0];
-                                                               targetHeight = coords[1];
-
-                                                               for (i = 0; i < coords.length; i++) {
-                                                                       if(i % 2 === 0) {
-                                                                               if(coords[i] > targetWidth) { targetWidth = coords[i]; }
-                                                                               if(coords[i] < coords[0]) { position.left = Math.floor(imagePos.left + coords[i]); }
-                                                                       }
-                                                                       else {
-                                                                               if(coords[i] > targetHeight) { targetHeight = coords[i]; }
-                                                                               if(coords[i] < coords[1]) { position.top = Math.floor(imagePos.top + coords[i]); }
-                                                                       }
-                                                               }
-
-                                                               targetWidth = targetWidth - (position.left - imagePos.left);
-                                                               targetHeight = targetHeight - (position.top - imagePos.top);
-                                                       break;
-                                               }
-
-                                               // Adjust position by 2 pixels (Positioning bug?)
-                                               targetWidth -= 2;
-                                               targetHeight -= 2;
-                                       }
-                                       else {
-                                               targetWidth = target.outerWidth();
-                                               targetHeight = target.outerHeight();
-
-                                               if(!self.elements.tooltip.is(':visible')) {
-                                                       self.elements.tooltip.css({ left: '-10000000em' }).show();
-                                               }
-
-                                               // Account for tooltips offset parent if necessary
-                                               if(self.elements.tooltip.offsetParent()[0] === document.body) {
-                                                       position = target.offset();     
-                                               }
-                                               else {
-                                                       // Account for offset parent and it's scroll positions
-                                                       position = target.position();
-                                                       position.top += target.offsetParent().scrollTop();
-                                                       position.left += target.offsetParent().scrollLeft();
-                                               }
-                                       }
-
-                                       // Adjust position relative to target
-                                       position.left += at.x === 'right' ? targetWidth : at.x === 'center' ? targetWidth / 2 : 0;
-                                       position.top += at.y === 'bottom' ? targetHeight : at.y === 'center' ? targetHeight / 2 : 0;
-                               }
-
-                               // Adjust position relative to tooltip
-                               position.left += posOptions.adjust.x + (my.x === 'right' ? -elemWidth : my.x === 'center' ? -elemWidth / 2 : 0);
-                               position.top += posOptions.adjust.y + (my.y === 'bottom' ? -elemHeight : my.y === 'center' ? -elemHeight / 2 : 0);
-
-                               // Adjust for border radius
-                               if(self.options.style.border.radius > 0) {
-                                       if(my.x === 'left') { position.left -= self.options.style.border.radius; }
-                                       else if(my.x === 'right') { position.left += self.options.style.border.radius; }
-
-                                       if(my.y === 'top') { position.top -= self.options.style.border.radius; }
-                                       else if(my.y === 'bottom') { position.top += self.options.style.border.radius; }
-                               }
-
-                               // Adjust tooltip position if screen adjustment is enabled
-                               if(posOptions.adjust.screen) {
-                                       (function() {
-                                               var adjusted = { x: 0, y: 0 },
-                                                       adapted = { x: adapt.left(), y: adapt.top() },
-                                                       tip = new Corner(options.style.tip.corner);
-
-                                               if(self.elements.tip && tip) {
-                                                       // Adjust position according to adjustment that took place
-                                                       if(adapted.y.adjust !== 0) {
-                                                               position.top += adapted.y.adjust;
-                                                               tip.y = adjusted.y = adapted.y.tip;
-                                                       }
-                                                       if(adapted.x.adjust !== 0) {
-                                                               position.left += adapted.x.adjust;
-                                                               tip.x = adjusted.x = adapted.x.tip;
-                                                       }
-
-                                                       // Update overflow cache
-                                                       self.cache.overflow = {
-                                                               left: adjusted.x === false,
-                                                               top: adjusted.y === false
-                                                       };
-
-                                                       // Update and redraw the tip
-                                                       if(self.elements.tip.attr('rel') !== tip.string()) { createTip.call(self, tip); }
-                                               }
-                                       }());
-                               }
-
-                               // Initiate bgiframe plugin in IE6 if tooltip overlaps a select box or object element
-                               if(!self.elements.bgiframe && $.browser.msie && parseInt($.browser.version.charAt(0), 10) === 6) {
-                                       bgiframe.call(self);
-                               }
-
-                               // Call API method and if return value is false, halt
-                               returned = self.beforePositionUpdate.call(self, event);
-                               if(returned === false) { return self; }
-
-                               // Check if animation is enabled
-                               if(options.position.target !== 'mouse' && animate === true) {
-                                       // Set animated status
-                                       self.status.animated = true;
-
-                                       // Animate and reset animated status on animation end
-                                       self.elements.tooltip.stop().animate(position, 200, 'swing', function () {
-                                               self.status.animated = false;
-                                       });
-                               }
-
-                               // Set new position via CSS
-                               else { self.elements.tooltip.css(position); }
-
-                               // Call API method and log event if its not a mouse move
-                               self.onPositionUpdate.call(self, event);
-
-                               return self;
-                       },
-
-                       updateWidth: function (newWidth) {
-                               // Make sure tooltip is rendered and width is a number
-                               if(!self.status.rendered || (newWidth && typeof newWidth !== 'number')) { return false; }
-
-                               // Setup elements which must be hidden during width update
-                               var hidden = self.elements.contentWrapper.siblings().add(self.elements.tip).add(self.elements.button),
-                                       zoom = self.elements.wrapper.add(self.elements.contentWrapper.children()),
-                                       tooltip = self.elements.tooltip,
-                                       max = self.options.style.width.max,
-                                       min = self.options.style.width.min;
-
-                               // Calculate the new width if one is not supplied
-                               if(!newWidth) {
-                                       // Explicit width is set
-                                       if(typeof self.options.style.width.value === 'number') {
-                                               newWidth = self.options.style.width.value;
-                                       }
-
-                                       // No width is set, proceed with auto detection
-                                       else {
-                                               // Set width to auto initally to determine new width and hide other elements
-                                               self.elements.tooltip.css({ width: 'auto' });
-                                               hidden.hide();
-
-                                               // Set the new calculated width and if width has not numerical, grab new pixel width
-                                               tooltip.width(newWidth);
-
-                                               // Set position and zoom to defaults to prevent IE hasLayout bug
-                                               if($.browser.msie) {
-                                                       zoom.css({ zoom: '' });
-                                               }
-
-                                               // Set the new width
-                                               newWidth = self.getDimensions().width;
-
-                                               // Make sure its within the maximum and minimum width boundries
-                                               if(!self.options.style.width.value) {
-                                                       newWidth = Math.min(Math.max(newWidth, min), max);
-                                               }
-                                       }
-                               }
-
-                               // Adjust newWidth by 1px if width is odd (IE6 rounding bug fix)
-                               if(newWidth % 2) { newWidth += 1; }
-
-                               // Set the new calculated width and unhide other elements
-                               self.elements.tooltip.width(newWidth);
-                               hidden.show();
-
-                               // Set the border width, if enabled
-                               if(self.options.style.border.radius) {
-                                       self.elements.tooltip.find('.qtip-betweenCorners').each(function (i) {
-                                               $(this).width(newWidth - (self.options.style.border.radius * 2));
-                                       });
-                               }
-
-                               // IE only adjustments
-                               if($.browser.msie) {
-                                       // Reset position and zoom to give the wrapper layout (IE hasLayout bug)
-                                       zoom.css({ zoom: 1 });
-
-                                       // Set the new width
-                                       self.elements.wrapper.width(newWidth);
-
-                                       // Adjust BGIframe height and width if enabled
-                                       if(self.elements.bgiframe) { self.elements.bgiframe.width(newWidth).height(self.getDimensions.height); }
-                               }
-
-                               // Log event and return
-                               return self;
-                       },
-
-                       updateStyle: function (name) {
-                               var tip, borders, context, corner, coordinates;
-
-                               // Make sure tooltip is rendered and style is defined
-                               if(!self.status.rendered || typeof name !== 'string' || !$.fn.qtip.styles[name]) { return false; }
-
-                               // Set the new style object
-                               self.options.style = buildStyle.call(self, $.fn.qtip.styles[name], self.options.user.style);
-
-                               // Update initial styles of content and title elements
-                               self.elements.content.css(jQueryStyle(self.options.style));
-                               if(self.options.content.title.text !== false) { self.elements.title.css(jQueryStyle(self.options.style.title, true)); }
-
-                               // Update CSS border colour
-                               self.elements.contentWrapper.css({
-                                       borderColor: self.options.style.border.color
-                               });
-
-                               // Update tip color if enabled
-                               if(self.options.style.tip.corner !== false) {
-                                       if($('<canvas />').get(0).getContext) {
-                                               // Retrieve canvas context and clear
-                                               tip = self.elements.tooltip.find('.qtip-tip canvas:first');
-                                               context = tip.get(0).getContext('2d');
-                                               context.clearRect(0, 0, 300, 300);
-
-                                               // Draw new tip
-                                               corner = tip.parent('div[rel]:first').attr('rel');
-                                               coordinates = calculateTip(corner, self.options.style.tip.size.width, self.options.style.tip.size.height);
-                                               drawTip.call(self, tip, coordinates, self.options.style.tip.color || self.options.style.border.color);
-                                       }
-                                       else if($.browser.msie) {
-                                               // Set new fillcolor attribute
-                                               tip = self.elements.tooltip.find('.qtip-tip [nodeName="shape"]');
-                                               tip.attr('fillcolor', self.options.style.tip.color || self.options.style.border.color);
-                                       }
-                               }
-
-                               // Update border colors if enabled
-                               if(self.options.style.border.radius > 0) {
-                                       self.elements.tooltip.find('.qtip-betweenCorners').css({
-                                               backgroundColor: self.options.style.border.color
-                                       });
-
-                                       if($('<canvas />').get(0).getContext) {
-                                               borders = calculateBorders(self.options.style.border.radius);
-                                               self.elements.tooltip.find('.qtip-wrapper canvas').each(function () {
-                                                       // Retrieve canvas context and clear
-                                                       context = $(this).get(0).getContext('2d');
-                                                       context.clearRect(0, 0, 300, 300);
-
-                                                       // Draw new border
-                                                       corner = $(this).parent('div[rel]:first').attr('rel');
-                                                       drawBorder.call(self, $(this), borders[corner], self.options.style.border.radius, self.options.style.border.color);
-                                               });
-                                       }
-                                       else if($.browser.msie) {
-                                               // Set new fillcolor attribute on each border corner
-                                               self.elements.tooltip.find('.qtip-wrapper [nodeName="arc"]').each(function () {
-                                                       $(this).attr('fillcolor', self.options.style.border.color);
-                                               });
-                                       }
-                               }
-
-                               // Log event and return
-                               return self;
-                       },
-
-                       updateContent: function (content, reposition) {
-                               var parsedContent, images, loadedImages;
-
-                               function afterLoad() {
-                                       // Update the tooltip width
-                                       self.updateWidth();
-
-                                       // If repositioning is enabled, update positions
-                                       if(reposition !== false) {
-                                               // Update position if tooltip isn't static
-                                               if(self.options.position.type !== 'static') { self.updatePosition(self.elements.tooltip.is(':visible'), true); }
-
-                                               // Reposition the tip if enabled
-                                               if(self.options.style.tip.corner !== false) { positionTip.call(self); }
-                                       }
-                               }
-
-                               // Make sure content is defined if not, return
-                               if(!content) { return false; }
-
-                               // Call API method and set new content if a string is returned
-                               parsedContent = self.beforeContentUpdate.call(self, content);
-                               if(typeof parsedContent === 'string') { content = parsedContent; }
-                               else if(parsedContent === false) { return; }
-
-                               // Continue normally if rendered, but if not set options.content.text instead
-                               if(self.status.rendered) {
-                                       // Set position and zoom to defaults to prevent IE hasLayout bug
-                                       if($.browser.msie) {
-                                               self.elements.contentWrapper.children().css({
-                                                       zoom: 'normal'
-                                               });
-                                       }
-
-                                       // Append new content if its a DOM array and show it if hidden
-                                       if(content.jquery && content.length > 0) { content.clone(true).appendTo(self.elements.content).show(); }
-
-                                       // Content is a regular string, insert the new content
-                                       else { self.elements.content.html(content); }
-
-                                       // Check if images need to be loaded before position is updated to prevent mis-positioning
-                                       images = self.elements.content.find('img[complete=false]');
-                                       if(images.length > 0) {
-                                               loadedImages = 0;
-                                               images.each(function (i) {
-                                                       $('<img src="' + $(this).attr('src') + '" />').load(function () {
-                                                               if(++loadedImages === images.length) { afterLoad(); }
-                                                       });
-                                               });
-                                       }
-                                       else { afterLoad(); }
-                               }
-                               else {
-                                       self.options.content.text = content;
-                               }
-
-                               // Call API method and log event
-                               self.onContentUpdate.call(self);
-                               return self;
-                       },
-
-                       loadContent: function (url, data, method) {
-                               var returned;
-
-                               function setupContent(content) {
-                                       // Call API method and log event
-                                       self.onContentLoad.call(self);
-
-                                       // Update the content
-                                       self.updateContent(content);
-                               }
-
-                               // Make sure tooltip is rendered and if not, return
-                               if(!self.status.rendered) { return false; }
-
-                               // Call API method and if return value is false, halt
-                               returned = self.beforeContentLoad.call(self);
-                               if(returned === false) { return self; }
-
-                               // Load content using specified request type
-                               if(method === 'post') { $.post(url, data, setupContent); }
-                               else { $.get(url, data, setupContent); }
-
-                               return self;
-                       },
-
-                       updateTitle: function (content) {
-                               var returned;
-
-                               // Make sure tooltip is rendered and content is defined
-                               if(!self.status.rendered || !content) { return false; }
-
-                               // Call API method and if return value is false, halt
-                               returned = self.beforeTitleUpdate.call(self);
-                               if(returned === false) { return self; }
-
-                               // Set the new content and reappend the button if enabled
-                               if(self.elements.button) { self.elements.button = self.elements.button.clone(true); }
-                               self.elements.title.html(content);
-                               if(self.elements.button) { self.elements.title.prepend(self.elements.button); }
-
-                               // Call API method and log event
-                               self.onTitleUpdate.call(self);
-                               return self;
-                       },
-
-                       focus: function (event) {
-                               var curIndex, newIndex, elemIndex, returned;
-
-                               // Make sure tooltip is rendered and if not, return
-                               if(!self.status.rendered || self.options.position.type === 'static') { return false; }
-
-                               // Set z-index variables
-                               curIndex = parseInt(self.elements.tooltip.css('z-index'), 10);
-                               newIndex = 15000 + $('div.qtip[id^="qtip"]').length - 1;
-
-                               // Only update the z-index if it has changed and tooltip is not already focused
-                               if(!self.status.focused && curIndex !== newIndex) {
-                                       // Call API method and if return value is false, halt
-                                       returned = self.beforeFocus.call(self, event);
-                                       if(returned === false) { return self; }
-
-                                       // Loop through all other tooltips
-                                       $('div.qtip[id^="qtip"]').not(self.elements.tooltip).each(function () {
-                                               if($(this).qtip('api').status.rendered === true) {
-                                                       elemIndex = parseInt($(this).css('z-index'), 10);
-
-                                                       // Reduce all other tooltip z-index by 1
-                                                       if(typeof elemIndex === 'number' && elemIndex > -1) {
-                                                               $(this).css({ zIndex: parseInt($(this).css('z-index'), 10) - 1 });
-                                                       }
-
-                                                       // Set focused status to false
-                                                       $(this).qtip('api').status.focused = false;
-                                               }
-                                       });
-
-                                       // Set the new z-index and set focus status to true
-                                       self.elements.tooltip.css({ zIndex: newIndex });
-                                       self.status.focused = true;
-
-                                       // Call API method and log event
-                                       self.onFocus.call(self, event);
-                               }
-
-                               return self;
-                       },
-
-                       disable: function (state) {
-                               self.status.disabled = state ? true : false;
-                               return self;
-                       },
-
-                       destroy: function () {
-                               var i, returned, interfaces,
-                                       oldattr = self.elements.target.data('old'+self.cache.attr[0]);
-
-                               // Call API method and if return value is false, halt
-                               returned = self.beforeDestroy.call(self);
-                               if(returned === false) { return self; }
-
-                               // Check if tooltip is rendered
-                               if(self.status.rendered) {
-                                       // Remove event handlers and remove element
-                                       self.options.show.when.target.unbind('mousemove.qtip', self.updatePosition);
-                                       self.options.show.when.target.unbind('mouseout.qtip', self.hide);
-                                       self.options.show.when.target.unbind(self.options.show.when.event + '.qtip');
-                                       self.options.hide.when.target.unbind(self.options.hide.when.event + '.qtip');
-                                       self.elements.tooltip.unbind(self.options.hide.when.event + '.qtip');
-                                       self.elements.tooltip.unbind('mouseover.qtip', self.focus);
-                                       self.elements.tooltip.remove();
-                               }
-
-                               // Tooltip isn't yet rendered, remove render event
-                               else { self.options.show.when.target.unbind(self.options.show.when.event + '.qtip-' + self.id + '-create'); }
-
-                               // Check to make sure qTip data is present on target element
-                               if(typeof self.elements.target.data('qtip') === 'object') {
-                                       // Remove API references from interfaces object
-                                       interfaces = self.elements.target.data('qtip').interfaces;
-                                       if(typeof interfaces === 'object' && interfaces.length > 0) {
-                                               // Remove API from interfaces array
-                                               for(i = 0; i < interfaces.length - 1; i++) {
-                                                       if(interfaces[i].id === self.id) { interfaces.splice(i, 1); }
-                                               }
-                                       }
-                               }
-                               $.fn.qtip.interfaces.splice(self.id, 1);
-
-                               // Set qTip current id to previous tooltips API if available
-                               if(typeof interfaces === 'object' && interfaces.length > 0) { self.elements.target.data('qtip').current = interfaces.length - 1; }
-                               else { self.elements.target.removeData('qtip'); }
-
-                               // Reset old title attribute if removed
-                               if(oldattr) {
-                                       self.elements.target.attr(self.cache.attr[0], oldattr);
-                               }
-
-                               // Call API method and log destroy
-                               self.onDestroy.call(self);
-
-                               return self.elements.target;
-                       },
-
-                       getPosition: function () {
-                               var show, offset;
-
-                               // Make sure tooltip is rendered and if not, return
-                               if(!self.status.rendered) { return false; }
-
-                               show = (self.elements.tooltip.css('display') !== 'none') ? false : true;
-
-                               // Show and hide tooltip to make sure coordinates are returned
-                               if(show) { self.elements.tooltip.css({ visiblity: 'hidden' }).show(); }
-                               offset = self.elements.tooltip.offset();
-                               if(show) { self.elements.tooltip.css({ visiblity: 'visible' }).hide(); }
-
-                               return offset;
-                       },
-
-                       getDimensions: function () {
-                               var show, dimensions;
-
-                               // Make sure tooltip is rendered and if not, return
-                               if(!self.status.rendered) { return false; }
-
-                               show = (!self.elements.tooltip.is(':visible')) ? true : false;
-
-                               // Show and hide tooltip to make sure dimensions are returned
-                               if(show) { self.elements.tooltip.css({ visiblity: 'hidden' }).show(); }
-                               dimensions = {
-                                       height: self.elements.tooltip.outerHeight(),
-                                       width: self.elements.tooltip.outerWidth()
-                               };
-                               if(show) { self.elements.tooltip.css({ visiblity: 'visible' }).hide(); }
-
-                               return dimensions;
-                       }
-               });
-       }
-
-       // Implementation
-       $.fn.qtip = function (options, blanket) {
-               var i, id, interfaces, opts, obj, command, config, api;
-
-               // Return API / Interfaces if requested
-               if(typeof options === 'string') {
-                       if($(this).data('qtip')) {
-                               // Return requested object
-                               if(options === 'api') {
-                                       return $(this).data('qtip').interfaces[$(this).data('qtip').current];
-                               }
-                               else if(options === 'interfaces') {
-                                       return $(this).data('qtip').interfaces;
-                               }
-                       }
-                       else {
-                               return $(this);
-                       }
-               }
-
-               // Validate provided options
-               else {
-                       // Set null options object if no options are provided
-                       if(!options) { options = {}; }
-
-                       // Sanitize option data
-                       if(typeof options.content !== 'object' || (options.content.jquery && options.content.length > 0)) {
-                               options.content = { text: options.content };
-                       }
-                       if(typeof options.content.title !== 'object') {
-                               options.content.title = { text: options.content.title };
-                       }
-                       if(typeof options.position !== 'object') {
-                               options.position = { corner: options.position };
-                       }
-                       if(typeof options.position.corner !== 'object') {
-                               options.position.corner = {
-                                       target: options.position.corner,
-                                       tooltip: options.position.corner
-                               };
-                       }
-                       if(typeof options.show !== 'object') {
-                               options.show = { when: options.show };
-                       }
-                       if(typeof options.show.when !== 'object') {
-                               options.show.when = { event: options.show.when };
-                       }
-                       if(typeof options.show.effect !== 'object') {
-                               options.show.effect = { type: options.show.effect };
-                       }
-                       if(typeof options.hide !== 'object') {
-                               options.hide = { when: options.hide };
-                       }
-                       if(typeof options.hide.when !== 'object') {
-                               options.hide.when = { event: options.hide.when };
-                       }
-                       if(typeof options.hide.effect !== 'object') {
-                               options.hide.effect = { type: options.hide.effect };
-                       }
-                       if(typeof options.style !== 'object') {
-                               options.style = { name: options.style };
-                       }
-
-                       // Sanitize option styles
-                       options.style = sanitizeStyle(options.style);
-
-                       // Build main options object
-                       opts = $.extend(true, {}, $.fn.qtip.defaults, options);
-
-                       // Inherit all style properties into one syle object and include original options
-                       opts.style = buildStyle.call({
-                               options: opts
-                       }, opts.style);
-                       opts.user = $.extend(true, {}, options);
-               }
-
-               // Iterate each matched element
-               return $(this).each(function () // Return original elements as per jQuery guidelines
-               {
-                       var self = $(this), content = false;
-
-                       // Check for API commands
-                       if(typeof options === 'string') {
-                               command = options.toLowerCase();
-                               interfaces = $(this).qtip('interfaces');
-
-                               // Make sure API data exists
-                               if(typeof interfaces === 'object') {
-                                       // Check if API call is a BLANKET DESTROY command
-                                       if(blanket === true && command === 'destroy') {
-                                               for(i = interfaces.length - 1; i > -1; i--) {
-                                                       if('object' === typeof interfaces[i]) {
-                                                               interfaces[i].destroy();
-                                                       }
-                                               }
-                                       }
-
-                                       // API call is not a BLANKET DESTROY command
-                                       else {
-                                               // Check if supplied command effects this tooltip only (NOT BLANKET)
-                                               if(blanket !== true) { interfaces = [$(this).qtip('api')]; }
-
-                                               // Execute command on chosen qTips
-                                               for (i = 0; i < interfaces.length; i++) {
-                                                       // Destroy command doesn't require tooltip to be rendered
-                                                       if(command === 'destroy') { interfaces[i].destroy(); }
-
-                                                       // Only call API if tooltip is rendered and it wasn't a destroy call
-                                                       else if(interfaces[i].status.rendered === true) {
-                                                               if(command === 'show') { interfaces[i].show(); }
-                                                               else if(command === 'hide') { interfaces[i].hide(); }
-                                                               else if(command === 'focus') { interfaces[i].focus(); }
-                                                               else if(command === 'disable') { interfaces[i].disable(true); }
-                                                               else if(command === 'enable') { interfaces[i].disable(false); }
-                                                               else if(command === 'update') { interfaces[i].updatePosition(); }
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-
-                       // No API commands, continue with qTip creation
-                       else {
-                               // Create unique configuration object
-                               config = $.extend(true, {}, opts);
-                               config.hide.effect.length = opts.hide.effect.length;
-                               config.show.effect.length = opts.show.effect.length;
-
-                               // Sanitize target options
-                               if(config.position.container === false) { config.position.container = $(document.body); }
-                               if(config.position.target === false) { config.position.target = $(this); }
-                               if(config.show.when.target === false) { config.show.when.target = $(this); }
-                               if(config.hide.when.target === false) { config.hide.when.target = $(this); }
-
-                               // Parse corner options
-                               config.position.corner.tooltip = new Corner(config.position.corner.tooltip);
-                               config.position.corner.target = new Corner(config.position.corner.target);
-
-                               // If no content is provided, check title and alt attributes for fallback
-                               if(!config.content.text.length) {
-                                       $(['title', 'alt']).each(function(i, attr) {
-                                               var val = self.attr(attr);
-                                               if(val && val.length) {
-                                                       content = [attr, val];
-                                                       self.data('old'+attr, val).removeAttr(attr);
-                                                       config.content.text = val.replace(/\n/gi, '<br />');
-                                                       return false;
-                                               }
-                                       });
-                               }
-
-                               // Determine tooltip ID (Reuse array slots if possible)
-                               id = $.fn.qtip.interfaces.length;
-                               for (i = 0; i < id; i++) {
-                                       if(typeof $.fn.qtip.interfaces[i] === 'undefined') {
-                                               id = i;
-                                               break;
-                                       }
-                               }
-
-                               // Instantiate the tooltip
-                               obj = new QTip($(this), config, id);
-
-                               // Add API references and cache content if present
-                               $.fn.qtip.interfaces[id] = obj;
-                               obj.cache.attr = content;
-
-                               // Check if element already has qTip data assigned
-                               if(typeof $(this).data('qtip') === 'object' && $(this).data('qtip')) {
-                                       // Set new current interface id
-                                       if(typeof $(this).attr('qtip') === 'undefined') { $(this).data('qtip').current = $(this).data('qtip').interfaces.length; }
-
-                                       // Push new API interface onto interfaces array
-                                       $(this).data('qtip').interfaces.push(obj);
-                               }
-
-                               // No qTip data is present, create now
-                               else {
-                                       $(this).data('qtip', {
-                                               current: 0,
-                                               interfaces: [obj]
-                                       });
-                               }
-
-                               // If prerendering is disabled, create tooltip on showEvent
-                               if(config.content.prerender === false && config.show.when.event !== false && config.show.ready !== true) {
-                                       config.show.when.target.bind(config.show.when.event + '.qtip-' + id + '-create', { qtip: id }, function (event) {
-                                               // Retrieve API interface via passed qTip Id
-                                               api = $.fn.qtip.interfaces[event.data.qtip];
-
-                                               // Unbind show event and cache mouse coords
-                                               api.options.show.when.target.unbind(api.options.show.when.event + '.qtip-' + event.data.qtip + '-create');
-                                               api.cache.mouse = {
-                                                       left: event.pageX,
-                                                       top: event.pageY
-                                               };
-
-                                               // Render tooltip and start the event sequence
-                                               construct.call(api);
-                                               api.options.show.when.target.trigger(api.options.show.when.event);
-                                       });
-                               }
-
-                               // Prerendering is enabled, create tooltip now
-                               else {
-                                       // Set mouse position cache to top left of the element
-                                       obj.cache.mouse = {
-                                               left: config.show.when.target.offset().left,
-                                               top: config.show.when.target.offset().top
-                                       };
-
-                                       // Construct the tooltip
-                                       construct.call(obj);
-                               }
-                       }
-               });
-       };
-
-       // Define qTip API interfaces array
-       $.fn.qtip.interfaces = [];
-
-       /* Add intermediary method to the 'attr' class to allow other plugins to successfully 
-       retrieve the title of an element with a qTip applied */
-       $.fn.qtip.fn = { attr: $.fn.attr };
-       $.fn.attr = function(attr) {
-               var api = $(this).qtip('api');
-
-               return (arguments.length === 1 && (/title|alt/i).test(attr) && api.status && api.status.rendered === true)
-                       ? $(this).data('old' + api.cache.attr[0])
-                       : $.fn.qtip.fn.attr.apply(this, arguments);
-       };
-
-       // Define configuration defaults
-       $.fn.qtip.defaults = {
-               // Content
-               content: {
-                       prerender: false,
-                       text: false,
-                       url: false,
-                       data: null,
-                       title: {
-                               text: false,
-                               button: false
-                       }
-               },
-               // Position
-               position: {
-                       target: false,
-                       corner: {
-                               target: 'bottomRight',
-                               tooltip: 'topLeft'
-                       },
-                       adjust: {
-                               x: 0,
-                               y: 0,
-                               mouse: true,
-                               screen: false,
-                               scroll: true,
-                               resize: true
-                       },
-                       type: 'absolute',
-                       container: false
-               },
-               // Effects
-               show: {
-                       when: {
-                               target: false,
-                               event: 'mouseover'
-                       },
-                       effect: {
-                               type: 'fade',
-                               length: 100
-                       },
-                       delay: 140,
-                       solo: false,
-                       ready: false
-               },
-               hide: {
-                       when: {
-                               target: false,
-                               event: 'mouseout'
-                       },
-                       effect: {
-                               type: 'fade',
-                               length: 100
-                       },
-                       delay: 0,
-                       fixed: false
-               },
-               // Callbacks
-               api: {
-                       beforeRender: function () {},
-                       onRender: function () {},
-                       beforePositionUpdate: function () {},
-                       onPositionUpdate: function () {},
-                       beforeShow: function () {},
-                       onShow: function () {},
-                       beforeHide: function () {},
-                       onHide: function () {},
-                       beforeContentUpdate: function () {},
-                       onContentUpdate: function () {},
-                       beforeContentLoad: function () {},
-                       onContentLoad: function () {},
-                       beforeTitleUpdate: function () {},
-                       onTitleUpdate: function () {},
-                       beforeDestroy: function () {},
-                       onDestroy: function () {},
-                       beforeFocus: function () {},
-                       onFocus: function () {}
-               }
-       };
-
-       $.fn.qtip.styles = {
-               defaults: {
-                       background: 'white',
-                       color: '#111',
-                       overflow: 'hidden',
-                       textAlign: 'left',
-                       width: {
-                               min: 0,
-                               max: 250
-                       },
-                       padding: '5px 9px',
-                       border: {
-                               width: 1,
-                               radius: 0,
-                               color: '#d3d3d3'
-                       },
-                       tip: {
-                               corner: false,
-                               color: false,
-                               size: {
-                                       width: 13,
-                                       height: 13
-                               },
-                               opacity: 1
-                       },
-                       title: {
-                               background: '#e1e1e1',
-                               fontWeight: 'bold',
-                               padding: '7px 12px'
-                       },
-                       button: {
-                               cursor: 'pointer'
-                       },
-                       classes: {
-                               target: '',
-                               tip: 'qtip-tip',
-                               title: 'qtip-title',
-                               button: 'qtip-button',
-                               content: 'qtip-content',
-                               active: 'qtip-active'
-                       }
-               },
-               cream: {
-                       border: {
-                               width: 3,
-                               radius: 0,
-                               color: '#F9E98E'
-                       },
-                       title: {
-                               background: '#F0DE7D',
-                               color: '#A27D35'
-                       },
-                       background: '#FBF7AA',
-                       color: '#A27D35',
-
-                       classes: {
-                               tooltip: 'qtip-cream'
-                       }
-               },
-               light: {
-                       border: {
-                               width: 3,
-                               radius: 0,
-                               color: '#E2E2E2'
-                       },
-                       title: {
-                               background: '#f1f1f1',
-                               color: '#454545'
-                       },
-                       background: 'white',
-                       color: '#454545',
-
-                       classes: {
-                               tooltip: 'qtip-light'
-                       }
-               },
-               dark: {
-                       border: {
-                               width: 3,
-                               radius: 0,
-                               color: '#303030'
-                       },
-                       title: {
-                               background: '#404040',
-                               color: '#f3f3f3'
-                       },
-                       background: '#505050',
-                       color: '#f3f3f3',
-
-                       classes: {
-                               tooltip: 'qtip-dark'
-                       }
-               },
-               red: {
-                       border: {
-                               width: 3,
-                               radius: 0,
-                               color: '#CE6F6F'
-                       },
-                       title: {
-                               background: '#f28279',
-                               color: '#9C2F2F'
-                       },
-                       background: '#F79992',
-                       color: '#9C2F2F',
-
-                       classes: {
-                               tooltip: 'qtip-red'
-                       }
-               },
-               green: {
-                       border: {
-                               width: 3,
-                               radius: 0,
-                               color: '#A9DB66'
-                       },
-                       title: {
-                               background: '#b9db8c',
-                               color: '#58792E'
-                       },
-                       background: '#CDE6AC',
-                       color: '#58792E',
-
-                       classes: {
-                               tooltip: 'qtip-green'
-                       }
-               },
-               blue: {
-                       border: {
-                               width: 3,
-                               radius: 0,
-                               color: '#ADD9ED'
-                       },
-                       title: {
-                               background: '#D0E9F5',
-                               color: '#5E99BD'
-                       },
-                       background: '#E5F6FE',
-                       color: '#4D9FBF',
-
-                       classes: {
-                               tooltip: 'qtip-blue'
-                       }
-               }
-       };
-}(jQuery));
\ No newline at end of file
diff --git a/www/plugins/spip-bonux-3/javascript/jquery.qtip.activate.js b/www/plugins/spip-bonux-3/javascript/jquery.qtip.activate.js
deleted file mode 100644 (file)
index 3ab1c4e..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/* 
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-
-/*!
- * jquery.qtip. The jQuery tooltip plugin
- *
- * Copyright (c) 2009 Craig Thompson
- * http://craigsworks.com
- *
- * Licensed under MIT
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Launch  : February 2009
- * Version : 1.0.0-rc3
- * Released: Tuesday 12th May, 2009 - 00:00
- * Debug: jquery.qtip.debug.js
- */
-(function($)
-{
-       jQuery.fn.qtip_activate = function() {
-         return this.each(function() {
-                       var c=jQuery(this).attr('class');
-                       var ptarget = 'rightTop';
-                       var ptooltip = 'leftTop';
-                       var reg=new RegExp('target_[^\\s]+',"");
-                       var f=c.match(reg);
-                       if (f) { ptarget = f[0].substr(7);}
-                       reg=new RegExp('tooltip_[^\\s]+',"");
-                       f=c.match(reg);
-                       if (f) { ptooltip = f[0].substr(8);}
-
-                       var content = jQuery(this).siblings('.qTipContent');
-                       if (content.length)
-                               jQuery(this).qtip({
-                                       content: {
-                                               text: content
-                                       },
-                                       hide: {
-                                               fixed: true
-                                       },
-                                       style: {
-                                               tip: true,
-                                               name: 'light' // Inherit from preset style
-                                               /*width: { max:220}*/
-                                       },
-                                       position: {
-                                        corner: {target: ptarget, tooltip: ptooltip}
-                                       }
-                               });
-                       jQuery(this).addClass('qTipDone');
-               });
-       }
-
-       jQuery(function() {
-               jQuery('.qTip').qtip_activate();
-       });
-
-       // ... et a chaque fois que le DOM change
-       onAjaxLoad(function() {
-               if (jQuery){
-                       jQuery('.qTip',this).qtip_activate();
-               }
-       });
-
-})(jQuery);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux.xml b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux.xml
deleted file mode 100644 (file)
index 7b0fefd..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<traduction module="paquet-spip_bonux" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/spip-bonux-3/lang/" reference="fr">
-       <langue code="ar" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=ar" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=de" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-               <traducteur nom="Martin" lien="https://trad.spip.net/auteur/martin" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Gilles" lien="https://trad.spip.net/auteur/gilles" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=es" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fa" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=fa" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=nl" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=pt_br" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=ru" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=sk" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_ar.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_ar.php
deleted file mode 100644 (file)
index 4830d12..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'الملحق الذي يجعل SPIP أكثر بياضاً من SPIP، ويقدم هدايا ممتعة!
-جداول، عدادات، الخ.',
-       'spip_bonux_slogan' => 'الملحق الذي يجعل SPIP أكثر بياضاً من.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_de.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_de.php
deleted file mode 100644 (file)
index a9c35eb..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'Das Plug-in, das SPIPer wäscht als SPIP, mit tollen Extras!
-Tabellen, Zähler, usw.',
-       'spip_bonux_slogan' => 'Das Plug-in, das SPIPer wäscht als SPIP.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_en.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_en.php
deleted file mode 100644 (file)
index 33a7513..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'The plugin that make SPIP better than SPIP, with nice gifts inside !
-       arrays, counter, etc.',
-       'spip_bonux_slogan' => 'The plugin that make SPIP better than SPIP.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_es.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_es.php
deleted file mode 100644 (file)
index 8ff4054..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'El plugin que lava más SPIP que SPIP, ¡con bonitos regalos dentro!
-       Tableros, contador, etcétera.',
-       'spip_bonux_slogan' => 'El plugin que lava más SPIP que SPIP.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_fa.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_fa.php
deleted file mode 100644 (file)
index 9c20e8e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'پلاگيني كه اسپيپ را از اسپيپ بهتر مي‌سازد، با هداياي داخلي قشنگ، تابلو، شمارشگر و غيره. ',
-       'spip_bonux_slogan' => 'پلاگيني كه اسپيپ را از اسپيپ بهتر مي‌سازد '
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_fr.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_fr.php
deleted file mode 100644 (file)
index 46da5e5..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/spip-bonux-3/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'Le plugin qui lave plus SPIP que SPIP, avec des chouettes cadeaux dedans !
-       Tableaux, compteur, etc.',
-       'spip_bonux_slogan' => 'Le plugin qui lave plus SPIP que SPIP.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_nl.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_nl.php
deleted file mode 100644 (file)
index 9b46bad..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'De plugin die SPIP nog SPIPper maakt met leuke extraatjes!
-       Tabellen, teller, enz.',
-       'spip_bonux_slogan' => 'De plugin die SPIP nog SPIPper maakt.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_pt_br.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_pt_br.php
deleted file mode 100644 (file)
index 02635c8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'O plugin que lava mais SPIP que SPIP, com 
-Le plugin qui lave plus SPIP que SPIP, com brindes no pacote!
-       Tabela, contador etc.',
-       'spip_bonux_slogan' => 'O plugin que lava mais SPIP que SPIP.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_ru.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_ru.php
deleted file mode 100644 (file)
index 8b85e87..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'SPIP Bonux необходим для работы многих других плагинов. Он существенно расширяет возможности SPIP, делая его лучше чем SPIP :)))',
-       'spip_bonux_slogan' => 'SPIP Bonux существенно расширяет возможности SPIP, делая его лучше чем SPIP :)))'
-);
diff --git a/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_sk.php b/www/plugins/spip-bonux-3/lang/paquet-spip_bonux_sk.php
deleted file mode 100644 (file)
index 0f3b17a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-spip_bonux?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // S
-       'spip_bonux_description' => 'Zásuvný modul, ktorý prečistí SPIP ako SPIP s peknými darčekmi vnútri!
-       Tabuľky, počítadlo, a i.',
-       'spip_bonux_slogan' => 'Zásuvný modul, ktorý prečistí SPIP ako SPIP.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux.xml b/www/plugins/spip-bonux-3/lang/spip_bonux.xml
deleted file mode 100644 (file)
index d6dd5dc..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<traduction module="spip_bonux" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/spip-bonux-3/lang/" reference="fr">
-       <langue code="ar" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=ar" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=de" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Martin" lien="https://trad.spip.net/auteur/martin" />
-               <traducteur nom="Torsten Willmann" lien="https://trad.spip.net/auteur/torsten-willmann" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=en" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=es" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fa" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=fa" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=fr" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=nl" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=pt_br" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=ru" total="13" traduits="12" relire="0" modifs="1" nouveaux="0" pourcent="92.31">
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=sk" total="13" traduits="13" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_ar.php b/www/plugins/spip-bonux-3/lang/spip_bonux_ar.php
deleted file mode 100644 (file)
index 6664686..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=ar
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'عرض الروزنامة',
-       'annee_precedente' => 'السنة السابقة',
-       'annee_suivante' => 'السنة التالية',
-       'annuler_recherche' => 'إلغاء البحث',
-
-       // B
-       'bouton_fermer' => 'إغلاق',
-
-       // E
-       'erreur_date' => 'هذا التاريخ غير صحيح',
-       'erreur_date_corrigee' => 'تم تصحيح التاريخ',
-       'erreur_heure' => 'هذه الساعة غير صحيحة',
-       'erreur_heure_corrigee' => 'تم تصحيح الساعة',
-
-       // I
-       'id_rapide' => 'إضافة سريعة',
-
-       // M
-       'mois_precedent' => 'الشهر السابق',
-       'mois_suivant' => 'الشهر التالي',
-
-       // P
-       'pages' => 'الصفحات'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_de.php b/www/plugins/spip-bonux-3/lang/spip_bonux_de.php
deleted file mode 100644 (file)
index 2b06ac9..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Kalender anzeigen',
-       'annee_precedente' => 'Vorheriges Jahr',
-       'annee_suivante' => 'Folgendes Jahr',
-       'annuler_recherche' => 'Suche abbrechen',
-
-       // B
-       'bouton_fermer' => 'Schließen',
-
-       // E
-       'erreur_date' => 'Dieses Datum ist nicht korrekt',
-       'erreur_date_corrigee' => 'Das Datum wurde korrigiert',
-       'erreur_heure' => 'Diese Uhrzeit ist nicht korrekt',
-       'erreur_heure_corrigee' => 'Die Uhrzeit wurde korrigiert',
-
-       // I
-       'id_rapide' => 'Schnelleingabe',
-
-       // M
-       'mois_precedent' => 'Vorheriger Monat',
-       'mois_suivant' => 'Folgender Monat',
-
-       // P
-       'pages' => 'Seiten'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_en.php b/www/plugins/spip-bonux-3/lang/spip_bonux_en.php
deleted file mode 100644 (file)
index 6c43388..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Display the calendar',
-       'annee_precedente' => 'Previous year',
-       'annee_suivante' => 'Next year',
-       'annuler_recherche' => 'Cancel the search',
-
-       // B
-       'bouton_fermer' => 'Close',
-
-       // E
-       'erreur_date' => 'This date is incorrect',
-       'erreur_date_corrigee' => 'The date has been corrected',
-       'erreur_heure' => 'This hour is incorrect',
-       'erreur_heure_corrigee' => 'The hour has been corrected',
-
-       // I
-       'id_rapide' => 'Ajout rapide',
-
-       // M
-       'mois_precedent' => 'Previous month',
-       'mois_suivant' => 'Next month',
-
-       // P
-       'pages' => 'Pages'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_es.php b/www/plugins/spip-bonux-3/lang/spip_bonux_es.php
deleted file mode 100644 (file)
index 82b2141..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Mostrar el calendario',
-       'annee_precedente' => 'Año anterior',
-       'annee_suivante' => 'Año siguiente',
-       'annuler_recherche' => 'Cancelar la búsqueda',
-
-       // B
-       'bouton_fermer' => 'Cerrar',
-
-       // E
-       'erreur_date' => 'Esta fecha es incorrecta',
-       'erreur_date_corrigee' => 'La fecha ha sido corregida',
-       'erreur_heure' => 'Esta hora es incorrecta',
-       'erreur_heure_corrigee' => 'La hora ha sido corregida',
-
-       // I
-       'id_rapide' => 'Añadido rápido',
-
-       // M
-       'mois_precedent' => 'Mes anterior',
-       'mois_suivant' => 'Mes siguiente',
-
-       // P
-       'pages' => 'Páginas'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_fa.php b/www/plugins/spip-bonux-3/lang/spip_bonux_fa.php
deleted file mode 100644 (file)
index 5dd5baa..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'نمايش تقويم ',
-       'annee_precedente' => 'سال پيش ',
-       'annee_suivante' => 'سال بعد',
-       'annuler_recherche' => 'لغو جستجو',
-
-       // B
-       'bouton_fermer' => 'بستن',
-
-       // E
-       'erreur_date' => 'اين تاريخ غلط ست',
-       'erreur_date_corrigee' => 'تاريخ تصحيح شده است',
-       'erreur_heure' => 'اين ساعت غلط است',
-       'erreur_heure_corrigee' => 'ساعت تصحيح شده است',
-
-       // I
-       'id_rapide' => 'افزودن سريع ',
-
-       // M
-       'mois_precedent' => 'ماه پيش ',
-       'mois_suivant' => 'ماه بعد ',
-
-       // P
-       'pages' => 'صفحه‌ها'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_fr.php b/www/plugins/spip-bonux-3/lang/spip_bonux_fr.php
deleted file mode 100644 (file)
index fbeb300..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/spip-bonux-3/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Afficher le calendrier',
-       'annee_precedente' => 'Année précédente',
-       'annee_suivante' => 'Année suivante',
-       'annuler_recherche' => 'Annuler la recherche',
-
-       // B
-       'bouton_fermer' => 'Fermer',
-
-       // E
-       'erreur_date' => 'Cette date est incorrecte',
-       'erreur_date_corrigee' => 'La date a été corrigée',
-       'erreur_heure' => 'Cette heure est incorrecte',
-       'erreur_heure_corrigee' => 'L’heure a été corrigée',
-
-       // I
-       'id_rapide' => 'Ajout rapide',
-
-       // M
-       'mois_precedent' => 'Mois précédent',
-       'mois_suivant' => 'Mois suivant',
-
-       // P
-       'pages' => 'Pages'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_nl.php b/www/plugins/spip-bonux-3/lang/spip_bonux_nl.php
deleted file mode 100644 (file)
index b6767cb..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Toon de kalender',
-       'annee_precedente' => 'Vorig jaar',
-       'annee_suivante' => 'Volgend jaar',
-       'annuler_recherche' => 'Stop met zoeken',
-
-       // B
-       'bouton_fermer' => 'Sluiten',
-
-       // E
-       'erreur_date' => 'Deze datum is onjuist',
-       'erreur_date_corrigee' => 'De datum is aangepast',
-       'erreur_heure' => 'Dit tijdstip is onjuist',
-       'erreur_heure_corrigee' => 'De tijd is aangepast',
-
-       // I
-       'id_rapide' => 'Voeg snel toe',
-
-       // M
-       'mois_precedent' => 'Vorige maand',
-       'mois_suivant' => 'Volgende maand',
-
-       // P
-       'pages' => 'Blz.'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_pt_br.php b/www/plugins/spip-bonux-3/lang/spip_bonux_pt_br.php
deleted file mode 100644 (file)
index e0e8809..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Exibir o calendário',
-       'annee_precedente' => 'Ano anterior',
-       'annee_suivante' => 'Próximo ano',
-       'annuler_recherche' => 'Cancelar a busca',
-
-       // B
-       'bouton_fermer' => 'Fechar',
-
-       // E
-       'erreur_date' => 'Esta data está incorreta',
-       'erreur_date_corrigee' => 'A data foi corrigida',
-       'erreur_heure' => 'Esta hora está incorreta',
-       'erreur_heure_corrigee' => 'A hora foi corrigida',
-
-       // I
-       'id_rapide' => 'Inclusão rápida',
-
-       // M
-       'mois_precedent' => 'Mês anterior',
-       'mois_suivant' => 'Mês seguinte',
-
-       // P
-       'pages' => 'Päginas'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_ru.php b/www/plugins/spip-bonux-3/lang/spip_bonux_ru.php
deleted file mode 100644 (file)
index b51719c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Показать календарь',
-       'annee_precedente' => 'Предыдущий год', # MODIF
-       'annee_suivante' => 'Следующий год',
-       'annuler_recherche' => 'Отменить поиск',
-
-       // B
-       'bouton_fermer' => 'Закрыть',
-
-       // E
-       'erreur_date' => 'Неправильная дата',
-       'erreur_date_corrigee' => 'Дата была исправлена',
-       'erreur_heure' => 'Неправильный час',
-       'erreur_heure_corrigee' => 'Час был исправлен',
-
-       // I
-       'id_rapide' => 'Быстрое добавление',
-
-       // M
-       'mois_precedent' => 'Предыдущий месяц',
-       'mois_suivant' => 'Следующий месяц',
-
-       // P
-       'pages' => 'Страницы'
-);
diff --git a/www/plugins/spip-bonux-3/lang/spip_bonux_sk.php b/www/plugins/spip-bonux-3/lang/spip_bonux_sk.php
deleted file mode 100644 (file)
index 80f8303..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/spip_bonux?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // A
-       'afficher_calendrier' => 'Zobraziť kalendár',
-       'annee_precedente' => 'Predošlý rok',
-       'annee_suivante' => 'Nasledujúci rok',
-       'annuler_recherche' => 'Zrušiť vyhľadávanie',
-
-       // B
-       'bouton_fermer' => 'Zatvoriť',
-
-       // E
-       'erreur_date' => 'Tento dátum je nesprávny',
-       'erreur_date_corrigee' => 'Dátum bol opravený',
-       'erreur_heure' => 'Tento čas je nesprávny',
-       'erreur_heure_corrigee' => 'Čas bol opravený',
-
-       // I
-       'id_rapide' => 'Rýchle pridanie',
-
-       // M
-       'mois_precedent' => 'Minulý mesiac',
-       'mois_suivant' => 'Budúci mesiac',
-
-       // P
-       'pages' => 'Stránky'
-);
diff --git a/www/plugins/spip-bonux-3/lib/array_column/_array_column.php b/www/plugins/spip-bonux-3/lib/array_column/_array_column.php
deleted file mode 100755 (executable)
index 8174f1c..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * This file is part of the array_column library
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @copyright Copyright (c) Ben Ramsey (http://benramsey.com)
- * @license http://opensource.org/licenses/MIT MIT
- */
-
-if (!function_exists('_array_column')) {
-    /**
-     * Returns the values from a single column of the input array, identified by
-     * the $columnKey.
-     *
-     * Optionally, you may provide an $indexKey to index the values in the returned
-     * array by the values from the $indexKey column in the input array.
-     *
-     * @param array $input A multi-dimensional array (record set) from which to pull
-     *                     a column of values.
-     * @param mixed $columnKey The column of values to return. This value may be the
-     *                         integer key of the column you wish to retrieve, or it
-     *                         may be the string key name for an associative array.
-     * @param mixed $indexKey (Optional.) The column to use as the index/keys for
-     *                        the returned array. This value may be the integer key
-     *                        of the column, or it may be the string key name.
-     * @return array
-     */
-    function _array_column($input = null, $columnKey = null, $indexKey = null)
-    {
-        // Using func_get_args() in order to check for proper number of
-        // parameters and trigger errors exactly as the built-in array_column()
-        // does in PHP 5.5.
-        $argc = func_num_args();
-        $params = func_get_args();
-
-        if ($argc < 2) {
-            trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING);
-            return null;
-        }
-
-        if (!is_array($params[0])) {
-            trigger_error(
-                'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given',
-                E_USER_WARNING
-            );
-            return null;
-        }
-
-        if (!is_int($params[1])
-            && !is_float($params[1])
-            && !is_string($params[1])
-            && $params[1] !== null
-            && !(is_object($params[1]) && method_exists($params[1], '__toString'))
-        ) {
-            trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
-            return false;
-        }
-
-        if (isset($params[2])
-            && !is_int($params[2])
-            && !is_float($params[2])
-            && !is_string($params[2])
-            && !(is_object($params[2]) && method_exists($params[2], '__toString'))
-        ) {
-            trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
-            return false;
-        }
-
-        $paramsInput = $params[0];
-        $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null;
-
-        $paramsIndexKey = null;
-        if (isset($params[2])) {
-            if (is_float($params[2]) || is_int($params[2])) {
-                $paramsIndexKey = (int) $params[2];
-            } else {
-                $paramsIndexKey = (string) $params[2];
-            }
-        }
-
-        $resultArray = array();
-
-        foreach ($paramsInput as $row) {
-            $key = $value = null;
-            $keySet = $valueSet = false;
-
-            if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) {
-                $keySet = true;
-                $key = (string) $row[$paramsIndexKey];
-            }
-
-            if ($paramsColumnKey === null) {
-                $valueSet = true;
-                $value = $row;
-            } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) {
-                $valueSet = true;
-                $value = $row[$paramsColumnKey];
-            }
-
-            if ($valueSet) {
-                if ($keySet) {
-                    $resultArray[$key] = $value;
-                } else {
-                    $resultArray[] = $value;
-                }
-            }
-
-        }
-
-        return $resultArray;
-    }
-
-}
diff --git a/www/plugins/spip-bonux-3/modeles/pagination_noancre.html b/www/plugins/spip-bonux-3/modeles/pagination_noancre.html
deleted file mode 100644 (file)
index 113bf55..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#SET{bornes,#ENV{page_courante}|bornes_pagination{#ENV{nombre_pages},10}}
-#SET{premiere, #GET{bornes}|reset}
-#SET{derniere, #GET{bornes}|end}
-#SET{pages,#GET{premiere}|range{#GET{derniere}}}
-#SET{separateur,#ENV{separateur,'|'}}
-[(#SET{label,[(#ENV{label}|sinon{<span class='pagination_label'><:spip_bonux:pages:></span>})]})]
-<B_pages>
-[(#GET{label})]
-[<a href='[(#ENV{url}|parametre_url{#ENV{debut},''})]' class='lien_pagination' rel='nofollow'>(#GET{premiere}|>{1}|?{'...',''})</a> [<span class='sep separateur'>(#GET*{separateur})</span>]]
-<BOUCLE_pages(POUR){tableau #GET{pages}}>
-[(#SET{item, #VALEUR|moins{1}|mult{#ENV{pas}} })]
-[(#ENV{url}|parametre_url{#ENV{debut},#GET{item}}|lien_ou_expose{#VALEUR,#VALEUR|=={#ENV{page_courante}},lien_pagination,'',nofollow})]
-[<span class='sep separateur'>(#VALEUR|<{#GET{derniere}}|?{#GET{separateur}})</span>]
-</BOUCLE_pages>
-[[<span class='sep separateur'>(#GET*{separateur})</span>] <a href='[(#ENV{url}|parametre_url{#ENV{debut},#ENV{nombre_pages}|moins{1}|mult{#ENV{pas}}})]' class='lien_pagination' rel='nofollow'>(#GET{derniere}|<{#ENV{nombre_pages}}|?{'...',''})</a>]
-</B_pages>
\ No newline at end of file
diff --git a/www/plugins/spip-bonux-3/paquet.xml b/www/plugins/spip-bonux-3/paquet.xml
deleted file mode 100644 (file)
index 4e711ac..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<paquet
-       prefix="spip_bonux"
-       categorie="outil"
-       version="3.4.6"
-       etat="stable"
-       compatibilite="[3.0.0;3.2.*]"
-       logo="img_pack/spip-bonux.png"
-       documentation="https://contrib.spip.net/Bonux-pour-SPIP3"
->
-
-       <nom>SPIP Bonux</nom>
-       <!-- Le plugin qui lave plus SPIP que SPIP, avec des chouettes cadeaux dedans -->
-
-       <auteur>Cedric Morin</auteur>
-       <auteur>Matthieu Marcillaud</auteur>
-       <auteur>romy.tetue.net</auteur>
-
-       <copyright>2008-2017</copyright>
-
-       <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL</licence>
-       <pipeline nom="affichage_final" />
-</paquet>
diff --git a/www/plugins/spip-bonux-3/public/spip_bonux_balises.php b/www/plugins/spip-bonux-3/public/spip_bonux_balises.php
deleted file mode 100644 (file)
index 4c2ab18..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-/**
- * Plugin Spip-Bonux
- * Le plugin qui lave plus SPIP que SPIP
- * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
- * Licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Empile un element dans un tableau declare par #SET{tableau,#ARRAY}
- * #SET_PUSH{tableau,valeur}
- *
- * @param Champ $p : objet balise
- * @return Champ
- *     La balise ne retourne rien ("")
-**/
-function balise_SET_PUSH_dist($p) {
-       $_nom = interprete_argument_balise(1, $p);
-       $_valeur = interprete_argument_balise(2, $p);
-
-       if ($_nom and $_valeur) {
-               // si le tableau n'existe pas encore, on le cree
-               // on ajoute la valeur ensuite (sans passer par array_push)
-               $p->code = "vide((\$cle=$_nom)
-                       . vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
-                       . vide(\$Pile['vars'][\$cle][]=$_valeur))";
-       } else {
-               $p->code = "''";
-       }
-
-       $p->interdire_scripts = false; // la balise ne renvoie rien
-       return $p;
-}
-
-/**
- * Si 3 arguments : Cree un tableau nom_tableau de t1 + t2
- * #SET_MERGE{nom_tableau,t1,t2}
- * #SET_MERGE{nom_tableau,#GET{tableau},#ARRAY{cle,valeur}}
- *
- * Si 2 arguments : Merge t1 dans nom_tableau
- * #SET_MERGE{nom_tableau,t1}
- * #SET_MERGE{nom_tableau,#GET{tableau}}
- *
- * @param Champ $p : objet balise
- * @return Champ
- *     La balise ne retourne rien ("")
-**/
-function balise_SET_MERGE_dist($p) {
-       $_nom = interprete_argument_balise(1, $p);
-       $_t1 = interprete_argument_balise(2, $p);
-       $_t2 = interprete_argument_balise(3, $p);
-
-       if ($_nom and $_t1 and !$_t2) {
-               // 2 arguments : merge de $_nom et $_t1 dans $_nom
-               // si le tableau n'existe pas encore, on le cree
-               $p->code = "vide((\$cle=$_nom)
-                       . vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
-                       . vide(is_array(\$new=$_t1)?'':\$new=array(\$new))
-                       . vide(\$Pile['vars'][\$cle] = array_merge(\$Pile['vars'][\$cle],\$new)))";
-       } elseif ($_nom and $_t1 and $_t2) {
-               // 3 arguments : merge de $_t1 et $_t2 dans $_nom
-               // si le tableau n'existe pas encore, on le cree
-               $p->code = "vide((\$cle=$_nom)
-                       . vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
-                       . vide(is_array(\$new1=$_t1)?'':\$new1=array(\$new1))
-                       . vide(is_array(\$new2=$_t2)?'':\$new2=array(\$new2))
-                       . vide(\$Pile['vars'][\$cle] = array_merge(\$new1,\$new2)))";
-       } else {
-               $p->code = "''";
-       }
-
-       $p->interdire_scripts = false; // la balise ne renvoie rien
-       return $p;
-}
-
-/**
- * Balise #COMPTEUR associee au critere compteur
- *
- * @param Champ $p
- * @return Champ
- */
-function balise_COMPTEUR_dist($p) {
-       calculer_balise_criteres('compteur', $p);
-       if ($p->code == "''") {
-               calculer_balise_criteres('compteur', $p, 'compteur_left');
-       }
-       return $p;
-}
-
-/** Balise #SOMME associee au critere somme */
-function balise_SOMME_dist($p) {
-       return calculer_balise_criteres('somme', $p);
-}
-
-/** Balise #COMPTE associee au critere compte */
-function balise_COMPTE_dist($p) {
-       return calculer_balise_criteres('compte', $p);
-}
-
-/** Balise #MOYENNE associee au critere moyenne */
-function balise_MOYENNE_dist($p) {
-       return calculer_balise_criteres('moyenne', $p);
-}
-
-/** Balise #MINIMUM associee au critere moyenne */
-function balise_MINIMUM_dist($p) {
-       return calculer_balise_criteres('minimum', $p);
-}
-
-/** Balise #MAXIMUM associee au critere moyenne */
-function balise_MAXIMUM_dist($p) {
-       return calculer_balise_criteres('maximum', $p);
-}
-
-/** Balise #STATS associee au critere stats
- * #STATS{id_article,moyenne}
- */
-function balise_STATS_dist($p) {
-       if (isset($p->param[0][2][0])
-               and $nom = ($p->param[0][2][0]->texte)) {
-               return calculer_balise_criteres($nom, $p, 'stats');
-       }
-       return $p;
-}
-
-function calculer_balise_criteres($nom, $p, $motif = '') {
-       $p->code = "''";
-       $motif = $motif ? $motif : $nom;
-       if (isset($p->param[0][1][0])
-               and $champ = ($p->param[0][1][0]->texte)) {
-               return rindex_pile($p, $nom."_$champ", $motif);
-       }
-       return $p;
-}
diff --git a/www/plugins/spip-bonux-3/public/spip_bonux_criteres.php b/www/plugins/spip-bonux-3/public/spip_bonux_criteres.php
deleted file mode 100644 (file)
index 77fe7e3..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-/**
- * Plugin Spip-Bonux
- * Le plugin qui lave plus SPIP que SPIP
- * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
- * Licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Permet de faire un comptage par table liee
- *
- * @syntaxe `{compteur table[, champ]}`
- * @link https://contrib.spip.net/Classer-les-articles-par-nombre-de#forum409210
- *
- * @example
- *     Pour avoir les auteurs classes par articles et
- *     le nombre d'article de chacun :
- *
- *     ```
- *     <BOUCLE1(AUTEURS){compteur articles}{par compteur_articles}>
- *     #ID_AUTEUR : #COMPTEUR{articles}
- *     </BOUCLE1>
- *     ```
- *
- * @note
- *     Avec un seul argument {compteur autre_table} le groupby est fait
- *     implicitement sur la cle primaire de la boucle en cours.
- *     Avec un second argument {compteur autre_table,champ_fusion}
- *     le groupby est fait sur le champ_fusion"
- *
- * @param string $idb
- *     Identifiant de la boucle
- * @param Boucle[] $boucles
- *     AST du squelette
- * @param Critere $crit
- *     Paramètres du critère dans cette boucle
- * @param bool $left
- *     true pour utiliser un left join plutôt qu'un inner join.
- * @return void
- */
-function critere_compteur($idb, &$boucles, $crit, $left = false) {
-       $boucle = &$boucles[$idb];
-
-       if (isset($crit->param[1])) {
-               $_fusion = calculer_liste($crit->param[1], array(), $boucles, $boucle->id_parent);
-       } else {
-               $_fusion = "''";
-       }
-       $params = $crit->param;
-       $table = reset($params);
-       $table = $table[0]->texte;
-       $op = false;
-       if (preg_match(',^(\w+)([<>=])([0-9]+)$,', $table, $r)) {
-               $table=$r[1];
-               if (count($r)>=3) {
-                       $op=$r[2];
-               }
-               if (count($r)>=4) {
-                       $op_val=$r[3];
-               }
-       }
-       $type = objet_type($table);
-       $type_id = id_table_objet($type);
-
-       /**
-        * Si la clé primaire est une clé multiple, on prend la première partie
-        * Utile pour compter les versions de spip_versions par exemple
-        */
-       if (count($types = explode(',', $type_id)) > 1) {
-               $type_id = $types[0];
-       }
-       $table_sql = table_objet_sql($type);
-
-       $trouver_table = charger_fonction('trouver_table', 'base');
-       $arrivee = array($table, $trouver_table($table, $boucle->sql_serveur));
-       $depart = array($boucle->id_table,$trouver_table($boucle->id_table, $boucle->sql_serveur));
-
-       // noter les jointures deja installees
-       $joins = array_keys($boucle->from);
-       if ($compt = calculer_jointure($boucle, $depart, $arrivee)) {
-               if ($_fusion!="''") {
-                       // en cas de jointure, on ne veut pas du group_by sur la cle primaire !
-                       // cela casse le compteur !
-                       foreach ($boucle->group as $k => $group) {
-                               if ($group == $boucle->id_table.'.'.$boucle->primary) {
-                                       unset($boucle->group[$k]);
-                               }
-                       }
-                       $boucle->group[] = '".($gb='.$_fusion.')."';
-               }
-
-               $boucle->select[]= "COUNT($compt.$type_id) AS compteur_$table";
-               if ($op) {
-                       $boucle->having[]= array("'".$op."'", "'compteur_".$table."'",$op_val);
-               }
-               if ($left) {
-                       foreach ($boucle->from as $k => $val) {
-                               if (!in_array($k, $joins)) {
-                                       $boucle->from_type[$k] = 'left';
-                               }
-                       }
-               }
-       }
-}
-
-/**
- * {compteur_left xxx} permet de faire la meme chose que {compteur xxx}
- * mais avec un LEFT JOIN pour ne pas ignorer ceux qui ont un compteur nul
- * @param <type> $idb
- * @param <type> $boucles
- * @param <type> $crit
- */
-function critere_compteur_left($idb, &$boucles, $crit) {
-       critere_compteur($idb, $boucles, $crit, true);
-}
-
-/**  Critere {somme champ} #SOMME{champ} */
-function critere_somme($idb, &$boucles, $crit) {
-       calcul_critere_fonctions(array('SUM'=>'somme'), $idb, $boucles, $crit);
-}
-
-/**  Critere {compte champ} #COMPTE{champ} */
-function critere_compte($idb, &$boucles, $crit) {
-       calcul_critere_fonctions(array('COUNT'=>'compte'), $idb, $boucles, $crit);
-}
-
-/**  Critere {moyenne champ} #MOYENNE{champ} */
-function critere_moyenne($idb, &$boucles, $crit) {
-       calcul_critere_fonctions(array('AVG'=>'moyenne'), $idb, $boucles, $crit);
-}
-
-/**  Critere {minimum champ} #MINIMUM{champ} */
-function critere_minimum($idb, &$boucles, $crit) {
-       calcul_critere_fonctions(array('MIN'=>'minimum'), $idb, $boucles, $crit);
-}
-
-/**  Critere {maximum champ} #MAXIMUM{champ} */
-function critere_maximum($idb, &$boucles, $crit) {
-       calcul_critere_fonctions(array('MAX'=>'maximum'), $idb, $boucles, $crit);
-}
-
-/**  Critere {stats champ} calcul la totale : somme, compte, minimum, moyenne, maximum */
-function critere_stats($idb, &$boucles, $crit) {
-       calcul_critere_fonctions(array(
-               'SUM'=>'somme',
-               'COUNT'=>'compte',
-               'AVG'=>'moyenne',
-               'MIN'=>'minimum',
-               'MAX'=>'maximum',
-       ), $idb, $boucles, $crit);
-}
-
-/* $func : array(FUNC => balise) */
-function calcul_critere_fonctions($func, $idb, &$boucles, $crit) {
-       $boucle = &$boucles[$idb];
-
-       $params = $crit->param;
-       $champ = reset($params);
-       $champ = $champ[0]->texte;
-
-       // option DISTINCT {compte DISTINCT(id_article) }
-       $filter = '';
-       if (preg_match('/^([a-zA-Z]+)\(\s*([a-zA-Z_]+)\s*\)$/', trim($champ), $r)) {
-               $filter = $r[1]; // DISTINCT
-               $champ = $r[2]; // id_article
-       }
-
-       $sel = $filter ? "$filter($champ)" : $champ;
-       foreach ($func as $f => $as) {
-               $boucle->select[]= "$f($sel) AS $as" . "_$champ";
-       }
-}
-
-function critere_fusion_supprimer_dist($idb, &$boucles, $crit){
-       $boucles[$idb]->group = array();
-}
diff --git a/www/plugins/spip-bonux-3/spip_bonux_fonctions.php b/www/plugins/spip-bonux-3/spip_bonux_fonctions.php
deleted file mode 100644 (file)
index 6bebbd1..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-/**
- * Plugin Spip-Bonux
- * Le plugin qui lave plus SPIP que SPIP
- * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
- * Licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('public/spip_bonux_criteres');
-include_spip('public/spip_bonux_balises');
-
-/**
- * une fonction pour generer une balise img a partir d'un nom de fichier
- *
- * @param string $img
- * @param string $alt
- * @param string $class
- *
- * @return string
- */
-function tag_img($img, $alt = '', $class = '') {
-       $balise_img = chercher_filtre('balise_img');
-
-       return $balise_img($img, $alt, $class);
-}
-
-if (!defined('_PREVISU_TEMPORAIRE_VALIDITE')) {
-       define('_PREVISU_TEMPORAIRE_VALIDITE', 12);
-}
-
-function previsu_verifier_cle_temporaire($cle) {
-       $validite = _PREVISU_TEMPORAIRE_VALIDITE; // validite de 12h maxi par défaut
-       $old = 0;
-
-       do {
-               $date = date('Y-m-d H', strtotime("-$old hour"));
-               if ($cle == previsu_cle_temporaire($date)) {
-                       return true;
-               }
-       } while ($old++ < $validite);
-
-       return false;
-}
-
-function previsu_cle_temporaire($date = null) {
-       include_spip('inc/securiser_action');
-
-       if (!$date) {
-               $date = date('Y-m-d H');
-       }
-
-       $url = self();
-       $cle = md5($url . $date . secret_du_site());
-
-       return $cle;
-}
-
-if (!function_exists('push_table_valeur')) {
-       /**
-        * Filtre ajoutant une valeur à la fin d'une liste, possiblement dans une clé d'un tableau (comme table_valeur()).
-        *
-        * Attention, cette fonction est bien un "push", c'est-à-dire qu'elle ajoute un élément à la fin d'une liste.
-        *
-        * `#TABLEAU|push_table_valeur{a/b/c, valeur, #CONDITION}`
-        * - si la clé "c" est une liste : on ajoute "valeur" à la fin
-        * - si la clé "c" n'existe pas : on crée une liste et on met la première valeur dedans
-        * - si la clé "c" est un scalaire : on ne fait rien
-        * - si les clés autres que la dernière n'existent pas : on en fait des tableaux en cascade
-        *
-        * @see table_valeur
-        * @filtre
-        *
-        * @param array|object|string $table
-        *                         Table ou objet dont on veut modifier ou augmenter une des clés/propriétés. Peut être une chaîne à désérialiser contenant ce tableau ou cet objet.
-        * @param string $chemin
-        *                         Une suite de clés ou de propriétés d'objet, séparées par le caractère "/" : un/element/ici
-        * @param mixed $valeur
-        *                         Une valeur à ajouter au paramètre précédent.
-        * @param mixed $condition =true
-        *                         Une valeur quelconque qui sera testée de manière booléenne pour savoir si on fait le traitement ou pas.
-        *                         Cela allège l'écriture si l'ajout de valeur ne doit se faire que sous condition, notamment que s'il y a une valeur à ajouter.
-        * @param string $cle_finale
-        *                         Une clé dans laquelle placer la valeur si précisée
-        *
-        * @return array|object
-        *     Retourne le tableau ou l'objet initial, modifié suivant les paramètres.
-        */
-       function push_table_valeur($table, $chemin, $valeur, $condition = true, $cle_finale = false) {
-               // Si la condition est fausse, on ne fait rien du tout
-               if ($condition) {
-                       $table = is_string($table) ? @unserialize($table) : $table;
-                       $element_a_modifier =& $table;
-
-                       // S'il y a un emplacement donné, on cherche si c'est un tableau
-                       if ($chemin and is_string($chemin) and $chemin = explode('/', $chemin) and is_array($chemin)) {
-                               $i = 0;
-                               foreach ($chemin as $cle) {
-                                       $i += 1;
-                                       // On ne fait que s'il la clé vaut quelque chose
-                                       if ($cle !== '') {
-                                               // Si c'est un tableau, on vérifie si la clé existe
-                                               if (is_array($element_a_modifier)) {
-                                                       // Si la clé n'existe pas : on met un tableau vide qui se remplira
-                                                       if (!isset($element_a_modifier[$cle])) {
-                                                               $element_a_modifier[$cle] = array();
-                                                       }
-                                                       $element_a_modifier =& $element_a_modifier[$cle];
-                                               } elseif (is_object($element_a_modifier)) {
-                                                       // Si c'est un objet on vérifie si la propriété existe
-                                                       // Si la propriété n'existe pas : on met un tableau vide qui se remplira
-                                                       if (!isset($element_a_modifier->$cle)) {
-                                                               $element_a_modifier->$cle = array();
-                                                       }
-                                                       $element_a_modifier =& $element_a_modifier->$cle;
-                                               }
-                                       }
-                               }
-                       }
-
-                       // Maintenant on est au bon endroit de ce qu'on veut modifier :
-
-                       // Si l'élément à modifier est bien un tableau : on push la valeur dedans
-                       if (is_array($element_a_modifier)) {
-                               if ($cle_finale and is_string($cle_finale)) {
-                                       $element_a_modifier[$cle_finale] = $valeur;
-                               } else {
-                                       array_push($element_a_modifier, $valeur);
-                               }
-                       }
-                       // Sinon (si c'est un scalaire) on ne fait rien et il faudra utiliser set_table_valeur() par exemple
-               }
-
-               return $table;
-       }
-}
-
-/**
- * Cette fonction permet de transformer un texte clair en nom court pouvant servir d'identifiant, class, id, url...
- * en ne conservant que des caracteres alphanumeriques et un separateur
- *
- * @param string $texte
- *   Texte à transformer en nom machine
- * @param string $type
- *
- * @param array $options
- *   string separateur : par défaut, un underscore `_`.
- *   int longueur_maxi : par defaut 60
- *
- * @return string
- */
-function filtre_slugify_dist($texte, $type = '', $options = array()) {
-
-       $separateur = (isset($options['separateur'])?$options['separateur']:'_');
-       $longueur_maxi = (isset($options['longueur_maxi'])?$options['longueur_maxi']:60);
-
-       if (!function_exists('translitteration')) {
-               include_spip('inc/charsets');
-       }
-
-       // pas de balise html
-       if (strpos($texte, '<') !== false) {
-               $texte = strip_tags($texte);
-       }
-       if (strpos($texte, '&') !== false) {
-               $texte = unicode2charset($texte);
-       }
-       // On enlève les espaces indésirables
-       $texte = trim($texte);
-
-       // On enlève les accents et cie
-       $texte = translitteration($texte);
-
-       // On remplace tout ce qui n'est pas un mot par un separateur
-       $texte = preg_replace(',\W+,ms', $separateur, $texte);
-
-       // nettoyer les doubles occurences du separateur si besoin
-       while (strpos($texte, "$separateur$separateur") !== false) {
-               $texte = str_replace("$separateur$separateur", $separateur, $texte);
-       }
-
-       // pas de separateur au debut ni a la fin
-       $texte = trim($texte, $separateur);
-
-       // en minuscules
-       $texte = strtolower($texte);
-
-       switch ($type) {
-               case 'class':
-               case 'id':
-               case 'anchor':
-                       if (preg_match(',^\d,', $texte)) {
-                               $texte = substr($type, 0, 1).$texte;
-                       }
-       }
-
-       if (strlen($texte)>$longueur_maxi) {
-               $texte = substr($texte, 0, $longueur_maxi);
-       }
-
-       return $texte;
-}
-
-if (!function_exists('slugify')) {
-       function slugify($texte, $type = '', $options = array()) {
-               $slugify = chercher_filtre('slugify');
-               return $slugify($texte, $type, $options);
-       }
-}
diff --git a/www/plugins/spip-bonux-3/spip_bonux_options.php b/www/plugins/spip-bonux-3/spip_bonux_options.php
deleted file mode 100644 (file)
index 08f8ed6..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-<?php
-/**
- * Plugin Spip-Bonux
- * Le plugin qui lave plus SPIP que SPIP
- * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
- * Licence GPL
- *
- */
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// Proposer array_column
-if (!function_exists('array_column')) {
-       function array_column($input = null, $columnKey = null, $indexKey = null) {
-               if (!function_exists('_array_column')) {
-                       include_spip('lib/array_column/_array_column');
-               }
-               return _array_column($input, $columnKey, $indexKey);
-       }
-}
-
-
-if (!defined('_PREVISU_TEMPORAIRE_ACTIVE')) {
-       define('_PREVISU_TEMPORAIRE_ACTIVE', true);
-}
-
-if (_request('var_mode')=='preview'
-       and _PREVISU_TEMPORAIRE_ACTIVE
-       and $cle = _request('var_relecture')
-) {
-       include_spip('spip_bonux_fonctions');
-       if (previsu_verifier_cle_temporaire($cle)) {
-               include_spip('inc/autoriser');
-               autoriser_exception('previsualiser', '', 0);
-               define('_VAR_PREVIEW_EXCEPTION', true);
-       }
-}
-
-function spip_bonux_affichage_final($flux) {
-       if (_PREVISU_TEMPORAIRE_ACTIVE and defined('_VAR_PREVIEW') and _VAR_PREVIEW and !empty($GLOBALS['html'])) {
-               $p = stripos($flux, '</body>');
-               $url_relecture = parametre_url(self(), 'var_mode', 'preview', '&');
-               $js = '';
-               if (!defined('_VAR_PREVIEW_EXCEPTION')) {
-                       include_spip('plugins/installer');
-                       if (spip_version_compare($GLOBALS['spip_version_branche'], '3.2.0-beta3', '>=')) {
-                               include_spip('inc/securiser_action');
-                               $url_relecture = parametre_url($url_relecture, 'var_previewtoken', calculer_token_previsu(url_absolue($url_relecture)), '&');
-                       } else {
-                               $url_relecture = parametre_url($url_relecture, 'var_relecture', previsu_cle_temporaire(), '&');
-                       }
-                       $label = 'Relecture temporaire';
-               } else {
-                       $label = _T('previsualisation');
-                       $js = "jQuery('.spip-previsu').html('Relecture temporaire');";
-               }
-               $js .= "jQuery('#spip-admin').append('<a class=\"spip-admin-boutons review_link\" href=\"$url_relecture\">$label</a>');";
-               $js = "jQuery(function(){ $js });";
-               $js = "<script>$js</script>";
-               $flux = substr_replace($flux, $js, $p, 0);
-       }
-       return $flux;
-}
-
-
-/**
- * une fonction qui regarde si $texte est une chaine de langue
- * de la forme <:qqch:>
- * si oui applique _T()
- * si non applique typo() suivant le mode choisi
- *
- * @param unknown_type $valeur Une valeur à tester. Si c'est un tableau, la fonction s'appliquera récursivement dessus.
- * @param string $mode_typo Le mode d'application de la fonction typo(), avec trois valeurs possibles "toujours", "jamais" ou "multi".
- * @return unknown_type Retourne la valeur éventuellement modifiée.
- */
-if (!function_exists('_T_ou_typo')) {
-function _T_ou_typo($valeur, $mode_typo = 'toujours') {
-
-       // Si la valeur est bien une chaine (et pas non plus un entier déguisé)
-       if (is_string($valeur) and !intval($valeur)) {
-               // Si la chaine est du type <:truc:> on passe à _T()
-               if (preg_match('/^\<:(.*?):\>$/', $valeur, $match)) {
-                       $valeur = _T($match[1]);
-               } else {
-                       // Sinon on la passe a typo()
-                       if (!in_array($mode_typo, array('toujours', 'multi', 'jamais'))) {
-                               $mode_typo = 'toujours';
-                       }
-                       if ($mode_typo == 'toujours' or ($mode_typo == 'multi' and strpos($valeur, '<multi>') !== false)) {
-                               include_spip('inc/texte');
-                               $valeur = typo($valeur);
-                       }
-               }
-       } elseif (is_array($valeur)) {
-               // Si c'est un tableau, on reapplique la fonction récursivement
-               foreach ($valeur as $cle => $valeur2) {
-                       $valeur[$cle] = _T_ou_typo($valeur2, $mode_typo);
-               }
-       }
-       return $valeur;
-}
-}
-
-/**
- * Insère toutes les valeurs du tableau $arr2 après (ou avant) $cle dans le tableau $arr1.
- * Si $cle n'est pas trouvé, les valeurs de $arr2 seront ajoutés à la fin de $arr1.
- *
- * La fonction garde autant que possible les associations entre les clés. Elle fonctionnera donc aussi bien
- * avec des tableaux à index numérique que des tableaux associatifs.
- * Attention tout de même, elle utilise array_merge() donc les valeurs de clés étant en conflits seront écrasées.
- *
- * @param array $arr1 Tableau dans lequel se fera l'insertion
- * @param unknown_type $cle Clé de $arr1 après (ou avant) laquelle se fera l'insertion
- * @param array $arr2 Tableau contenant les valeurs à insérer
- * @param bool $avant Indique si l'insertion se fait avant la clé (par défaut c'est après)
- * @return array Retourne le tableau avec l'insertion
- */
-if (!function_exists('spip_array_insert')) {
-function spip_array_insert($arr1, $cle, $arr2, $avant = false) {
-       $index = array_search($cle, array_keys($arr1));
-       if ($index === false) {
-               $index = count($arr1); // insert @ end of array if $key not found
-       } else {
-               if (!$avant) {
-                       $index++;
-               }
-       }
-       $fin = array_splice($arr1, $index);
-       return array_merge($arr1, $arr2, $fin);
-}
-}
-
-/*
- * Une fonction extrêmement pratique, mais qui n'est disponible qu'à partir de PHP 5.3 !
- * cf. http://www.php.net/manual/fr/function.array-replace-recursive.php
- */
-if (!function_exists('array_replace_recursive')) {
-       function array_replace_recursive($array, $array1) {
-               function recurse($array, $array1) {
-                       foreach ($array1 as $key => $value) {
-                               // create new key in $array, if it is empty or not an array
-                               if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))) {
-                                       $array[$key] = array();
-                               }
-                               // overwrite the value in the base array
-                               if (is_array($value)) {
-                                       $value = recurse($array[$key], $value);
-                               }
-                               $array[$key] = $value;
-                       }
-                       return $array;
-               }
-
-               // handle the arguments, merge one by one
-               $args = func_get_args();
-               $array = $args[0];
-               if (!is_array($array)) {
-                       return $array;
-               }
-
-               for ($i = 1; $i < count($args); $i++) {
-                       if (is_array($args[$i])) {
-                               $array = recurse($array, $args[$i]);
-                       }
-               }
-               return $array;
-       }
-}
-
-if (!function_exists('text_truncate')) {
-/**
-* Truncates text.
-*
-* Cuts a string to the length of $length and replaces the last characters
-* with the ending if the text is longer than length.
-*
-* ### Options:
-*
-* - `ending` Will be used as Ending and appended to the trimmed string
-* - `exact` If false, $text will not be cut mid-word
-* - `html` If true, HTML tags would be handled correctly
-*
-* @param string  $text String to truncate.
-* @param integer $length Length of returned string, including ellipsis.
-* @param array $options An array of html attributes and options.
-* @return string Trimmed string.
-* @access public
-* @link http://book.cakephp.org/view/1469/Text#truncate-1625
-*/
-function text_truncate($text, $length = 100, $options = array()) {
-       $default = array(
-               'ending' => '...', 'exact' => true, 'html' => false
-       );
-       $options = array_merge($default, $options);
-       extract($options);
-
-       if ($html) {
-               if (mb_strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
-                       return $text;
-               }
-               $totalLength = mb_strlen(strip_tags($ending));
-               $openTags = array();
-               $truncate = '';
-
-               preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
-               foreach ($tags as $tag) {
-                       if (!preg_match('/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s', $tag[2])) {
-                               if (preg_match('/<[\w]+[^>]*>/s', $tag[0])) {
-                                       array_unshift($openTags, $tag[2]);
-                               } else if (preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag)) {
-                                       $pos = array_search($closeTag[1], $openTags);
-                                       if ($pos !== false) {
-                                               array_splice($openTags, $pos, 1);
-                                       }
-                               }
-                       }
-                       $truncate .= $tag[1];
-
-                       $contentLength = mb_strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $tag[3]));
-                       if ($contentLength + $totalLength > $length) {
-                               $left = $length - $totalLength;
-                               $entitiesLength = 0;
-                               if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $tag[3], $entities, PREG_OFFSET_CAPTURE)) {
-                                       foreach ($entities[0] as $entity) {
-                                               if ($entity[1] + 1 - $entitiesLength <= $left) {
-                                                       $left--;
-                                                       $entitiesLength += mb_strlen($entity[0]);
-                                               } else {
-                                                       break;
-                                               }
-                                       }
-                               }
-                               $truncate .= mb_substr($tag[3], 0, $left + $entitiesLength);
-                               break;
-                       } else {
-                               $truncate .= $tag[3];
-                               $totalLength += $contentLength;
-                       }
-                       if ($totalLength >= $length) {
-                               break;
-                       }
-               }
-       } else {
-               if (mb_strlen($text) <= $length) {
-                       return $text;
-               } else {
-                       $truncate = mb_substr($text, 0, $length - mb_strlen($ending));
-               }
-       }
-       if (!$exact) {
-               $spacepos = mb_strrpos($truncate, ' ');
-               if (isset($spacepos)) {
-                       if ($html) {
-                               $bits = mb_substr($truncate, $spacepos);
-                               preg_match_all('/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
-                               if (!empty($droppedTags)) {
-                                       foreach ($droppedTags as $closingTag) {
-                                               if (!in_array($closingTag[1], $openTags)) {
-                                                       array_unshift($openTags, $closingTag[1]);
-                                               }
-                                       }
-                               }
-                       }
-                       $truncate = mb_substr($truncate, 0, $spacepos);
-               }
-       }
-       $truncate .= $ending;
-
-       if ($html) {
-               foreach ($openTags as $tag) {
-                       $truncate .= '</'.$tag.'>';
-               }
-       }
-
-       return $truncate;
-}
-}
diff --git a/www/plugins/spip-bonux-3/svn.revision b/www/plugins/spip-bonux-3/svn.revision
deleted file mode 100644 (file)
index caf59bb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/spip-bonux-3
-Revision: 107681
-Dernier commit: 2017-11-21 05:36:01 +0100 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/spip-bonux-3</origine>
-<revision>107681</revision>
-<commit>2017-11-21 05:36:01 +0100 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/spip-bonux-3/tests/balises/set_merge.html b/www/plugins/spip-bonux-3/tests/balises/set_merge.html
deleted file mode 100644 (file)
index 86b149f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-[(#REM)
-
-       la balise SET_MERGE sert a merger des valeurs dans un tableau #SET
-       #SET_MERGE{tab,t1} : merge tab et t1 dans tab
-       #SET_MERGE{tab,t1,t2} : merge t1 et t2 dans tab
-]
-
-[(#REM) ----- 2 arguments ------ ]
-[(#REM) 
-       SET SET+GET|merge = SET MERGE
-]
-       #SET{Aa,#ARRAY{a,aaa}} #SET{Aaa,#ARRAY{a,aaa}}
-       #SET{Ab,#ARRAY{b,bbb}}
-       [(#SET{Ac,[(#GET{Aa}|array_merge{#GET{Ab}})]})]
-       #SET_MERGE{Aaa,#GET{Ab}}
-       [(#GET{Ac}|!=={#GET{Aaa}}|oui)[(#SET{err,"Aaa et Ac sont differents"})]]
-
-
-[(#REM) 
-       SET_MERGE peut etre fait sans declarer un SET prealable
-]
-       #SET{Ba,#ARRAY{a,aaa}}
-       #SET_MERGE{Bb,#GET{Ba}}
-       [(#GET{Ba}|!=={#GET{Bb}}|oui)[(#SET{err,"Ba et Bb sont différents"})]]
-
-[(#REM) 
-       Si une chaine est donnee a MERGE, elle est transformee en tableau
-]
-       #SET_MERGE{C,coucou}
-       [(#GET{C}|!=={#ARRAY{0,coucou}})[(#SET{err,"(C) String non compris par #SET_MERGE"})]]
-
-
-[(#REM) ----- 3 arguments ------ ]
-[(#REM) 
-       SET SET+GET|merge = SET MERGE
-]
-       #SET{Fa,#ARRAY{a,aaa}}
-       #SET{Fb,#ARRAY{b,bbb}}
-       [(#SET{Fc,[(#GET{Fa}|array_merge{#GET{Fb}})]})]
-       #SET_MERGE{Fd,#GET{Fa},#GET{Fb}}
-       [(#GET{Fc}|!=={#GET{Fd}}|oui)[(#SET{err,"Fc et Fd sont differents"})]]
-       
-       
-[(#REM) 
-       MERGE peut etre fait sans declarer un SET prealable
-]
-       #SET{Ga,#ARRAY{a,aaa}}
-       #SET{Gb,#ARRAY{b,bbb}}
-       [(#SET{Gc,[(#GET{Ga}|array_merge{#GET{Gb}})]})]
-       #SET_MERGE{Gd,#GET{Ga},#GET{Gb}}
-       [(#GET{Gc}|!=={#GET{Gd}}|oui)[(#SET{err,"Gc et Gd sont différents"})]]
-
-
-[(#REM) 
-       Si une chaine est donnee a MERGE, elle est transformee en tableau
-]
-       #SET_MERGE{H,coucou,toutou}
-       [(#GET{H}|!=={#ARRAY{0,coucou,1,toutou}})[(#SET{err,"(H) String non compris par #SET_MERGE"})]]
-
-[(#GET{err}|?{ERREUR,OK}) #GET{err} ]
diff --git a/www/plugins/spip-bonux-3/tests/balises/set_push.html b/www/plugins/spip-bonux-3/tests/balises/set_push.html
deleted file mode 100644 (file)
index 74bc38e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-[(#REM)
-
-       la balise SET_PUSH sert a ajouter des valeurs dans un tableau #SET
-
-]
-
-[(#REM) 
-       SET GET|push = SET PUSH 
-]
-       #SET{A,#ARRAY}
-       #SET{B,#ARRAY}
-       [(#SET{A,[(#GET{A}|push{abc})]})]
-       #SET_PUSH{B,abc}
-       [(#GET{A}|!=={#GET{B}}|oui)[(#SET{err,"A et B sont différents"})]]
-
-
-[(#REM) 
-       SET_PUSH peut être fait sans declarer un SET prealable
-]
-       #SET_PUSH{C,abc}
-       [(#GET{A}|!=={#GET{C}}|oui)[(#SET{err,"A et C sont différents"})]]
-
-
-
-[(#GET{err}|?{ERREUR,OK}) #GET{err} ]
diff --git a/www/plugins/verifier b/www/plugins/verifier
new file mode 160000 (submodule)
index 0000000..32b8a1d
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 32b8a1d53dc97fd3444860dcff4b2cdf243b45c0
diff --git a/www/plugins/verifier/aide/verifier.html b/www/plugins/verifier/aide/verifier.html
deleted file mode 100644 (file)
index 36b9adb..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-#SET{infos,#VAL|verifier_generer_aide}
-#SET{verifications,#GET{infos}|table_valeur{verifications}}
-#SET{options,#GET{infos}|table_valeur{options}}
-
-[(#ENV{format}|=={brut}|oui)<textarea style="width:100%; height:100%;">]
-
-Sauter à : <a href="#liste_verifications">Toutes les vérifications</a>, <a href="#liste_options_verifications">Toutes les options</a>
-
-<h2 class="h2 spip">Utilisation des options</h2>
-<B_options_tableau>
-<div style="overflow:auto;">
-<table class="spip">
-<thead>
-       <tr class="first_row">
-               <th>Options \ Vérifications</th>
-               <BOUCLE_verifications_tableau_th(POUR){tableau #GET{verifications}}>
-               <th><a href="#verification_#CLE">#CLE</a></th>
-               </BOUCLE_verifications_tableau_th>
-       </tr>
-</thead>
-<tbody>
-       <BOUCLE_options_tableau(POUR){tableau #GET{options}}>
-       <tr class="tr_liste [(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
-               <th><a href="#option_#CLE">#CLE</a></th>
-               <BOUCLE_verifications_tableau(POUR){tableau #GET{verifications}}>
-               <td>[(#CLE|in_array{[(#_options_tableau:VALEUR|table_valeur{utilisee_par})]}|?{'X','-'})]</td>
-               </BOUCLE_verifications_tableau>
-       </tr>
-       </BOUCLE_options_tableau>
-</tbody>
-</table>
-</div>
-</B_options_tableau>
-
-<h2 class="h2 spip" id="liste_verifications">Toutes les vérifications</h2>
-<BOUCLE_verifications(POUR){tableau #GET{verifications}}>
-<h3 class="h3 spip" id="verification_#CLE">[(#VALEUR|table_valeur{titre})] (#CLE)</h3>
-<p class="description">
-       <strong>Description :</strong> [(#VALEUR|table_valeur{description})]
-</p>
-<p class="options">
-       <strong>Options :</strong>
-       <BOUCLE_options_verification(POUR){tableau #VALEUR|table_valeur{options}}{", "}><a href="#option_#CLE">#CLE</a></BOUCLE_options_verification>
-</p>
-</BOUCLE_verifications>
-
-<h2 class="h2 spip" id="liste_options_verifications">Toutes les options</h2>
-<BOUCLE_options(POUR){tableau #GET{options}}>
-[(#SET{label, [(#VALEUR|table_valeur{label}|sinon{[(#VALEUR|table_valeur{label_case})]})]})]
-<h3 class="h3 spip" id="option_#CLE">[(#GET{label}|?{#GET{label} [ ((#CLE))], #CLE})]</h3>
-[<p class="description">
-       <strong>Description :</strong> (#VALEUR|table_valeur{explication}|sinon{[(#VALEUR|table_valeur{label}|?{[(#VALEUR|table_valeur{label_case})]})]})
-</p>]
-<B_utilisee_par>
-<p class="utilisee_par">
-       <strong>Utilisée par :</strong>
-       <BOUCLE_utilisee_par(POUR){tableau #VALEUR|table_valeur{utilisee_par}}{", "}><a href="#verification_#VALEUR">#VALEUR</a></BOUCLE_utilisee_par>
-</p>
-</B_utilisee_par>
-<B_choix>
-<p class="choix_possibles">
-       <strong>Choix possibles :</strong>
-       <ul class="spip">
-               <BOUCLE_choix(POUR){tableau #VALEUR|table_valeur{datas}}>
-               <li>"#CLE" : #VALEUR</li>
-               </BOUCLE_choix>
-       </ul>
-</p>
-</B_choix>
-</BOUCLE_options>
-
-[(#ENV{format}|=={brut}|oui)</textarea>]
diff --git a/www/plugins/verifier/aide/verifier_fonctions.php b/www/plugins/verifier/aide/verifier_fonctions.php
deleted file mode 100644 (file)
index 26dc98e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-include_spip('inc/verifier');
-include_spip('inc/saisies');
-
-/*
- * Génère une page d'aide listant toutes les saisies et leurs options
- */
-function verifier_generer_aide() {
-       // On a déjà la liste par saisie
-       $verifications = verifier_lister_disponibles();
-
-       // On construit une liste par options
-       $options = array();
-       foreach ($verifications as $type_verif => $verification) {
-               $options_verification = saisies_lister_par_nom($verification['options'], false);
-               foreach ($options_verification as $nom => $option) {
-                       // Si l'option n'existe pas encore
-                       if (!isset($options[$nom])) {
-                               $options[$nom] = _T_ou_typo($option['options']);
-                       }
-                       // On ajoute toujours par qui c'est utilisé
-                       $options[$nom]['utilisee_par'][] = $type_verif;
-               }
-               ksort($options_verification);
-               $verifications[$type_verif]['options'] = $options_verification;
-       }
-       ksort($options);
-
-       return array(
-               'verifications' => $verifications,
-               'options' => $options
-       );
-}
diff --git a/www/plugins/verifier/images/icones-infos.txt b/www/plugins/verifier/images/icones-infos.txt
deleted file mode 100644 (file)
index 79bfa72..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-les icones proviennent du site http://www.iconfinder.com/icondetails/24333/128/centang_check_checklist_equiry_list_poll_task_todo_write_icon
-elles ont été dessinées par http://linux.softpedia.com/developer/Oliver-Scholtz-93.html
\ No newline at end of file
diff --git a/www/plugins/verifier/images/verifier-128.png b/www/plugins/verifier/images/verifier-128.png
deleted file mode 100644 (file)
index 351968c..0000000
Binary files a/www/plugins/verifier/images/verifier-128.png and /dev/null differ
diff --git a/www/plugins/verifier/images/verifier-16.png b/www/plugins/verifier/images/verifier-16.png
deleted file mode 100644 (file)
index 94b5f47..0000000
Binary files a/www/plugins/verifier/images/verifier-16.png and /dev/null differ
diff --git a/www/plugins/verifier/images/verifier-24.png b/www/plugins/verifier/images/verifier-24.png
deleted file mode 100644 (file)
index ae63af0..0000000
Binary files a/www/plugins/verifier/images/verifier-24.png and /dev/null differ
diff --git a/www/plugins/verifier/images/verifier-32.png b/www/plugins/verifier/images/verifier-32.png
deleted file mode 100644 (file)
index 1993304..0000000
Binary files a/www/plugins/verifier/images/verifier-32.png and /dev/null differ
diff --git a/www/plugins/verifier/inc/is_email.php b/www/plugins/verifier/inc/is_email.php
deleted file mode 100644 (file)
index 9eaaf44..0000000
+++ /dev/null
@@ -1,1277 +0,0 @@
-<?php
-/**
- * To validate an email address according to RFCs 5321, 5322 and others
- *
- * Copyright © 2008-2011, Dominic Sayers
- * Test schema documentation Copyright © 2011, Daniel Marschall
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- *     - Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     - Redistributions in binary form must reproduce the above copyright notice,
- *       this list of conditions and the following disclaimer in the documentation
- *       and/or other materials provided with the distribution.
- *     - Neither the name of Dominic Sayers nor the names of its contributors may be
- *       used to endorse or promote products derived from this software without
- *       specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @package    is_email
- * @author     Dominic Sayers <dominic@sayers.cc>
- * @copyright  2008-2011 Dominic Sayers
- * @license    http://www.opensource.org/licenses/bsd-license.php BSD License
- * @link       http://www.dominicsayers.com/isemail
- * @version    3.04.1 - Changed my link to http://isemail.info throughout
- */
-
-// The quality of this code has been improved greatly by using PHPLint
-// Copyright (c) 2010 Umberto Salsi
-// This is free software; see the license for copying conditions.
-// More info: http://www.icosaedro.it/phplint/
-/*.
-       require_module 'standard';
-       require_module 'pcre';
-.*/
-
-if (!defined('ISEMAIL_VALID')) {
-/*:diagnostic constants start:*/
-// This part of the code is generated using data from test/meta.xml. Beware of making manual alterations
-       // Categories
-       define('ISEMAIL_VALID_CATEGORY', 1);
-       define('ISEMAIL_DNSWARN', 7);
-       define('ISEMAIL_RFC5321', 15);
-       define('ISEMAIL_CFWS', 31);
-       define('ISEMAIL_DEPREC', 63);
-       define('ISEMAIL_RFC5322', 127);
-       define('ISEMAIL_ERR', 255);
-
-       // Diagnoses
-       // Address is valid
-       define('ISEMAIL_VALID', 0);
-       // Address is valid but a DNS check was not successful
-       define('ISEMAIL_DNSWARN_NO_MX_RECORD', 5);
-       define('ISEMAIL_DNSWARN_NO_RECORD', 6);
-       // Address is valid for SMTP but has unusual elements
-       define('ISEMAIL_RFC5321_TLD', 9);
-       define('ISEMAIL_RFC5321_TLDNUMERIC', 10);
-       define('ISEMAIL_RFC5321_QUOTEDSTRING', 11);
-       define('ISEMAIL_RFC5321_ADDRESSLITERAL', 12);
-       define('ISEMAIL_RFC5321_IPV6DEPRECATED', 13);
-       // Address is valid within the message but cannot be used unmodified for the envelope
-       define('ISEMAIL_CFWS_COMMENT', 17);
-       define('ISEMAIL_CFWS_FWS', 18);
-       // Address contains deprecated elements but may still be valid in restricted contexts
-       define('ISEMAIL_DEPREC_LOCALPART', 33);
-       define('ISEMAIL_DEPREC_FWS', 34);
-       define('ISEMAIL_DEPREC_QTEXT', 35);
-       define('ISEMAIL_DEPREC_QP', 36);
-       define('ISEMAIL_DEPREC_COMMENT', 37);
-       define('ISEMAIL_DEPREC_CTEXT', 38);
-       define('ISEMAIL_DEPREC_CFWS_NEAR_AT', 49);
-       // The address is only valid according to the broad definition of RFC 5322. It is otherwise invalid.
-       define('ISEMAIL_RFC5322_DOMAIN', 65);
-       define('ISEMAIL_RFC5322_TOOLONG', 66);
-       define('ISEMAIL_RFC5322_LOCAL_TOOLONG', 67);
-       define('ISEMAIL_RFC5322_DOMAIN_TOOLONG', 68);
-       define('ISEMAIL_RFC5322_LABEL_TOOLONG', 69);
-       define('ISEMAIL_RFC5322_DOMAINLITERAL', 70);
-       define('ISEMAIL_RFC5322_DOMLIT_OBSDTEXT', 71);
-       define('ISEMAIL_RFC5322_IPV6_GRPCOUNT', 72);
-       define('ISEMAIL_RFC5322_IPV6_2X2XCOLON', 73);
-       define('ISEMAIL_RFC5322_IPV6_BADCHAR', 74);
-       define('ISEMAIL_RFC5322_IPV6_MAXGRPS', 75);
-       define('ISEMAIL_RFC5322_IPV6_COLONSTRT', 76);
-       define('ISEMAIL_RFC5322_IPV6_COLONEND', 77);
-       // Address is invalid for any purpose
-       define('ISEMAIL_ERR_EXPECTING_DTEXT', 129);
-       define('ISEMAIL_ERR_NOLOCALPART', 130);
-       define('ISEMAIL_ERR_NODOMAIN', 131);
-       define('ISEMAIL_ERR_CONSECUTIVEDOTS', 132);
-       define('ISEMAIL_ERR_ATEXT_AFTER_CFWS', 133);
-       define('ISEMAIL_ERR_ATEXT_AFTER_QS', 134);
-       define('ISEMAIL_ERR_ATEXT_AFTER_DOMLIT', 135);
-       define('ISEMAIL_ERR_EXPECTING_QPAIR', 136);
-       define('ISEMAIL_ERR_EXPECTING_ATEXT', 137);
-       define('ISEMAIL_ERR_EXPECTING_QTEXT', 138);
-       define('ISEMAIL_ERR_EXPECTING_CTEXT', 139);
-       define('ISEMAIL_ERR_BACKSLASHEND', 140);
-       define('ISEMAIL_ERR_DOT_START', 141);
-       define('ISEMAIL_ERR_DOT_END', 142);
-       define('ISEMAIL_ERR_DOMAINHYPHENSTART', 143);
-       define('ISEMAIL_ERR_DOMAINHYPHENEND', 144);
-       define('ISEMAIL_ERR_UNCLOSEDQUOTEDSTR', 145);
-       define('ISEMAIL_ERR_UNCLOSEDCOMMENT', 146);
-       define('ISEMAIL_ERR_UNCLOSEDDOMLIT', 147);
-       define('ISEMAIL_ERR_FWS_CRLF_X2', 148);
-       define('ISEMAIL_ERR_FWS_CRLF_END', 149);
-       define('ISEMAIL_ERR_CR_NO_LF', 150);
-// End of generated code
-/*:diagnostic constants end:*/
-
-       // function control
-       define('ISEMAIL_THRESHOLD', 16);
-
-       // Email parts
-       define('ISEMAIL_COMPONENT_LOCALPART', 0);
-       define('ISEMAIL_COMPONENT_DOMAIN', 1);
-       define('ISEMAIL_COMPONENT_LITERAL', 2);
-       define('ISEMAIL_CONTEXT_COMMENT', 3);
-       define('ISEMAIL_CONTEXT_FWS', 4);
-       define('ISEMAIL_CONTEXT_QUOTEDSTRING', 5);
-       define('ISEMAIL_CONTEXT_QUOTEDPAIR', 6);
-
-       // Miscellaneous string constants
-       define('ISEMAIL_STRING_AT', '@');
-       define('ISEMAIL_STRING_BACKSLASH', '\\');
-       define('ISEMAIL_STRING_DOT', '.');
-       define('ISEMAIL_STRING_DQUOTE', '"');
-       define('ISEMAIL_STRING_OPENPARENTHESIS', '(');
-       define('ISEMAIL_STRING_CLOSEPARENTHESIS', ')');
-       define('ISEMAIL_STRING_OPENSQBRACKET', '[');
-       define('ISEMAIL_STRING_CLOSESQBRACKET', ']');
-       define('ISEMAIL_STRING_HYPHEN', '-');
-       define('ISEMAIL_STRING_COLON', ':');
-       define('ISEMAIL_STRING_DOUBLECOLON', '::');
-       define('ISEMAIL_STRING_SP', ' ');
-       define('ISEMAIL_STRING_HTAB', "\t");
-       define('ISEMAIL_STRING_CR', "\r");
-       define('ISEMAIL_STRING_LF', "\n");
-       define('ISEMAIL_STRING_IPV6TAG', 'IPv6:');
-       // US-ASCII visible characters not valid for atext (http://tools.ietf.org/html/rfc5322#section-3.2.3)
-       define('ISEMAIL_STRING_SPECIALS', '()<>[]:;@\\,."');
-}
-
-/**
- * Check that an email address conforms to RFCs 5321, 5322 and others
- *
- * As of Version 3.0, we are now distinguishing clearly between a Mailbox
- * as defined by RFC 5321 and an addr-spec as defined by RFC 5322. Depending
- * on the context, either can be regarded as a valid email address. The
- * RFC 5321 Mailbox specification is more restrictive (comments, white space
- * and obsolete forms are not allowed)
- *
- * @param string       $email          The email address to check
- * @param boolean      $checkDNS       If true then a DNS check for MX records will be made
- * @param mixed                $errorlevel     Determines the boundary between valid and invalid addresses.
- *                                     Status codes above this number will be returned as-is,
- *                                     status codes below will be returned as ISEMAIL_VALID. Thus the
- *                                     calling program can simply look for ISEMAIL_VALID if it is
- *                                     only interested in whether an address is valid or not. The
- *                                     errorlevel will determine how "picky" is_email() is about
- *                                     the address.
- *
- *                                     If omitted or passed as false then is_email() will return
- *                                     true or false rather than an integer error or warning.
- *
- *                                     NB Note the difference between $errorlevel = false and
- *                                     $errorlevel = 0
- * @param array                $parsedata      If passed, returns the parsed address components
- * @return bool|int
- */
-/*.mixed.*/ function is_email($email, $checkDNS = false, $errorlevel = false, &$parsedata = array()) {
-       // Check that $email is a valid address. Read the following RFCs to understand the constraints:
-       //      (http://tools.ietf.org/html/rfc5321)
-       //      (http://tools.ietf.org/html/rfc5322)
-       //      (http://tools.ietf.org/html/rfc4291#section-2.2)
-       //      (http://tools.ietf.org/html/rfc1123#section-2.1)
-       //      (http://tools.ietf.org/html/rfc3696) (guidance only)
-       // version 2.0: Enhance $diagnose parameter to $errorlevel
-       // version 3.0: Introduced status categories
-       // revision 3.1: BUG: $parsedata was passed by value instead of by reference
-
-       if (is_bool($errorlevel)) {
-               $threshold      = ISEMAIL_VALID;
-               $diagnose       = (bool) $errorlevel;
-       } else {
-               $diagnose       = true;
-
-               switch ((int) $errorlevel) {
-                       case E_WARNING:
-                               $threshold      = ISEMAIL_THRESHOLD;
-                               break;  // For backward compatibility
-                       case E_ERROR:
-                               $threshold      = ISEMAIL_VALID;
-                               break;  // For backward compatibility
-                       default:
-                               $threshold      = (int) $errorlevel;
-               }
-       }
-
-       $return_status = array(ISEMAIL_VALID);
-
-       // Parse the address into components, character by character
-       $raw_length     = strlen($email);
-       $context        = ISEMAIL_COMPONENT_LOCALPART;  // Where we are
-       $context_stack  = array($context);              // Where we have been
-       $context_prior  = ISEMAIL_COMPONENT_LOCALPART;  // Where we just came from
-       $token          = '';                           // The current character
-       $token_prior    = '';                           // The previous character
-       $parsedata      = array(
-               ISEMAIL_COMPONENT_LOCALPART     => '',
-               ISEMAIL_COMPONENT_DOMAIN        => ''
-       );                      // For the components of the address
-
-       $atomlist       = array(
-               ISEMAIL_COMPONENT_LOCALPART     => array(''),
-               ISEMAIL_COMPONENT_DOMAIN        => array('')
-       );                      // For the dot-atom elements of the address
-       $element_count  = 0;
-       $element_len    = 0;
-       $hyphen_flag    = false;                        // Hyphen cannot occur at the end of a subdomain
-       $end_or_die     = false;                        // CFWS can only appear at the end of the element
-
-//-echo "<table style=\"clear:left;\">"; // debug
-       for ($i = 0; $i < $raw_length; $i++) {
-               $token = $email[$i];
-//-echo "<tr><td><strong>$context|",(($end_or_die) ? 'true' : 'false'),
-//"|$token|" . max($return_status) . "</strong></td>"; // debug
-
-               switch ($context) {
-                       //-------------------------------------------------------------
-                       // local-part
-                       //-------------------------------------------------------------
-                       case ISEMAIL_COMPONENT_LOCALPART:
-                               // http://tools.ietf.org/html/rfc5322#section-3.4.1
-                               //   local-part      =   dot-atom / quoted-string / obs-local-part
-                               //
-                               //   dot-atom        =   [CFWS] dot-atom-text [CFWS]
-                               //
-                               //   dot-atom-text   =   1*atext *("." 1*atext)
-                               //
-                               //   quoted-string   =   [CFWS]
-                               //                       DQUOTE *([FWS] qcontent) [FWS] DQUOTE
-                               //                       [CFWS]
-                               //
-                               //   obs-local-part  =   word *("." word)
-                               //
-                               //   word            =   atom / quoted-string
-                               //
-                               //   atom            =   [CFWS] 1*atext [CFWS]
-                               switch ($token) {
-                                       // Comment
-                                       case ISEMAIL_STRING_OPENPARENTHESIS:
-                                               if ($element_len === 0) {
-                                                       // Comments are OK at the beginning of an element
-                                                       $return_status[] = ($element_count === 0) ?
-                                                               ISEMAIL_CFWS_COMMENT : ISEMAIL_DEPREC_COMMENT;
-                                               } else {
-                                                       $return_status[] = ISEMAIL_CFWS_COMMENT;
-                                                       $end_or_die = true;
-                                                       // We can't start a comment in the middle of an element, so this better be the end
-                                               }
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_COMMENT;
-                                               break;
-                                       // Next dot-atom element
-                                       case ISEMAIL_STRING_DOT:
-                                               if ($element_len === 0) {
-                                                       // Another dot, already?
-                                                       // Fatal error
-                                                       $return_status[] = ($element_count === 0)
-                                                               ? ISEMAIL_ERR_DOT_START : ISEMAIL_ERR_CONSECUTIVEDOTS;
-                                               } else {
-                                                       // The entire local-part can be a quoted string for RFC 5321
-                                                       // If it's just one atom that is quoted then it's an RFC 5322 obsolete form
-                                                       if ($end_or_die) {
-                                                               $return_status[] = ISEMAIL_DEPREC_LOCALPART;
-                                                       }
-                                               }
-                                               // CFWS & quoted strings are OK again now we're at the beginning of an element
-                                               // (although they are obsolete forms)
-                                               $end_or_die     = false;
-                                               $element_len    = 0;
-                                               $element_count++;
-                                               $parsedata[ISEMAIL_COMPONENT_LOCALPART]                 .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_LOCALPART][$element_count]  = '';
-                                               break;
-                                       // Quoted string
-                                       case ISEMAIL_STRING_DQUOTE:
-                                               if ($element_len === 0) {
-                                                       // The entire local-part can be a quoted string for RFC 5321
-                                                       // If it's just one atom that is quoted then it's an RFC 5322 obsolete form
-                                                       $return_status[] = ($element_count === 0)
-                                                               ? ISEMAIL_RFC5321_QUOTEDSTRING : ISEMAIL_DEPREC_LOCALPART;
-
-                                                       $parsedata[ISEMAIL_COMPONENT_LOCALPART]                 .= $token;
-                                                       $atomlist[ISEMAIL_COMPONENT_LOCALPART][$element_count]  .= $token;
-                                                       $element_len++;
-                                                       $end_or_die             = true; // Quoted string must be the entire element
-                                                       $context_stack[]        = $context;
-                                                       $context                = ISEMAIL_CONTEXT_QUOTEDSTRING;
-                                               } else {
-                                                       $return_status[]        = ISEMAIL_ERR_EXPECTING_ATEXT;  // Fatal error
-                                               }
-
-                                               break;
-                                       // Folding White Space
-                                       case ISEMAIL_STRING_CR:
-                                       case ISEMAIL_STRING_SP:
-                                       case ISEMAIL_STRING_HTAB:
-                                               if (($token === ISEMAIL_STRING_CR)
-                                                       && ((++$i === $raw_length) || ($email[$i] !== ISEMAIL_STRING_LF))) {
-                                                       $return_status[] = ISEMAIL_ERR_CR_NO_LF;
-                                                       break;
-                                               }       // Fatal error
-
-                                               if ($element_len === 0) {
-                                                       $return_status[] = ($element_count === 0) ? ISEMAIL_CFWS_FWS : ISEMAIL_DEPREC_FWS;
-                                               } else {
-                                                       // We can't start FWS in the middle of an element, so this better be the end
-                                                       $end_or_die = true;
-                                               }
-
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_FWS;
-                                               $token_prior            = $token;
-
-                                               break;
-                                       // @
-                                       case ISEMAIL_STRING_AT:
-                                               // At this point we should have a valid local-part
-                                               if (count($context_stack) !== 1) {
-                                                       die('Unexpected item on context stack');
-                                               }
-
-                                               if ($parsedata[ISEMAIL_COMPONENT_LOCALPART] === '') {
-                                                       $return_status[]        = ISEMAIL_ERR_NOLOCALPART;      // Fatal error
-                                               } elseif ($element_len === 0) {
-                                                       $return_status[]        = ISEMAIL_ERR_DOT_END;  // Fatal error
-                                               } elseif (strlen($parsedata[ISEMAIL_COMPONENT_LOCALPART]) > 64) {
-                                                       // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.1
-                                                       //   The maximum total length of a user name or other local-part is 64
-                                                       //   octets.
-                                                       $return_status[]        = ISEMAIL_RFC5322_LOCAL_TOOLONG;
-                                               } elseif (($context_prior === ISEMAIL_CONTEXT_COMMENT) || ($context_prior === ISEMAIL_CONTEXT_FWS)) {
-                                                       // http://tools.ietf.org/html/rfc5322#section-3.4.1
-                                                       //   Comments and folding white space
-                                                       //   SHOULD NOT be used around the "@" in the addr-spec.
-                                                       //
-                                                       // http://tools.ietf.org/html/rfc2119
-                                                       // 4. SHOULD NOT   This phrase, or the phrase "NOT RECOMMENDED" mean that
-                                                       //    there may exist valid reasons in particular circumstances when the
-                                                       //    particular behavior is acceptable or even useful, but the full
-                                                       //    implications should be understood and the case carefully weighed
-                                                       //    before implementing any behavior described with this label.
-                                                       $return_status[]        = ISEMAIL_DEPREC_CFWS_NEAR_AT;
-                                               }
-                                               // Clear everything down for the domain parsing
-                                               $context        = ISEMAIL_COMPONENT_DOMAIN;     // Where we are
-                                               $context_stack  = array($context);              // Where we have been
-                                               $element_count  = 0;
-                                               $element_len    = 0;
-                                               $end_or_die     = false;                        // CFWS can only appear at the end of the element
-
-                                               break;
-                                       // atext
-                                       default:
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.3
-                                               //    atext           =   ALPHA / DIGIT /    ; Printable US-ASCII
-                                               //                        "!" / "#" /        ;  characters not including
-                                               //                        "$" / "%" /        ;  specials.  Used for atoms.
-                                               //                        "&" / "'" /
-                                               //                        "*" / "+" /
-                                               //                        "-" / "/" /
-                                               //                        "=" / "?" /
-                                               //                        "^" / "_" /
-                                               //                        "`" / "{" /
-                                               //                        "|" / "}" /
-                                               //                        "~"
-                                               if ($end_or_die) {
-                                                       // We have encountered atext where it is no longer valid
-                                                       switch ($context_prior) {
-                                                               case ISEMAIL_CONTEXT_COMMENT:
-                                                               case ISEMAIL_CONTEXT_FWS:
-                                                                       $return_status[]        = ISEMAIL_ERR_ATEXT_AFTER_CFWS;
-                                                                       break;
-                                                               case ISEMAIL_CONTEXT_QUOTEDSTRING:
-                                                                       $return_status[]        = ISEMAIL_ERR_ATEXT_AFTER_QS;
-                                                                       break;
-                                                               default:
-                                                                       die("More atext found where none is allowed, but unrecognised prior context: $context_prior");
-                                                       }
-                                               } else {
-                                                       $context_prior  = $context;
-                                                       $ord            = ord($token);
-                                                       if (($ord < 33) || ($ord > 126) || ($ord === 10)
-                                                               || (!is_bool(strpos(ISEMAIL_STRING_SPECIALS, $token)))) {
-                                                               $return_status[]        = ISEMAIL_ERR_EXPECTING_ATEXT;  // Fatal error
-                                                       }
-
-                                                       $parsedata[ISEMAIL_COMPONENT_LOCALPART]                 .= $token;
-                                                       $atomlist[ISEMAIL_COMPONENT_LOCALPART][$element_count]  .= $token;
-                                                       $element_len++;
-                                               }
-                               }
-                               break;
-                       //-------------------------------------------------------------
-                       // Domain
-                       //-------------------------------------------------------------
-                       case ISEMAIL_COMPONENT_DOMAIN:
-                               // http://tools.ietf.org/html/rfc5322#section-3.4.1
-                               //   domain          =   dot-atom / domain-literal / obs-domain
-                               //
-                               //   dot-atom        =   [CFWS] dot-atom-text [CFWS]
-                               //
-                               //   dot-atom-text   =   1*atext *("." 1*atext)
-                               //
-                               //   domain-literal  =   [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]
-                               //
-                               //   dtext           =   %d33-90 /          ; Printable US-ASCII
-                               //                       %d94-126 /         ;  characters not including
-                               //                       obs-dtext          ;  "[", "]", or "\"
-                               //
-                               //   obs-domain      =   atom *("." atom)
-                               //
-                               //   atom            =   [CFWS] 1*atext [CFWS]
-
-
-                               // http://tools.ietf.org/html/rfc5321#section-4.1.2
-                               //   Mailbox        = Local-part "@" ( Domain / address-literal )
-                               //
-                               //   Domain         = sub-domain *("." sub-domain)
-                               //
-                               //   address-literal  = "[" ( IPv4-address-literal /
-                               //                    IPv6-address-literal /
-                               //                    General-address-literal ) "]"
-                               //                    ; See Section 4.1.3
-
-                               // http://tools.ietf.org/html/rfc5322#section-3.4.1
-                               //      Note: A liberal syntax for the domain portion of addr-spec is
-                               //      given here.  However, the domain portion contains addressing
-                               //      information specified by and used in other protocols (e.g.,
-                               //      [RFC1034], [RFC1035], [RFC1123], [RFC5321]).  It is therefore
-                               //      incumbent upon implementations to conform to the syntax of
-                               //      addresses for the context in which they are used.
-                               // is_email() author's note: it's not clear how to interpret this in
-                               // the context of a general email address validator. The conclusion I
-                               // have reached is this: "addressing information" must comply with
-                               // RFC 5321 (and in turn RFC 1035), anything that is "semantically
-                               // invisible" must comply only with RFC 5322.
-                               switch ($token) {
-                                       // Comment
-                                       case ISEMAIL_STRING_OPENPARENTHESIS:
-                                               if ($element_len === 0) {
-                                                       // Comments at the start of the domain are deprecated in the text
-                                                       // Comments at the start of a subdomain are obs-domain
-                                                       // (http://tools.ietf.org/html/rfc5322#section-3.4.1)
-                                                       $return_status[] = ($element_count === 0) ?
-                                                               ISEMAIL_DEPREC_CFWS_NEAR_AT : ISEMAIL_DEPREC_COMMENT;
-                                               } else {
-                                                       $return_status[] = ISEMAIL_CFWS_COMMENT;
-                                                       // We can't start a comment in the middle of an element, so this better be the end
-                                                       $end_or_die = true;
-                                               }
-
-                                               $context_stack[] = $context;
-                                               $context = ISEMAIL_CONTEXT_COMMENT;
-                                               break;
-                                       // Next dot-atom element
-                                       case ISEMAIL_STRING_DOT:
-                                               if ($element_len === 0) {
-                                                       // Another dot, already?
-                                                       $return_status[] = ($element_count === 0) ?
-                                                               ISEMAIL_ERR_DOT_START : ISEMAIL_ERR_CONSECUTIVEDOTS; // Fatal error
-                                               } elseif ($hyphen_flag) {
-                                                       // Previous subdomain ended in a hyphen
-                                                       $return_status[] = ISEMAIL_ERR_DOMAINHYPHENEND; // Fatal error
-                                               } else {
-                                                       // Nowhere in RFC 5321 does it say explicitly that the
-                                                       // domain part of a Mailbox must be a valid domain according
-                                                       // to the DNS standards set out in RFC 1035, but this *is*
-                                                       // implied in several places. For instance, wherever the idea
-                                                       // of host routing is discussed the RFC says that the domain
-                                                       // must be looked up in the DNS. This would be nonsense unless
-                                                       // the domain was designed to be a valid DNS domain. Hence we
-                                                       // must conclude that the RFC 1035 restriction on label length
-                                                       // also applies to RFC 5321 domains.
-                                                       //
-                                                       // http://tools.ietf.org/html/rfc1035#section-2.3.4
-                                                       // labels          63 octets or less
-                                                       if ($element_len > 63) {
-                                                               $return_status[] = ISEMAIL_RFC5322_LABEL_TOOLONG;
-                                                       }
-                                               }
-                                               // CFWS is OK again now we're at the beginning of an element
-                                               // (although it may be obsolete CFWS)
-                                               $end_or_die = false;
-                                               $element_len            = 0;
-                                               $element_count++;
-                                               $atomlist[ISEMAIL_COMPONENT_DOMAIN][$element_count]     = '';
-                                               $parsedata[ISEMAIL_COMPONENT_DOMAIN]                    .= $token;
-
-                                               break;
-                                       // Domain literal
-                                       case ISEMAIL_STRING_OPENSQBRACKET:
-                                               if ($parsedata[ISEMAIL_COMPONENT_DOMAIN] === '') {
-                                                       $end_or_die             = true; // Domain literal must be the only component
-                                                       $element_len++;
-                                                       $context_stack[]        = $context;
-                                                       $context                = ISEMAIL_COMPONENT_LITERAL;
-                                                       $parsedata[ISEMAIL_COMPONENT_DOMAIN]                    .= $token;
-                                                       $atomlist[ISEMAIL_COMPONENT_DOMAIN][$element_count]     .= $token;
-                                                       $parsedata[ISEMAIL_COMPONENT_LITERAL]                   = '';
-                                               } else {
-                                                       $return_status[]        = ISEMAIL_ERR_EXPECTING_ATEXT;  // Fatal error
-                                               }
-
-                                               break;
-                                       // Folding White Space
-                                       case ISEMAIL_STRING_CR:
-                                       case ISEMAIL_STRING_SP:
-                                       case ISEMAIL_STRING_HTAB:
-                                               if (($token === ISEMAIL_STRING_CR) && ((++$i === $raw_length)
-                                                       || ($email[$i] !== ISEMAIL_STRING_LF))) {
-                                                       $return_status[] = ISEMAIL_ERR_CR_NO_LF;
-                                                       break;
-                                               } // Fatal error
-
-                                               if ($element_len === 0) {
-                                                       $return_status[] = ($element_count === 0) ?
-                                                               ISEMAIL_DEPREC_CFWS_NEAR_AT : ISEMAIL_DEPREC_FWS;
-                                               } else {
-                                                       $return_status[] = ISEMAIL_CFWS_FWS;
-                                                       // We can't start FWS in the middle of an element, so this better be the end
-                                                       $end_or_die     = true;
-                                               }
-
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_FWS;
-                                               $token_prior            = $token;
-                                               break;
-                                       // atext
-                                       default:
-                                               // RFC 5322 allows any atext...
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.3
-                                               //    atext           =   ALPHA / DIGIT /    ; Printable US-ASCII
-                                               //                        "!" / "#" /        ;  characters not including
-                                               //                        "$" / "%" /        ;  specials.  Used for atoms.
-                                               //                        "&" / "'" /
-                                               //                        "*" / "+" /
-                                               //                        "-" / "/" /
-                                               //                        "=" / "?" /
-                                               //                        "^" / "_" /
-                                               //                        "`" / "{" /
-                                               //                        "|" / "}" /
-                                               //                        "~"
-
-                                               // But RFC 5321 only allows letter-digit-hyphen to comply with DNS rules (RFCs 1034 & 1123)
-                                               // http://tools.ietf.org/html/rfc5321#section-4.1.2
-                                               //   sub-domain     = Let-dig [Ldh-str]
-                                               //
-                                               //   Let-dig        = ALPHA / DIGIT
-                                               //
-                                               //   Ldh-str        = *( ALPHA / DIGIT / "-" ) Let-dig
-                                               //
-                                               if ($end_or_die) {
-                                                       // We have encountered atext where it is no longer valid
-                                                       switch ($context_prior) {
-                                                               case ISEMAIL_CONTEXT_COMMENT:
-                                                               case ISEMAIL_CONTEXT_FWS:
-                                                                       $return_status[]        = ISEMAIL_ERR_ATEXT_AFTER_CFWS;
-                                                                       break;
-                                                               case ISEMAIL_COMPONENT_LITERAL:
-                                                                       $return_status[]        = ISEMAIL_ERR_ATEXT_AFTER_DOMLIT;
-                                                                       break;
-                                                               default:
-                                                                       die("More atext found where none is allowed, but unrecognised prior context: $context_prior");
-                                                       }
-                                               }
-
-                                               $ord            = ord($token);
-                                               $hyphen_flag    = false;        // Assume this token isn't a hyphen unless we discover it is
-
-                                               if (($ord < 33) || ($ord > 126) || (!is_bool(strpos(ISEMAIL_STRING_SPECIALS, $token)))) {
-                                                       $return_status[]        = ISEMAIL_ERR_EXPECTING_ATEXT;  // Fatal error
-                                               } elseif ($token === ISEMAIL_STRING_HYPHEN) {
-                                                       if ($element_len === 0) {
-                                                               // Hyphens can't be at the beginning of a subdomain
-                                                               $return_status[]        = ISEMAIL_ERR_DOMAINHYPHENSTART;        // Fatal error
-                                                       }
-
-                                                       $hyphen_flag = true;
-                                               } elseif (!(($ord > 47 && $ord < 58)
-                                                       || ($ord > 64 && $ord < 91)
-                                                       || ($ord > 96 && $ord < 123))) {
-                                                       // Not an RFC 5321 subdomain, but still OK by RFC 5322
-                                                       $return_status[]        = ISEMAIL_RFC5322_DOMAIN;
-                                               }
-
-                                               $parsedata[ISEMAIL_COMPONENT_DOMAIN]                    .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_DOMAIN][$element_count]     .= $token;
-                                               $element_len++;
-                               }
-                               break;
-                       //-------------------------------------------------------------
-                       // Domain literal
-                       //-------------------------------------------------------------
-                       case ISEMAIL_COMPONENT_LITERAL:
-                               // http://tools.ietf.org/html/rfc5322#section-3.4.1
-                               //   domain-literal  =   [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]
-                               //
-                               //   dtext           =   %d33-90 /          ; Printable US-ASCII
-                               //                       %d94-126 /         ;  characters not including
-                               //                       obs-dtext          ;  "[", "]", or "\"
-                               //
-                               //   obs-dtext       =   obs-NO-WS-CTL / quoted-pair
-                               switch ($token) {
-                                       // End of domain literal
-                                       case ISEMAIL_STRING_CLOSESQBRACKET:
-                                               if ((int) max($return_status) < ISEMAIL_DEPREC) {
-                                                       // Could be a valid RFC 5321 address literal, so let's check
-
-                                                       // http://tools.ietf.org/html/rfc5321#section-4.1.2
-                                                       //   address-literal  = "[" ( IPv4-address-literal /
-                                                       //                    IPv6-address-literal /
-                                                       //                    General-address-literal ) "]"
-                                                       //                    ; See Section 4.1.3
-                                                       //
-                                                       // http://tools.ietf.org/html/rfc5321#section-4.1.3
-                                                       //   IPv4-address-literal  = Snum 3("."  Snum)
-                                                       //
-                                                       //   IPv6-address-literal  = "IPv6:" IPv6-addr
-                                                       //
-                                                       //   General-address-literal  = Standardized-tag ":" 1*dcontent
-                                                       //
-                                                       //   Standardized-tag  = Ldh-str
-                                                       //                     ; Standardized-tag MUST be specified in a
-                                                       //                     ; Standards-Track RFC and registered with IANA
-                                                       //
-                                                       //   dcontent       = %d33-90 / ; Printable US-ASCII
-                                                       //                  %d94-126 ; excl. "[", "\", "]"
-                                                       //
-                                                       //   Snum           = 1*3DIGIT
-                                                       //                  ; representing a decimal integer
-                                                       //                  ; value in the range 0 through 255
-                                                       //
-                                                       //   IPv6-addr      = IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp
-                                                       //
-                                                       //   IPv6-hex       = 1*4HEXDIG
-                                                       //
-                                                       //   IPv6-full      = IPv6-hex 7(":" IPv6-hex)
-                                                       //
-                                                       //   IPv6-comp      = [IPv6-hex *5(":" IPv6-hex)] "::"
-                                                       //                  [IPv6-hex *5(":" IPv6-hex)]
-                                                       //                  ; The "::" represents at least 2 16-bit groups of
-                                                       //                  ; zeros.  No more than 6 groups in addition to the
-                                                       //                  ; "::" may be present.
-                                                       //
-                                                       //   IPv6v4-full    = IPv6-hex 5(":" IPv6-hex) ":" IPv4-address-literal
-                                                       //
-                                                       //   IPv6v4-comp    = [IPv6-hex *3(":" IPv6-hex)] "::"
-                                                       //                  [IPv6-hex *3(":" IPv6-hex) ":"]
-                                                       //                  IPv4-address-literal
-                                                       //                  ; The "::" represents at least 2 16-bit groups of
-                                                       //                  ; zeros.  No more than 4 groups in addition to the
-                                                       //                  ; "::" and IPv4-address-literal may be present.
-                                                       //
-                                                       // is_email() author's note: We can't use ip2long() to validate
-                                                       // IPv4 addresses because it accepts abbreviated addresses
-                                                       // (xxx.xxx.xxx), expanding the last group to complete the address.
-                                                       // filter_var() validates IPv6 address inconsistently (up to PHP 5.3.3
-                                                       // at least) -- see http://bugs.php.net/bug.php?id=53236 for example
-                                                       $max_groups     = 8;
-                                                       $matchesIP      = array();
-                                       /*.mixed.*/     $index          = false;
-                                                       $addressliteral = $parsedata[ISEMAIL_COMPONENT_LITERAL];
-
-                                                       // Extract IPv4 part from the end of the address-literal (if there is one)
-                                                       if (preg_match(
-                                                               '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/',
-                                                               $addressliteral,
-                                                               $matchesIP
-                                                       ) > 0) {
-                                                               $index = strrpos($addressliteral, $matchesIP[0]);
-                                                               if ($index !== 0) {
-                                                                       // Convert IPv4 part to IPv6 format for further testing
-                                                                       $addressliteral = substr($addressliteral, 0, $index) . '0:0';
-                                                               }
-                                                       }
-
-                                                       if ($index === 0) {
-                                                               // Nothing there except a valid IPv4 address, so...
-                                                               $return_status[]        = ISEMAIL_RFC5321_ADDRESSLITERAL;
-                                                       } elseif (strncasecmp($addressliteral, ISEMAIL_STRING_IPV6TAG, 5) !== 0) {
-                                                               $return_status[]        = ISEMAIL_RFC5322_DOMAINLITERAL;
-                                                       } else {
-                                                               $IPv6           = substr($addressliteral, 5);
-                                                               // Revision 2.7: Daniel Marschall's new IPv6 testing strategy
-                                                               $matchesIP      = explode(ISEMAIL_STRING_COLON, $IPv6);
-                                                               $groupCount     = count($matchesIP);
-                                                               $index          = strpos($IPv6, ISEMAIL_STRING_DOUBLECOLON);
-
-                                                               if ($index === false) {
-                                                                       // We need exactly the right number of groups
-                                                                       if ($groupCount !== $max_groups) {
-                                                                               $return_status[]        = ISEMAIL_RFC5322_IPV6_GRPCOUNT;
-                                                                       }
-                                                               } else {
-                                                                       if ($index !== strrpos($IPv6, ISEMAIL_STRING_DOUBLECOLON)) {
-                                                                               $return_status[]        = ISEMAIL_RFC5322_IPV6_2X2XCOLON;
-                                                                       } else {
-                                                                               if ($index === 0 || $index === (strlen($IPv6) - 2)) {
-                                                                                       $max_groups++;
-                                                                                       // RFC 4291 allows :: at the start or end of an address with 7 other groups in addition
-                                                                               }
-
-                                                                               if ($groupCount > $max_groups) {
-                                                                                       $return_status[]        = ISEMAIL_RFC5322_IPV6_MAXGRPS;
-                                                                               } elseif ($groupCount === $max_groups) {
-                                                                                       $return_status[]        = ISEMAIL_RFC5321_IPV6DEPRECATED;       // Eliding a single "::"
-                                                                               }
-                                                                       }
-                                                               }
-
-                                                               // Revision 2.7: Daniel Marschall's new IPv6 testing strategy
-                                                               if ((substr($IPv6, 0, 1) === ISEMAIL_STRING_COLON) && (substr($IPv6, 1, 1) !== ISEMAIL_STRING_COLON)) {
-                                                                       $return_status[]        = ISEMAIL_RFC5322_IPV6_COLONSTRT;       // Address starts with a single colon
-                                                               } elseif ((substr($IPv6, -1) === ISEMAIL_STRING_COLON) && (substr($IPv6, -2, 1) !== ISEMAIL_STRING_COLON)) {
-                                                                       $return_status[]        = ISEMAIL_RFC5322_IPV6_COLONEND;        // Address ends with a single colon
-                                                               } elseif (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) {
-                                                                       $return_status[]        = ISEMAIL_RFC5322_IPV6_BADCHAR; // Check for unmatched characters
-                                                               } else {
-                                                                       $return_status[]        = ISEMAIL_RFC5321_ADDRESSLITERAL;
-                                                               }
-                                                       }
-                                               } else {
-                                                       $return_status[]        = ISEMAIL_RFC5322_DOMAINLITERAL;
-                                               }
-
-                                               $parsedata[ISEMAIL_COMPONENT_DOMAIN] .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_DOMAIN][$element_count] .= $token;
-                                               $element_len++;
-                                               $context_prior = $context;
-                                               $context = (int) array_pop($context_stack);
-                                               break;
-                                       case ISEMAIL_STRING_BACKSLASH:
-                                               $return_status[]        = ISEMAIL_RFC5322_DOMLIT_OBSDTEXT;
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_QUOTEDPAIR;
-                                               break;
-                                       // Folding White Space
-                                       case ISEMAIL_STRING_CR:
-                                       case ISEMAIL_STRING_SP:
-                                       case ISEMAIL_STRING_HTAB:
-                                               if (($token === ISEMAIL_STRING_CR)
-                                                       && ((++$i === $raw_length) || ($email[$i] !== ISEMAIL_STRING_LF))) {
-                                                       $return_status[] = ISEMAIL_ERR_CR_NO_LF;
-                                                       break;
-                                               }       // Fatal error
-
-                                               $return_status[]        = ISEMAIL_CFWS_FWS;
-
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_FWS;
-                                               $token_prior            = $token;
-                                               break;
-                                       // dtext
-                                       default:
-                                               // http://tools.ietf.org/html/rfc5322#section-3.4.1
-                                               //   dtext           =   %d33-90 /          ; Printable US-ASCII
-                                               //                       %d94-126 /         ;  characters not including
-                                               //                       obs-dtext          ;  "[", "]", or "\"
-                                               //
-                                               //   obs-dtext       =   obs-NO-WS-CTL / quoted-pair
-                                               //
-                                               //   obs-NO-WS-CTL   =   %d1-8 /            ; US-ASCII control
-                                               //                       %d11 /             ;  characters that do not
-                                               //                       %d12 /             ;  include the carriage
-                                               //                       %d14-31 /          ;  return, line feed, and
-                                               //                       %d127              ;  white space characters
-                                               $ord = ord($token);
-
-                                               // CR, LF, SP & HTAB have already been parsed above
-                                               if (($ord > 127) || ($ord === 0) || ($token === ISEMAIL_STRING_OPENSQBRACKET)) {
-                                                       $return_status[]        = ISEMAIL_ERR_EXPECTING_DTEXT;  // Fatal error
-                                                       break;
-                                               } elseif (($ord < 33) || ($ord === 127)) {
-                                                       $return_status[]        = ISEMAIL_RFC5322_DOMLIT_OBSDTEXT;
-                                               }
-
-                                               $parsedata[ISEMAIL_COMPONENT_LITERAL]                   .= $token;
-                                               $parsedata[ISEMAIL_COMPONENT_DOMAIN]                    .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_DOMAIN][$element_count]     .= $token;
-                                               $element_len++;
-                               }
-                               break;
-                       //-------------------------------------------------------------
-                       // Quoted string
-                       //-------------------------------------------------------------
-                       case ISEMAIL_CONTEXT_QUOTEDSTRING:
-                               // http://tools.ietf.org/html/rfc5322#section-3.2.4
-                               //   quoted-string   =   [CFWS]
-                               //                       DQUOTE *([FWS] qcontent) [FWS] DQUOTE
-                               //                       [CFWS]
-                               //
-                               //   qcontent        =   qtext / quoted-pair
-                               switch ($token) {
-                                       // Quoted pair
-                                       case ISEMAIL_STRING_BACKSLASH:
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_QUOTEDPAIR;
-                                               break;
-                                       // Folding White Space
-                                       // Inside a quoted string, spaces are allowed as regular characters.
-                                       // It's only FWS if we include HTAB or CRLF
-                                       case ISEMAIL_STRING_CR:
-                                       case ISEMAIL_STRING_HTAB:
-                                               if (($token === ISEMAIL_STRING_CR)
-                                                       && ((++$i === $raw_length) || ($email[$i] !== ISEMAIL_STRING_LF))) {
-                                                       $return_status[] = ISEMAIL_ERR_CR_NO_LF;
-                                                       break;
-                                               }// Fatal error
-
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.2
-                                               //   Runs of FWS, comment, or CFWS that occur between lexical tokens in a
-                                               //   structured header field are semantically interpreted as a single
-                                               //   space character.
-
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.4
-                                               //   the CRLF in any FWS/CFWS that appears within the quoted-string [is]
-                                               //   semantically "invisible" and therefore not part of the quoted-string
-                                               $parsedata[ISEMAIL_COMPONENT_LOCALPART]                 .= ISEMAIL_STRING_SP;
-                                               $atomlist[ISEMAIL_COMPONENT_LOCALPART][$element_count]  .= ISEMAIL_STRING_SP;
-                                               $element_len++;
-
-                                               $return_status[]                = ISEMAIL_CFWS_FWS;
-                                               $context_stack[]                = $context;
-                                               $context                        = ISEMAIL_CONTEXT_FWS;
-                                               $token_prior                    = $token;
-                                               break;
-                                       // End of quoted string
-                                       case ISEMAIL_STRING_DQUOTE:
-                                               $parsedata[ISEMAIL_COMPONENT_LOCALPART]                 .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_LOCALPART][$element_count]  .= $token;
-                                               $element_len++;
-                                               $context_prior                  = $context;
-                                               $context                        = (int) array_pop($context_stack);
-                                               break;
-                                       // qtext
-                                       default:
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.4
-                                               //   qtext           =   %d33 /             ; Printable US-ASCII
-                                               //                       %d35-91 /          ;  characters not including
-                                               //                       %d93-126 /         ;  "\" or the quote character
-                                               //                       obs-qtext
-                                               //
-                                               //   obs-qtext       =   obs-NO-WS-CTL
-                                               //
-                                               //   obs-NO-WS-CTL   =   %d1-8 /            ; US-ASCII control
-                                               //                       %d11 /             ;  characters that do not
-                                               //                       %d12 /             ;  include the carriage
-                                               //                       %d14-31 /          ;  return, line feed, and
-                                               //                       %d127              ;  white space characters
-                                               $ord = ord($token);
-
-                                               if (($ord > 127) || ($ord === 0) || ($ord === 10)) {
-                                                       $return_status[]        = ISEMAIL_ERR_EXPECTING_QTEXT;  // Fatal error
-                                               } elseif (($ord < 32) || ($ord === 127)) {
-                                                       $return_status[]        = ISEMAIL_DEPREC_QTEXT;
-                                               }
-
-                                               $parsedata[ISEMAIL_COMPONENT_LOCALPART]                 .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_LOCALPART][$element_count]  .= $token;
-                                               $element_len++;
-                               }
-
-                               // http://tools.ietf.org/html/rfc5322#section-3.4.1
-                               //   If the
-                               //   string can be represented as a dot-atom (that is, it contains no
-                               //   characters other than atext characters or "." surrounded by atext
-                               //   characters), then the dot-atom form SHOULD be used and the quoted-
-                               //   string form SHOULD NOT be used.
-                               //   To do
-                               break;
-                       //-------------------------------------------------------------
-                       // Quoted pair
-                       //-------------------------------------------------------------
-                       case ISEMAIL_CONTEXT_QUOTEDPAIR:
-                               // http://tools.ietf.org/html/rfc5322#section-3.2.1
-                               //   quoted-pair     =   ("\" (VCHAR / WSP)) / obs-qp
-                               //
-                               //   VCHAR           =  %d33-126            ; visible (printing) characters
-                               //   WSP             =  SP / HTAB           ; white space
-                               //
-                               //   obs-qp          =   "\" (%d0 / obs-NO-WS-CTL / LF / CR)
-                               //
-                               //   obs-NO-WS-CTL   =   %d1-8 /            ; US-ASCII control
-                               //                       %d11 /             ;  characters that do not
-                               //                       %d12 /             ;  include the carriage
-                               //                       %d14-31 /          ;  return, line feed, and
-                               //                       %d127              ;  white space characters
-                               //
-                               // i.e. obs-qp       =  "\" (%d0-8, %d10-31 / %d127)
-                               $ord = ord($token);
-
-                               if ($ord > 127) {
-                                               $return_status[]        = ISEMAIL_ERR_EXPECTING_QPAIR;  // Fatal error
-                               } elseif ((($ord < 31) && ($ord !== 9)) || ($ord === 127)) {
-                                       // SP & HTAB are allowed
-                                       $return_status[]        = ISEMAIL_DEPREC_QP;
-                               }
-
-                               // At this point we know where this qpair occurred so
-                               // we could check to see if the character actually
-                               // needed to be quoted at all.
-                               // http://tools.ietf.org/html/rfc5321#section-4.1.2
-                               //   the sending system SHOULD transmit the
-                               //   form that uses the minimum quoting possible.
-                               // To do: check whether the character needs to be quoted (escaped) in this context
-                               $context_prior  = $context;
-                               $context        = (int) array_pop($context_stack);      // End of qpair
-                               $token          = ISEMAIL_STRING_BACKSLASH . $token;
-
-                               switch ($context) {
-                                       case ISEMAIL_CONTEXT_COMMENT:
-                                               break;
-                                       case ISEMAIL_CONTEXT_QUOTEDSTRING:
-                                               $parsedata[ISEMAIL_COMPONENT_LOCALPART] .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_LOCALPART][$element_count]  .= $token;
-                                               $element_len    += 2;
-                                               // The maximum sizes specified by RFC 5321 are octet counts, so we must include the backslash
-                                               break;
-                                       case ISEMAIL_COMPONENT_LITERAL:
-                                               $parsedata[ISEMAIL_COMPONENT_DOMAIN] .= $token;
-                                               $atomlist[ISEMAIL_COMPONENT_DOMAIN][$element_count]     .= $token;
-                                               $element_len    += 2;
-                                               // The maximum sizes specified by RFC 5321 are octet counts, so we must include the backslash
-                                               break;
-                                       default:
-                                               die("Quoted pair logic invoked in an invalid context: $context");
-                               }
-
-                               break;
-                       //-------------------------------------------------------------
-                       // Comment
-                       //-------------------------------------------------------------
-                       case ISEMAIL_CONTEXT_COMMENT:
-                               // http://tools.ietf.org/html/rfc5322#section-3.2.2
-                               //   comment         =   "(" *([FWS] ccontent) [FWS] ")"
-                               //
-                               //   ccontent        =   ctext / quoted-pair / comment
-                               switch ($token) {
-                                       // Nested comment
-                                       case ISEMAIL_STRING_OPENPARENTHESIS:
-                                               // Nested comments are OK
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_COMMENT;
-                                               break;
-                                       // End of comment
-                                       case ISEMAIL_STRING_CLOSEPARENTHESIS:
-                                               $context_prior          = $context;
-                                               $context                = (int) array_pop($context_stack);
-
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.2
-                                               //   Runs of FWS, comment, or CFWS that occur between lexical tokens in a
-                                               //   structured header field are semantically interpreted as a single
-                                               //   space character.
-                                               //
-                                               // is_email() author's note: This *cannot* mean that we must add a
-                                               // space to the address wherever CFWS appears. This would result in
-                                               // any addr-spec that had CFWS outside a quoted string being invalid
-                                               // for RFC 5321.
-                                               //      if (($context === ISEMAIL_COMPONENT_LOCALPART) || ($context === ISEMAIL_COMPONENT_DOMAIN)) {
-                                               //      $parsedata[$context]                    .= ISEMAIL_STRING_SP;
-                                               //      $atomlist[$context][$element_count]     .= ISEMAIL_STRING_SP;
-                                               //      $element_len++;
-                                               //      }
-
-                                               break;
-                                       // Quoted pair
-                                       case ISEMAIL_STRING_BACKSLASH:
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_QUOTEDPAIR;
-                                               break;
-                                       // Folding White Space
-                                       case ISEMAIL_STRING_CR:
-                                       case ISEMAIL_STRING_SP:
-                                       case ISEMAIL_STRING_HTAB:
-                                               if (($token === ISEMAIL_STRING_CR)
-                                                       && ((++$i === $raw_length) || ($email[$i] !== ISEMAIL_STRING_LF))) {
-                                                       $return_status[] = ISEMAIL_ERR_CR_NO_LF;
-                                                       break;
-                                               } // Fatal error
-
-                                               $return_status[]        = ISEMAIL_CFWS_FWS;
-
-                                               $context_stack[]        = $context;
-                                               $context                = ISEMAIL_CONTEXT_FWS;
-                                               $token_prior            = $token;
-                                               break;
-                                       // ctext
-                                       default:
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.3
-                                               //   ctext           =   %d33-39 /          ; Printable US-ASCII
-                                               //                       %d42-91 /          ;  characters not including
-                                               //                       %d93-126 /         ;  "(", ")", or "\"
-                                               //                       obs-ctext
-                                               //
-                                               //   obs-ctext       =   obs-NO-WS-CTL
-                                               //
-                                               //   obs-NO-WS-CTL   =   %d1-8 /            ; US-ASCII control
-                                               //                       %d11 /             ;  characters that do not
-                                               //                       %d12 /             ;  include the carriage
-                                               //                       %d14-31 /          ;  return, line feed, and
-                                               //                       %d127              ;  white space characters
-                                               $ord = ord($token);
-
-                                               if (($ord > 127) || ($ord === 0) || ($ord === 10)) {
-                                                       $return_status[]        = ISEMAIL_ERR_EXPECTING_CTEXT;  // Fatal error
-                                                       break;
-                                               } elseif (($ord < 32) || ($ord === 127)) {
-                                                       $return_status[]        = ISEMAIL_DEPREC_CTEXT;
-                                               }
-                               }
-                               break;
-                       //-------------------------------------------------------------
-                       // Folding White Space
-                       //-------------------------------------------------------------
-                       case ISEMAIL_CONTEXT_FWS:
-                               // http://tools.ietf.org/html/rfc5322#section-3.2.2
-                               //   FWS             =   ([*WSP CRLF] 1*WSP) /  obs-FWS
-                               //                                          ; Folding white space
-
-                               // But note the erratum:
-                               // http://www.rfc-editor.org/errata_search.php?rfc=5322&eid=1908:
-                               //   In the obsolete syntax, any amount of folding white space MAY be
-                               //   inserted where the obs-FWS rule is allowed.  This creates the
-                               //   possibility of having two consecutive "folds" in a line, and
-                               //   therefore the possibility that a line which makes up a folded header
-                               //   field could be composed entirely of white space.
-                               //
-                               //   obs-FWS         =   1*([CRLF] WSP)
-                               if ($token_prior === ISEMAIL_STRING_CR) {
-                                       if ($token === ISEMAIL_STRING_CR) {
-                                               $return_status[]        = ISEMAIL_ERR_FWS_CRLF_X2;      // Fatal error
-                                               break;
-                                       }
-                                       if (isset($crlf_count)) {
-                                               if (++$crlf_count > 1) {
-                                                       $return_status[]        = ISEMAIL_DEPREC_FWS;   // Multiple folds = obsolete FWS
-                                               }
-                                       } else {
-                                               $crlf_count = 1;
-                                       }
-                               }
-
-                               switch ($token) {
-                                       case ISEMAIL_STRING_CR:
-                                               if ((++$i === $raw_length) || ($email[$i] !== ISEMAIL_STRING_LF)) {
-                                                       $return_status[]        = ISEMAIL_ERR_CR_NO_LF; // Fatal error
-                                               }
-                                               break;
-                                       case ISEMAIL_STRING_SP:
-                                       case ISEMAIL_STRING_HTAB:
-                                               break;
-                                       default:
-                                               if ($token_prior === ISEMAIL_STRING_CR) {
-                                                       $return_status[]        = ISEMAIL_ERR_FWS_CRLF_END;     // Fatal error
-                                                       break;
-                                               }
-
-                                               if (isset($crlf_count)) {
-                                                       unset($crlf_count);
-                                               }
-
-                                               $context_prior                                  = $context;
-                                               $context                                        = (int) array_pop($context_stack);      // End of FWS
-
-                                               // http://tools.ietf.org/html/rfc5322#section-3.2.2
-                                               //   Runs of FWS, comment, or CFWS that occur between lexical tokens in a
-                                               //   structured header field are semantically interpreted as a single
-                                               //   space character.
-                                               //
-                                               // is_email() author's note: This *cannot* mean that we must add a
-                                               // space to the address wherever CFWS appears. This would result in
-                                               // any addr-spec that had CFWS outside a quoted string being invalid
-                                               // for RFC 5321.
-               //                              if (($context === ISEMAIL_COMPONENT_LOCALPART) || ($context === ISEMAIL_COMPONENT_DOMAIN)) {
-               //                                      $parsedata[$context]                    .= ISEMAIL_STRING_SP;
-               //                                      $atomlist[$context][$element_count]     .= ISEMAIL_STRING_SP;
-               //                                      $element_len++;
-               //                              }
-
-                                               $i--;   // Look at this token again in the parent context
-                               }
-
-                               $token_prior = $token;
-                               break;
-                       //-------------------------------------------------------------
-                       // A context we aren't expecting
-                       //-------------------------------------------------------------
-                       default:
-                               die("Unknown context: $context");
-               }
-
-//-echo "<td>$context|",(($end_or_die) ? 'true' : 'false'),"|$token|" . max($return_status) . "</td></tr>"; // debug
-               if ((int) max($return_status) > ISEMAIL_RFC5322) {
-                       break;  // No point going on if we've got a fatal error
-               }
-       }
-
-       // Some simple final tests
-       if ((int) max($return_status) < ISEMAIL_RFC5322) {
-               if ($context    === ISEMAIL_CONTEXT_QUOTEDSTRING) {
-                       $return_status[]        = ISEMAIL_ERR_UNCLOSEDQUOTEDSTR; // Fatal error
-               } elseif ($context      === ISEMAIL_CONTEXT_QUOTEDPAIR) {
-                       $return_status[]        = ISEMAIL_ERR_BACKSLASHEND; // Fatal error
-               } elseif ($context      === ISEMAIL_CONTEXT_COMMENT) {
-                       $return_status[]        = ISEMAIL_ERR_UNCLOSEDCOMMENT; // Fatal error
-               } elseif ($context      === ISEMAIL_COMPONENT_LITERAL) {
-                       $return_status[]        = ISEMAIL_ERR_UNCLOSEDDOMLIT; // Fatal error
-               } elseif ($token                === ISEMAIL_STRING_CR) {
-                       $return_status[]        = ISEMAIL_ERR_FWS_CRLF_END; // Fatal error
-               } elseif ($parsedata[ISEMAIL_COMPONENT_DOMAIN]  === '') {
-                       $return_status[]        = ISEMAIL_ERR_NODOMAIN; // Fatal error
-               } elseif ($element_len  === 0) {
-                       $return_status[]        = ISEMAIL_ERR_DOT_END; // Fatal error
-               } elseif ($hyphen_flag) {
-                       $return_status[]        = ISEMAIL_ERR_DOMAINHYPHENEND; // Fatal error
-               } elseif (strlen($parsedata[ISEMAIL_COMPONENT_DOMAIN]) > 255) {
-                       // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.2
-                       //   The maximum total length of a domain name or number is 255 octets.
-                       $return_status[]        = ISEMAIL_RFC5322_DOMAIN_TOOLONG;
-               } elseif (strlen(
-                       $parsedata[ISEMAIL_COMPONENT_LOCALPART] . ISEMAIL_STRING_AT . $parsedata[ISEMAIL_COMPONENT_DOMAIN]
-               ) > 254) {
-                       // http://tools.ietf.org/html/rfc5321#section-4.1.2
-                       //   Forward-path   = Path
-                       //
-                       //   Path           = "<" [ A-d-l ":" ] Mailbox ">"
-                       //
-                       // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.3
-                       //   The maximum total length of a reverse-path or forward-path is 256
-                       //   octets (including the punctuation and element separators).
-                       //
-                       // Thus, even without (obsolete) routing information, the Mailbox can
-                       // only be 254 characters long. This is confirmed by this verified
-                       // erratum to RFC 3696:
-                       //
-                       // http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690
-                       //   However, there is a restriction in RFC 2821 on the length of an
-                       //   address in MAIL and RCPT commands of 254 characters.  Since addresses
-                       //   that do not fit in those fields are not normally useful, the upper
-                       //   limit on address lengths should normally be considered to be 254.
-                       $return_status[]        = ISEMAIL_RFC5322_TOOLONG;
-               } elseif ($element_len > 63) {
-                       // http://tools.ietf.org/html/rfc1035#section-2.3.4
-                       // labels          63 octets or less
-                       $return_status[]        = ISEMAIL_RFC5322_LABEL_TOOLONG;
-               }
-       }
-
-       // Check DNS?
-       $dns_checked = false;
-
-       if ($checkDNS && ((int) max($return_status) < ISEMAIL_DNSWARN) && function_exists('dns_get_record')) {
-               // http://tools.ietf.org/html/rfc5321#section-2.3.5
-               //   Names that can
-               //   be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed
-               //   in Section 5) are permitted, as are CNAME RRs whose targets can be
-               //   resolved, in turn, to MX or address RRs.
-               //
-               // http://tools.ietf.org/html/rfc5321#section-5.1
-               //   The lookup first attempts to locate an MX record associated with the
-               //   name.  If a CNAME record is found, the resulting name is processed as
-               //   if it were the initial name. ... If an empty list of MXs is returned,
-               //   the address is treated as if it was associated with an implicit MX
-               //   RR, with a preference of 0, pointing to that host.
-               //
-               // is_email() author's note: We will regard the existence of a CNAME to be
-               // sufficient evidence of the domain's existence. For performance reasons
-               // we will not repeat the DNS lookup for the CNAME's target, but we will
-               // raise a warning because we didn't immediately find an MX record.
-               if ($element_count === 0) {
-                       $parsedata[ISEMAIL_COMPONENT_DOMAIN] .= '.';
-                       // Checking TLD DNS seems to work only if you explicitly check from the root
-               }
-               // Not using checkdnsrr because of a suspected bug in PHP 5.3 (http://bugs.php.net/bug.php?id=51844)
-               $result = @dns_get_record($parsedata[ISEMAIL_COMPONENT_DOMAIN], DNS_MX);
-
-               if ((is_bool($result) && !(bool) $result)) {
-                       $return_status[] = ISEMAIL_DNSWARN_NO_RECORD;
-                       // Domain can't be found in DNS
-               } else {
-                       if (count($result) === 0) {
-                               $return_status[] = ISEMAIL_DNSWARN_NO_MX_RECORD;                // MX-record for domain can't be found
-                               $result = @dns_get_record($parsedata[ISEMAIL_COMPONENT_DOMAIN], DNS_A + DNS_CNAME);
-
-                               if (count($result) === 0) {
-                                       $return_status[] = ISEMAIL_DNSWARN_NO_RECORD;
-                                       // No usable records for the domain can be found
-                               }
-                       } else {
-                               $dns_checked = true;
-                       }
-               }
-       }
-
-       // Check for TLD addresses
-       // -----------------------
-       // TLD addresses are specifically allowed in RFC 5321 but they are
-       // unusual to say the least. We will allocate a separate
-       // status to these addresses on the basis that they are more likely
-       // to be typos than genuine addresses (unless we've already
-       // established that the domain does have an MX record)
-       //
-       // http://tools.ietf.org/html/rfc5321#section-2.3.5
-       //   In the case
-       //   of a top-level domain used by itself in an email address, a single
-       //   string is used without any dots.  This makes the requirement,
-       //   described in more detail below, that only fully-qualified domain
-       //   names appear in SMTP transactions on the public Internet,
-       //   particularly important where top-level domains are involved.
-       //
-       // TLD format
-       // ----------
-       // The format of TLDs has changed a number of times. The standards
-       // used by IANA have been largely ignored by ICANN, leading to
-       // confusion over the standards being followed. These are not defined
-       // anywhere, except as a general component of a DNS host name (a label).
-       // However, this could potentially lead to 123.123.123.123 being a
-       // valid DNS name (rather than an IP address) and thereby creating
-       // an ambiguity. The most authoritative statement on TLD formats that
-       // the author can find is in a (rejected!) erratum to RFC 1123
-       // submitted by John Klensin, the author of RFC 5321:
-       //
-       // http://www.rfc-editor.org/errata_search.php?rfc=1123&eid=1353
-       //   However, a valid host name can never have the dotted-decimal
-       //   form #.#.#.#, since this change does not permit the highest-level
-       //   component label to start with a digit even if it is not all-numeric.
-       if (!$dns_checked && ((int) max($return_status) < ISEMAIL_DNSWARN)) {
-               if ($element_count      === 0) {
-                       $return_status[]        = ISEMAIL_RFC5321_TLD;
-               }
-
-               if (is_numeric($atomlist[ISEMAIL_COMPONENT_DOMAIN][$element_count][0])) {
-                       $return_status[]        = ISEMAIL_RFC5321_TLDNUMERIC;
-               }
-       }
-
-       $return_status          = array_unique($return_status);
-       $final_status           = (int) max($return_status);
-
-       if (count($return_status) !== 1) {
-               array_shift($return_status); // remove redundant ISEMAIL_VALID
-       }
-
-       $parsedata['status'] = $return_status;
-
-       if ($final_status < $threshold) {
-               $final_status = ISEMAIL_VALID;
-       }
-
-       return ($diagnose) ? $final_status : ($final_status < ISEMAIL_THRESHOLD);
-}
diff --git a/www/plugins/verifier/inc/verifier.php b/www/plugins/verifier/inc/verifier.php
deleted file mode 100644 (file)
index 8114727..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Fonction de base de l'API de vérification.
- * @param mixed $valeur La valeur a verifier.
- * @param string $type Le type de verification a appliquer.
- * @param array $options Un eventuel tableau d'options suivant le type.
- * @param array $valeur_normalisee
- *             Si des options de verification modifient la valeur entrante (normalisent),
- *             alors la valeur modifie sera stockee dans cette variable.
- * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function inc_verifier_dist($valeur, $type, $options = null, &$valeur_normalisee = null) {
-
-       $erreur = array();
-       // On vérifie que les options sont bien un tableau
-       if (!is_array($options)) {
-               $options = array();
-       }
-
-       // Si la valeur est vide, il n'y a rien a verifier donc c'est bon
-       if (is_null($valeur) or (is_string($valeur) and $valeur == '')) {
-               return '';
-       }
-       // Si c'est une date avec horaire c'est un tableau
-       if (is_array($valeur) and isset($valeur['date']) and $valeur['date'] == '') {
-               return '';
-       }
-
-       // On cherche si une fonction correspondant au type existe
-       if ($verifier = charger_fonction($type, 'verifier', true)) {
-               $erreur = $verifier($valeur, $options, $valeur_normalisee);
-       }
-
-       // On passe le tout dans le pipeline du meme nom
-       $erreur = pipeline(
-               'verifier',
-               array(
-                       'args' => array(
-                               'valeur' => $valeur,
-                               'type' => $type,
-                               'options' => $options,
-                       ),
-                       'data' => $erreur
-               )
-       );
-
-       return $erreur;
-}
-
-/**
- * Liste toutes les vérifications possibles
- *
- * @param string $repertoire
- *             Dans quel repertoire chercher les yaml.
- *
- * @return array Retourne un tableau listant les vérifications et leurs options
- */
-function verifier_lister_disponibles($repertoire = 'verifier') {
-       static $verifications = array();
-
-       if (!isset($verifications[$repertoire])) {
-               $verifications[$repertoire] = array();
-               $liste = find_all_in_path("$repertoire/", '.+[.]yaml$');
-
-               if (count($liste)) {
-                       foreach ($liste as $fichier => $chemin) {
-                               $type = preg_replace(',[.]yaml$,i', '', $fichier);
-                               $dossier = str_replace($fichier, '', $chemin);
-                               // On ne garde que les vérifications qui ont bien la fonction !
-                               if (charger_fonction($type, $repertoire, true)
-                                       and (
-                                               is_array($verif = verifier_charger_infos($type, $repertoire))
-                                       )
-                               ) {
-                                       $verifications[$repertoire][$type] = $verif;
-                               }
-                       }
-               }
-       }
-
-       return $verifications[$repertoire];
-}
-
-/**
- * Fonction de callback pour uasort()
- * Afin de trier selon le titre
- * @param array $array1 premier élèment
- * @param array $array2 second élèment
- * @return int 1,0,-1
- **/
-function verifier_trier_par_titre($array1,$array2) {
-       if (isset($array1['titre']) and isset($array2['titre'])) {
-               if ($array1['titre'] == $array2['titre']) {
-                       return 0;
-               } elseif ($array1['titre'] > $array2['titre']) {
-                       return 1;
-               } else {
-                       return -1;
-               }
-       } else {
-               return 0;
-       }
-}
-
-/**
- * Charger les informations contenues dans le yaml d'une vérification
- *
- * @param string $type_verif
- *             Le type de la vérification
- *
- * @param string $repertoire
- *             Dans quel repertoire chercher les yaml.
- *
- * @return array Un tableau contenant le YAML décodé
- */
-function verifier_charger_infos($type_verif, $repertoire = 'verifier') {
-       $verif = array();       
-
-       if (defined('_DIR_PLUGIN_YAML')) {
-               include_spip('inc/yaml');
-               $fichier = find_in_path("$repertoire/$type_verif.yaml");
-
-               $verif = yaml_decode_file($fichier);
-               if (is_array($verif)) {
-                       $verif['titre']       = (isset($verif['titre'])       and $verif['titre'])       ? _T_ou_typo($verif['titre']) : $type_verif;
-                       $verif['description'] = (isset($verif['description']) and $verif['description']) ? _T_ou_typo($verif['description']) : '';
-                       $verif['icone']       = (isset($verif['icone'])       and $verif['icone'])       ? _T_ou_typo($verif['icone']) : '';
-               }
-       }
-       return $verif;
-}
diff --git a/www/plugins/verifier/lang/paquet-verifier.xml b/www/plugins/verifier/lang/paquet-verifier.xml
deleted file mode 100644 (file)
index 0d45106..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<traduction module="paquet-verifier" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/" reference="fr">
-       <langue code="de" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=de" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=en" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=es" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=fr" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=fr_tu" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=nl" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=pt_br" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=ru" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=sk" total="3" traduits="3" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/verifier/lang/paquet-verifier_de.php b/www/plugins/verifier/lang/paquet-verifier_de.php
deleted file mode 100644 (file)
index 5d91bbf..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Stellt die Funktion<code>verifier($wert, $typ, $optionen, $normalisierter_wert)</code>bereit, mit der ein Werts auf Gültigkeit geprüft werden kann.',
-       'verifier_nom' => 'API Wertprüfung',
-       'verifier_slogan' => 'API zur Prüfung von Werten'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_en.php b/www/plugins/verifier/lang/paquet-verifier_en.php
deleted file mode 100644 (file)
index a42c469..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Provides a unique function <code>verifier($value, $type, $options,&$valeur_normalisee)</code> to test the validity of a value.',
-       'verifier_nom' => 'Control API',
-       'verifier_slogan' => 'A generic API to control a value'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_es.php b/www/plugins/verifier/lang/paquet-verifier_es.php
deleted file mode 100644 (file)
index 4afbec3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Proporciona una función única <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> para probar la validez de un valor',
-       'verifier_nom' => 'API de verificación',
-       'verifier_slogan' => 'Una API genérica para verificar un valor'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_fr.php b/www/plugins/verifier/lang/paquet-verifier_fr.php
deleted file mode 100644 (file)
index b9f5dd5..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Fournit une fonction unique <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> permettant de tester la validité d’une valeur.',
-       'verifier_nom' => 'API de vérification',
-       'verifier_slogan' => 'Une API générique pour vérifier une valeur'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_fr_tu.php b/www/plugins/verifier/lang/paquet-verifier_fr_tu.php
deleted file mode 100644 (file)
index 6d7e4eb..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Fournit une fonction unique <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> permettant de tester la validité d’une valeur.',
-       'verifier_nom' => 'API de vérification',
-       'verifier_slogan' => 'Une API générique pour vérifier une valeur'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_nl.php b/www/plugins/verifier/lang/paquet-verifier_nl.php
deleted file mode 100644 (file)
index 1721e71..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Levert de functie <code>verifier($waarde, $type, $opties, &$valeur_normalisee)</code> om de geldigheid van een waarde te controleren.',
-       'verifier_nom' => 'Verificatie API',
-       'verifier_slogan' => 'Een generieke API om een waarde te controleren'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_pt_br.php b/www/plugins/verifier/lang/paquet-verifier_pt_br.php
deleted file mode 100644 (file)
index 351125f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Fornece uma função única <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> que permite testar a validade de um valor.',
-       'verifier_nom' => 'API de verificação',
-       'verifier_slogan' => 'Uma API genérica para verificar um valor'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_ru.php b/www/plugins/verifier/lang/paquet-verifier_ru.php
deleted file mode 100644 (file)
index d9e4aad..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Позволяет использовать функцию <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> для проверки данных на соответствие заданному формату.',
-       'verifier_nom' => 'API для валидации данных (verifier)',
-       'verifier_slogan' => 'Плагин обеспечивает API для валидации данных. Необходим для работы многих плагинов.'
-);
diff --git a/www/plugins/verifier/lang/paquet-verifier_sk.php b/www/plugins/verifier/lang/paquet-verifier_sk.php
deleted file mode 100644 (file)
index 6b32215..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-verifier?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // V
-       'verifier_description' => 'Poskytuje jedinečnú funkciu <code>verifier($hodnota, $typ, $podmienky),</code> ktorá umožňuje otestovať platnosť hodnoty.',
-       'verifier_nom' => 'Aplikácia na overenie',
-       'verifier_slogan' => 'Spoločná aplikácia na overenie hodnoty'
-);
diff --git a/www/plugins/verifier/lang/verifier.xml b/www/plugins/verifier/lang/verifier.xml
deleted file mode 100644 (file)
index 4d4707e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<traduction module="verifier" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/" reference="fr">
-       <langue code="ca" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=ca" total="153" traduits="40" relire="0" modifs="8" nouveaux="105" pourcent="26.14">
-       </langue>
-       <langue code="de" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=de" total="153" traduits="70" relire="0" modifs="0" nouveaux="83" pourcent="45.75">
-               <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
-               <traducteur nom="Torsten Willmann" lien="https://trad.spip.net/auteur/torsten-willmann" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=en" total="153" traduits="153" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Benitron" lien="https://trad.spip.net/auteur/benitron" />
-               <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-               <traducteur nom="jack31" lien="https://trad.spip.net/auteur/jack31" />
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-               <traducteur nom="Mark" lien="https://trad.spip.net/auteur/mark" />
-               <traducteur nom="RastaPopoulos" lien="https://trad.spip.net/auteur/rastapopoulos" />
-               <traducteur nom="tcharlss" lien="https://trad.spip.net/auteur/drbouvierleduc" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=es" total="153" traduits="85" relire="0" modifs="11" nouveaux="57" pourcent="55.56">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-               <traducteur nom="tcharlss" lien="https://trad.spip.net/auteur/drbouvierleduc" />
-       </langue>
-       <langue code="fa" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=fa" total="153" traduits="72" relire="0" modifs="14" nouveaux="67" pourcent="47.06">
-               <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=fr" total="153" traduits="153" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=fr_tu" total="153" traduits="85" relire="0" modifs="10" nouveaux="58" pourcent="55.56">
-               <traducteur nom="beatnick" lien="https://trad.spip.net/auteur/beatnick" />
-               <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" />
-               <traducteur nom="RealET" lien="https://trad.spip.net/auteur/realet" />
-               <traducteur nom="stefdn" lien="https://trad.spip.net/auteur/stefdn" />
-       </langue>
-       <langue code="it" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=it" total="153" traduits="62" relire="0" modifs="8" nouveaux="83" pourcent="40.52">
-               <traducteur nom="Cap" lien="https://trad.spip.net/auteur/cap" />
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=nl" total="153" traduits="152" relire="0" modifs="1" nouveaux="0" pourcent="99.35">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=pt_br" total="153" traduits="107" relire="0" modifs="12" nouveaux="34" pourcent="69.93">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=ru" total="153" traduits="76" relire="0" modifs="10" nouveaux="67" pourcent="49.67">
-               <traducteur nom="nazar" lien="https://trad.spip.net/auteur/nazar" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/verifier?lang_cible=sk" total="153" traduits="117" relire="0" modifs="0" nouveaux="36" pourcent="76.47">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/verifier/lang/verifier_ca.php b/www/plugins/verifier/lang/verifier_ca.php
deleted file mode 100644 (file)
index aea15c1..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=ca
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_date' => 'El format de la data no és correcte.',
-       'erreur_email' => 'L’adreça de correu electrònic <em>@email@</em> no té un format vàlid.',
-       'erreur_email_nondispo' => 'L’adreça de correu electrònic <em>@email@</em> ja s’utilitza.',
-       'erreur_entier' => 'El valor ha de ser un nombre enter.',
-       'erreur_entier_entre' => 'El valor ha d’estar comprès entre @min@ i @max@.',
-       'erreur_entier_max' => 'El valor ha de ser inferior a @max@.', # MODIF
-       'erreur_entier_min' => 'El valor ha de ser superior a @min@.', # MODIF
-       'erreur_id_document' => 'Aquest identificador de document no és vàlid.',
-       'erreur_numerique' => 'El format del número no és vàlid.',
-       'erreur_regex' => 'El format de la cadena no és vàlida.',
-       'erreur_siren' => 'Número SIREN no vàlid.',
-       'erreur_siret' => 'Número SIRET no vàlid.',
-       'erreur_taille_egal' => 'El valor ha de tenir exactament @egal@ caràcters.', # MODIF
-       'erreur_taille_entre' => 'El valor ha d’estar comprès entre @min@ i @max@ caràcters.', # MODIF
-       'erreur_taille_max' => 'El valor ha de comprendre com a molt @max@ caràcters.', # MODIF
-       'erreur_taille_min' => 'El valor ha de tenir com a mínim @min@ caràcters.', # MODIF
-       'erreur_telephone' => 'El número no és vàlid.',
-       'erreur_url' => 'L’adreça no és vàlida.', # MODIF
-
-       // O
-       'option_email_disponible_label' => 'Adreça disponible',
-       'option_email_disponible_label_case' => 'Verificar que l’adreça no l’utilitzi ja un altre usuari',
-       'option_email_mode_5322' => 'Verificació la més compatible amb els estàndards disponibles ',
-       'option_email_mode_label' => 'Mitjà de verificació dels correus electrònics',
-       'option_email_mode_normal' => 'Verificació normal d’SPIP',
-       'option_email_mode_strict' => 'Verificació menys permissiva',
-       'option_entier_max_label' => 'Valor màxim',
-       'option_entier_min_label' => 'Valor mínim',
-       'option_regex_modele_label' => 'El valor ha de coincidir amb la màscara de la següent',
-       'option_siren_siret_mode_label' => 'Què voleu verificar?',
-       'option_siren_siret_mode_siren' => 'el SIREN',
-       'option_siren_siret_mode_siret' => 'el SIRET',
-       'option_taille_max_label' => 'Mida màxima',
-       'option_taille_min_label' => 'Mida mínima',
-
-       // T
-       'type_date' => 'Data',
-       'type_date_description' => 'Verifica que el valor és una data en format JJ/MM/AAAA. El separador és lliure (".", "/", etc.).',
-       'type_email' => 'Adreça de correu electrònic',
-       'type_email_description' => 'Verifica que el format de l’adreça de correu electrònica sigui correcte.',
-       'type_email_disponible' => 'Disponibilitat d’una adreça de correu electrònic',
-       'type_email_disponible_description' => 'Verifica que l’adreça de correu electrònica no sigui utilitzada ja per un altre usuari del sistema.',
-       'type_entier' => 'Número enter', # MODIF
-       'type_entier_description' => 'Verifica que el valor sigui un número enter, amb la possibilitat de restringir entre dos valors.',
-       'type_regex' => 'Expressió regular ',
-       'type_regex_description' => 'Verifica que el valor correspon a la màscara demanada. Per l’ús de màscares, aneu a <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l’ajuda en línia de PHP</a>.',
-       'type_siren_siret' => 'SIREN o SIRET',
-       'type_siren_siret_description' => 'Verifica queel valor és un número vàlid del <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> francès.',
-       'type_taille' => 'Mida',
-       'type_taille_description' => 'Verifica que la mida del valor correspon al mínim i/o al màxim demanat.',
-       'type_telephone' => 'Número de telèfon',
-       'type_telephone_description' => 'Verifica que el número de telèfon correspon a un esquema reconegut.'
-);
diff --git a/www/plugins/verifier/lang/verifier_de.php b/www/plugins/verifier/lang/verifier_de.php
deleted file mode 100644 (file)
index 0cf5504..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'Ungültige Postleitzahl',
-       'erreur_date' => 'Format des Datums ungültig',
-       'erreur_date_format' => 'Dieses Datumsformat wird nicht akzeptiert',
-       'erreur_decimal' => 'Der Wert muß einen Dezimalzahl sein',
-       'erreur_decimal_nb_decimales' => 'Die Zahl darf nicht mehr als @nb_decimales@ Nachkommastellen haben.',
-       'erreur_email' => 'Die Mailadresse  <em>@email@</em> hat einen Syntaxfehler.',
-       'erreur_email_nondispo' => 'Die Mailadresse <em>@email@</em>  wird bereits verwendet.',
-       'erreur_entier' => 'Der Wert muß eine ganze Zahl sein.',
-       'erreur_entier_entre' => 'Der Wert muß zwischen  @min@ und @max@ liegen.',
-       'erreur_entier_max' => 'Der Wert muss kleiner oder gleich @max@ sein.',
-       'erreur_entier_min' => 'Der Wert muss größer oder gleich @min@ sein.',
-       'erreur_id_document' => 'Diese Dokumenten-ID ist ungültig',
-       'erreur_numerique' => 'Zahlenformat ungültig',
-       'erreur_regex' => 'Zeichenkettenformat ungültig',
-       'erreur_siren' => 'SIREN Nummer ungültig',
-       'erreur_siret' => 'SIRET Nummer ungültig',
-       'erreur_taille_egal' => 'Der Wert muss exakt @egal@ Zeichen haben (momentan @nb@).',
-       'erreur_taille_entre' => 'Der Wert muss zwischen @min@ und @max@ Zeichen haben (momentan (@nb@).',
-       'erreur_taille_max' => 'Der Wert darf maximal @max@ Zeichen haben (momentan @nb@).',
-       'erreur_taille_min' => 'Der Wert muss mindestens @min@ Zeichen haben (momentan @nb@).',
-       'erreur_telephone' => 'Zahl ungültig',
-       'erreur_url' => 'Die Adresse <em>@url@</em> ist ungültig.',
-       'erreur_url_protocole' => 'Die eingegebene Adresse <em>(@url@)</em> muss mit @protocole@ beginnen.',
-       'erreur_url_protocole_exact' => 'Die eingegebene Adresse <em>(@url@)</em> beginnt nicht mit einem gültigen Protokoll (zum Beispiel http:// ).',
-
-       // O
-       'option_decimal_nb_decimales_label' => 'Dezimalstellen nach dem Komma',
-       'option_email_disponible_label' => 'Adresse verfügbar',
-       'option_email_disponible_label_case' => 'Überprüfen, ob die Adresse bereits verwendet wird.',
-       'option_email_mode_5322' => 'Streng standardgemäße Überprüfung',
-       'option_email_mode_label' => 'Art der Mailprüfung',
-       'option_email_mode_normal' => 'Normale SPIP-Prüfung',
-       'option_email_mode_strict' => 'Strengere Prüfung',
-       'option_entier_max_label' => 'Maximalwert',
-       'option_entier_min_label' => 'Minimalwert',
-       'option_regex_modele_label' => 'Der Wert muß mit der folgenden Maske übereinstimmen.',
-       'option_siren_siret_mode_label' => 'Was möchten sie überprüfen?',
-       'option_siren_siret_mode_siren' => 'SIREN (frz. Unternehmens ID)',
-       'option_siren_siret_mode_siret' => 'SIRET (frz. geographische Unternehmens ID)',
-       'option_taille_max_label' => 'Maximalgröße',
-       'option_taille_min_label' => 'Minimalgröße',
-       'option_url_mode_complet' => 'Vollständige Prüfung des URL',
-       'option_url_mode_label' => 'Art der URL-Prüfung',
-       'option_url_mode_php_filter' => 'Vollständige Prüfung des URL mit dem PHP-Filter FILTER_VALIDATE_URL',
-       'option_url_mode_protocole_seul' => 'Nur die Angabe eines Protokolls prüfen',
-       'option_url_protocole_label' => 'Names des überprüften Protokolls',
-       'option_url_type_protocole_exact' => 'Geben Sie hier ein Protokoll an:',
-       'option_url_type_protocole_ftp' => 'FTP-Protokolle: ftp oder sftp',
-       'option_url_type_protocole_label' => 'Typ des erforderlichen Protokolls',
-       'option_url_type_protocole_mail' => 'Mail-Protokolle: imap, pop3 oder smtp',
-       'option_url_type_protocole_tous' => 'Alle Protokolle werden akzeptiert',
-       'option_url_type_protocole_web' => 'Web-Protokolle: http oder https',
-
-       // T
-       'type_date' => 'Datum',
-       'type_date_description' => 'Überprüft den Wert auf das Datumsformat  JJ/MM/AAAA. Verschiedene Trenner sind möglich (".", "/", etc).',
-       'type_decimal' => 'Dezimalzahl',
-       'type_decimal_description' => 'Prüft ob der Wert eine Dezimalzahl ist und ermöglicht, einen Wertebereich und die Anzahl der Nachkommastellen festzulegen.',
-       'type_email' => 'Mailadresse',
-       'type_email_description' => 'Überprüft das Format der Mailadresse',
-       'type_email_disponible' => 'Verfügbarkeit einer Mailadresse',
-       'type_email_disponible_description' => 'Überprüft ob die Mailadresse bereits von einem anderen Nutzer des System verwendet wird.',
-       'type_entier' => 'Ganzzahl',
-       'type_entier_description' => 'Überprüft ob der Wert eine Ganzzahl ist; bietet die Möglichkeit, einen Bereich zwischen zwei Zahlen anzugeben.',
-       'type_regex' => 'Regulärer Ausdruck',
-       'type_regex_description' => 'Prüft ob der Wert mit der vorgegebenen Maske übereinstimmt. Zur Verwendung der Masken <a href="http://www.php.net/manual/de/reference.pcre.pattern.syntax.php">lesen sie bitte die PHP Dokumentation</a>.',
-       'type_siren_siret' => 'SIREN oder SIRET',
-       'type_siren_siret_description' => 'Prüft ob der Wert eine gültige Nummer des <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des Entreprises</a> ist.',
-       'type_taille' => 'Größe',
-       'type_taille_description' => 'Überprüft ob der Wert zum geforderten Minimal- oder Maximalwert paßt.',
-       'type_telephone' => 'Telefonnummer',
-       'type_telephone_description' => 'Prüft ob die Telefonnummer einem bekannten Schema entspricht.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Prüft ob der URL einem anerkannten Schema entspricht.'
-);
diff --git a/www/plugins/verifier/lang/verifier_en.php b/www/plugins/verifier/lang/verifier_en.php
deleted file mode 100644 (file)
index 5adc5a3..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // D
-       'data_choix' => 'Possible choices:',
-
-       // E
-       'erreur_code_postal' => 'This postcode is invalid.',
-       'erreur_comparaison_egal' => 'The value must be equal to the field "@nom_champ@"',
-       'erreur_comparaison_egal_type' => 'The value must be equal to and the same type as the field "@nom_champ@"',
-       'erreur_comparaison_grand' => 'The value must be greater than the field "@nom_champ@"',
-       'erreur_comparaison_grand_egal' => 'The value must be greater than or equal to the field "@nom_champ@"',
-       'erreur_comparaison_petit' => 'The value must be less than the field "@nom_champ@"',
-       'erreur_comparaison_petit_egal' => 'The value must be less than or equal to the field "@nom_champ@"',
-       'erreur_couleur' => 'The color code is invalid.',
-       'erreur_date' => 'The date is invalid.',
-       'erreur_date_format' => 'The date format is invalid.',
-       'erreur_decimal' => 'The value must be a decimal number.',
-       'erreur_decimal_nb_decimales' => 'The number must have more than @nb_decimales@ digits after the decimal point.',
-       'erreur_dimension_image' => 'The file "@name@" is too large: @taille@ (maximum @taille_max@).',
-       'erreur_email' => 'The email address <em>@email@</em> is not correctly formatted.',
-       'erreur_email_nondispo' => 'The email address <em>@email@</em> has already been used.',
-       'erreur_entier' => 'The value must be an integer.',
-       'erreur_entier_entre' => 'The value must be between @min@ and @max@.',
-       'erreur_entier_max' => 'The value must not be more than @max@.',
-       'erreur_entier_min' => 'The value must not be less than @min@.',
-       'erreur_heure' => 'The timetable specified does not exist.',
-       'erreur_heure_format' => 'The time format is not valid.',
-       'erreur_id_document' => 'This document identifier is not valid.',
-       'erreur_id_objet' => 'This identifier is not valid.',
-       'erreur_inconnue_generique' => 'The format is invalid.',
-       'erreur_isbn' => 'The ISBN number is not valid (ex: 978-2-1234-5680-3 or 2-1234-5680-X)',
-       'erreur_isbn_13_X' => 'Un numéro ISBN-13 ne peut pas se terminer par X.', # a 13 digits ISBN number must not end with an X.
-       'erreur_isbn_G' => 'Le premier segment doit être égal à 978 ou 979.', # the first segment must be 978 or 979.
-       'erreur_isbn_nb_caracteres' => 'the ISBN number must have 10 ou 13 caracters, not including the hyphens (curently @nb@).',
-       'erreur_isbn_nb_segments' => 'the ISBN number must have 4 or 5 segments (curently @nb@).',
-       'erreur_isbn_segment' => 'the segment "@segment@" has @nb@ exceeding caracter(s).',
-       'erreur_isbn_segment_lettre' => 'the segment "@segment@" must not have any letter.',
-       'erreur_numerique' => 'The number format is invalid.',
-       'erreur_objet' => 'This object is not valid.',
-       'erreur_php_file_1' => 'The file size "@name@" exceeds that allowed by the server',
-       'erreur_php_file_2' => 'The file size "@name@" exceeds that allowed by the form',
-       'erreur_php_file_3' => 'The file "@name@" was only partially downloaded',
-       'erreur_php_file_6' => 'A server error prevented sending the file "@name@"',
-       'erreur_php_file_7' => 'A server error prevented sending the file "@name@"',
-       'erreur_php_file_88' => 'A server error prevented sending the file "@name@"',
-       'erreur_regex' => 'The regex string is incorrectly formatted.',
-       'erreur_siren' => 'The SIREN number is invalid.',
-       'erreur_siret' => 'The SIRET number is invalid.',
-       'erreur_taille_egal' => 'The value must have exactly @egal@ characters (currently @nb@).',
-       'erreur_taille_entre' => 'The value must have between @min@ and @max@ characters (currently @nb@).',
-       'erreur_taille_fichier' => 'The file "@name@" is too large: @taille@ (maximum @taille_max@).',
-       'erreur_taille_max' => 'The value must have no more than @max@ characters (currently @nb@).',
-       'erreur_taille_min' => 'The value must have no less than @min@ characters (currently @nb@).',
-       'erreur_telephone' => 'The telephone number is invalid.',
-       'erreur_type_image' => 'The file "@name@" is not a web image.',
-       'erreur_type_non_autorise' => 'The file "@name@" is not of an authorised type.',
-       'erreur_url' => 'The URL address <em>@url@</em> is invalid.',
-       'erreur_url_protocole' => 'The address entered <em>(@url@)</em> must start with @protocole@',
-       'erreur_url_protocole_exact' => 'The address entered <em>(@url@)</em> does not start with a valid protocol (e.g. http://)',
-
-       // N
-       'normaliser_option_date' => 'Normalize the date?',
-       'normaliser_option_date_aucune' => 'No',
-       'normaliser_option_date_en_datetime' => '"Datetime" format (for SQL)',
-
-       // O
-       'option_code_postal_pays_explication' => 'Two-letter country code : FR, DZ, DE, etc.',
-       'option_code_postal_pays_label' => 'Country',
-       'option_comparaison_champ_champ_explication' => 'Field identifier (« name » attribute)',
-       'option_comparaison_champ_champ_label' => 'Field',
-       'option_comparaison_champ_comparaison_explication' => 'Type of comparison',
-       'option_comparaison_champ_comparaison_label' => 'Comparison',
-       'option_comparaison_champ_egal' => '== Equal',
-       'option_comparaison_champ_egal_type' => '=== Identical (same kind)',
-       'option_comparaison_champ_grand' => '> Greater than',
-       'option_comparaison_champ_grand_egal' => '>= Greater than or equal to ',
-       'option_comparaison_champ_nom_champ_explication' => 'Field name for human beings',
-       'option_comparaison_champ_nom_champ_label' => 'Field name',
-       'option_comparaison_champ_petit' => '< Less than',
-       'option_comparaison_champ_petit_egal' => '<= Less than or equal to',
-       'option_couleur_normaliser_label' => 'Normalize the color code?',
-       'option_couleur_type_hexa' => 'Color code in hexadecimal format',
-       'option_couleur_type_label' => 'Checking type to be made',
-       'option_decimal_nb_decimales_label' => 'Number of decimal places',
-       'option_decimal_separateur_explication' => 'The dot will be accepted in all cases.',
-       'option_decimal_separateur_label' => 'Decimal separator',
-       'option_email_disponible_label' => 'Available address',
-       'option_email_disponible_label_case' => 'Check that the address has not already be used by another user',
-       'option_email_mode_5322' => 'Check against the strictest standards available',
-       'option_email_mode_label' => 'Email checking mode',
-       'option_email_mode_normal' => 'Normal SPIP checking',
-       'option_email_mode_strict' => 'Less permissive checking',
-       'option_entier_max_label' => 'Maximum value',
-       'option_entier_min_label' => 'Minimum value',
-       'option_fichiers_dimension_autoriser_rotation_label' => 'Consider image rotation?',
-       'option_fichiers_dimension_autoriser_rotation_label_case' => 'Click to invert maximum length and height',
-       'option_fichiers_hauteur_max_label' => 'Maximum image height (in px)',
-       'option_fichiers_largeur_max_label' => 'Maximum image width (in px)',
-       'option_fichiers_mime_image_web_label' => 'Allow only web images (gif, jpg, png)',
-       'option_fichiers_mime_label' => 'Mime type and extension',
-       'option_fichiers_mime_pas_de_verification_label' => 'Allow all types and extensions (not recommended)',
-       'option_fichiers_mime_specifique_label' => 'Allow only the types and extensions checked below',
-       'option_fichiers_mime_tout_mime_label' => 'Allow all Mime types and known extensions of SPIP',
-       'option_fichiers_taille_max_label' => 'Maximum image weight (in kB)',
-       'option_fichiers_type_mime_label' => 'Select the allowed MIME types',
-       'option_id_objet_objet_label' => 'Object name (singular)',
-       'option_regex_modele_label' => 'The value must match the following expression',
-       'option_siren_siret_mode_label' => 'What do you verify?',
-       'option_siren_siret_mode_siren' => 'SIREN number',
-       'option_siren_siret_mode_siret' => 'SIRET number',
-       'option_taille_max_label' => 'Maximum size',
-       'option_taille_min_label' => 'Minimum size',
-       'option_url_mode_complet' => 'Full verification of the URL',
-       'option_url_mode_label' => 'URL verification mode',
-       'option_url_mode_php_filter' => 'Full URL verification using the PHP filter FILTER_VALIDATE_URL',
-       'option_url_mode_protocole_seul' => 'Verification of the existence of a protocol only',
-       'option_url_protocole_label' => 'Name of the protocol to be verified',
-       'option_url_type_protocole_exact' => 'Enter a protocol below:',
-       'option_url_type_protocole_ftp' => 'File transfer protocols: FTP or SFTP',
-       'option_url_type_protocole_label' => 'Type of protocol to be verified',
-       'option_url_type_protocole_mail' => 'Mail protocols: IMAP, POP3 or SMTP',
-       'option_url_type_protocole_tous' => 'All accepted protocols',
-       'option_url_type_protocole_web' => 'Web protocols: HTTP or HTTPS',
-       'option_url_type_protocole_webcal' => 'Webcal protocols: webcal, http ou https',
-
-       // P
-       'par_defaut' => 'By default:',
-       'plugin_yaml_inactif' => 'The YAML plugin is not present and/or activated. It is necessary to see this page of documentation.',
-
-       // T
-       'titre_page_verifier_doc' => 'Documentation of the Verification API',
-       'type_code_postal' => 'Postal code',
-       'type_code_postal_description' => 'Check that the value is a valid postal code.',
-       'type_comparaison_champ' => 'Comparison',
-       'type_comparaison_champ_description' => 'Compare the value with another field from _request().',
-       'type_couleur' => 'Colour',
-       'type_couleur_description' => 'Check if the value is a color code.',
-       'type_date' => 'Date',
-       'type_date_description' => 'Check that the value is date in the DD/MM/YYYY format. The separator character can be anything (".", "/", etc).',
-       'type_decimal' => 'Decimal number',
-       'type_decimal_description' => 'Check that the value is a decimal number, with options to restrict the value to a given range and to specify the required number of decmial places.',
-       'type_email' => 'Email address',
-       'type_email_description' => 'Check that the email address is correctly formatted.',
-       'type_email_disponible' => 'Availability of an email address',
-       'type_email_disponible_description' => 'Check that the email address has not already been used by another system user.',
-       'type_entier' => 'Integer',
-       'type_entier_description' => 'Check that the value is an integer, with the option of being restricted between two range values.',
-       'type_fichiers' => 'File properties',
-       'type_fichiers_description' => 'Check certain properties of each loaded file',
-       'type_id_document' => 'Document number',
-       'type_id_document_description' => 'Check that the value matches an existing document number.',
-       'type_id_objet' => 'Obejct number',
-       'type_id_objet_description' => 'Verify that the value corresponds with an existing object value.',
-       'type_isbn' => 'ISBN',
-       'type_isbn_description' => 'Check that the value is a 10 or 13 digits long ISBN',
-       'type_regex' => 'Regular expression',
-       'type_regex_description' => 'Check that the value matches the defined expression. For more information on using regular expressions, please refer to <a href="http://fr2.php.net/manual/en/reference.pcre.pattern.syntax.php">the online PHP help</a>.',
-       'type_siren_siret' => 'SIREN or SIRET',
-       'type_siren_siret_description' => 'Check that the value is a valid number from the French <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> (Company Registry ID System).',
-       'type_taille' => 'Size',
-       'type_taille_description' => 'Check that the size of the value corresponds to the minimum and/or maximum specified.',
-       'type_telephone' => 'Telephone number',
-       'type_telephone_description' => 'Check that the telephone number matches a recognised telephone number format.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Verify that the URL matches a recognised format.',
-
-       // V
-       'verification_a_faire' => 'Verification to perform:'
-);
diff --git a/www/plugins/verifier/lang/verifier_es.php b/www/plugins/verifier/lang/verifier_es.php
deleted file mode 100644 (file)
index ddc561f..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'Este código postal es incorrecto',
-       'erreur_comparaison_egal' => 'El valor debe ser igual al campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_egal_type' => 'El valor debe ser igual y del mismo tipo que el campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand' => 'El valor debe ser superior al campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand_egal' => 'El valor debe ser superior o igual al campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit' => 'El valor debe ser inferior al campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit_egal' => 'El valor debe ser inferior o igual al campo "@nom_champ@"', # MODIF
-       'erreur_couleur' => 'El código color no es válido.',
-       'erreur_date' => 'La fecha no es válida',
-       'erreur_date_format' => 'No se acepta este formato de fecha.',
-       'erreur_decimal' => 'El valor debe ser un número decimal.',
-       'erreur_decimal_nb_decimales' => 'El número no debe tener más de @nb_decimales@ cifras tras la coma.',
-       'erreur_email' => 'La dirección de correo electrónico <em>@email@</em> no tiene un formato válido.',
-       'erreur_email_nondispo' => 'La dirección de correo electrónico <em>@email@</em> ya está en uso.',
-       'erreur_entier' => 'El valor debe ser un número entero.',
-       'erreur_entier_entre' => 'El valor deber ser entre @min@ y @max@.',
-       'erreur_entier_max' => 'El valor debe ser inferior a @max@.', # MODIF
-       'erreur_entier_min' => 'El valor debe ser superior a @min@.', # MODIF
-       'erreur_heure' => 'El horario indicado no existe.',
-       'erreur_heure_format' => 'El formato de la hora no es válido.',
-       'erreur_id_document' => 'Este identificador de documento no es válido.',
-       'erreur_inconnue_generique' => 'El formato no es correcto.',
-       'erreur_isbn' => 'El número ISBN no es válido (ejemplo: 978-2-1234-5680-3 o 2-1234-5680-X)', # MODIF
-       'erreur_isbn_13_X' => 'Un número ISBN-13 no puede terminar por X.',
-       'erreur_isbn_G' => 'El primer segmento debe ser igual a 978 o 979.',
-       'erreur_isbn_nb_caracteres' => 'El número ISBN debe tener 10 o 13 caracteres, sin contar los guiones (actualmente @nb@).',
-       'erreur_isbn_nb_segments' => 'El número ISBN debe tener 4 o 5 segmentos (actualmente @nb@).',
-       'erreur_isbn_segment' => 'El segmento "@segment@" tiene @nb@ cifra(s) como mucho.',
-       'erreur_isbn_segment_lettre' => 'El segmento "@segment@" no debe contener letras.',
-       'erreur_numerique' => 'El formato del número no es válido.',
-       'erreur_regex' => 'El formato de la cadena no es válido.',
-       'erreur_siren' => 'Este número de SIREN no es válido.',
-       'erreur_siret' => 'El número de SIRET no es válido.',
-       'erreur_taille_egal' => 'El valor debe tener exactamente @egal@ caracteres (actualmente @nb@).',
-       'erreur_taille_entre' => 'El valor debe tener entre @min@ y @max@ caracteres (actualmente @nb@).',
-       'erreur_taille_max' => 'El valor debe tener como máximo @max@ caracteres (actualmente @nb@).',
-       'erreur_taille_min' => 'El valor debe tener como mínimo @min@ caracteres (actualmente @nb@).',
-       'erreur_telephone' => 'El número no es válido.',
-       'erreur_url' => 'La dirección <em>@url@</em> no es válida.',
-       'erreur_url_protocole' => 'La dirección ingresada <em>(@url@)</em> debe comenzar por @protocole@', # MODIF
-       'erreur_url_protocole_exact' => 'La dirección ingresada <em>(@url@)</em> no comienza por un protocolo válido (http:// por ejemplo)', # MODIF
-
-       // N
-       'normaliser_option_date' => '¿Normalizar la fecha?',
-       'normaliser_option_date_aucune' => 'No',
-       'normaliser_option_date_en_datetime' => 'En formato «Datetime» (para SQL)',
-
-       // O
-       'option_code_postal_pays_explication' => 'Two-letters country code: FR, DZ, DE, etc.',
-       'option_couleur_normaliser_label' => '¿Normalizar el código color?',
-       'option_couleur_type_hexa' => 'Código color en formato hexadecimal',
-       'option_couleur_type_label' => 'Tipo de verificación a efectuar',
-       'option_decimal_nb_decimales_label' => 'Número de decimales tras la coma',
-       'option_email_disponible_label' => 'Dirección disponible',
-       'option_email_disponible_label_case' => 'Verifique que la dirección no sea usada por otra persona.',
-       'option_email_mode_5322' => 'La verificación más conforme a los estándares existentes',
-       'option_email_mode_label' => 'Modo de comprobación de las direcciones de correo electrónico',
-       'option_email_mode_normal' => 'Comprobación normal de SPIP',
-       'option_email_mode_strict' => 'Comprobación no tan permisiva',
-       'option_entier_max_label' => 'Valor máximo',
-       'option_entier_min_label' => 'Valor mínimo',
-       'option_regex_modele_label' => 'El valor debe corresponder al patrón siguiente',
-       'option_siren_siret_mode_label' => '¿Qué quiere comprobar?',
-       'option_siren_siret_mode_siren' => 'el SIREN',
-       'option_siren_siret_mode_siret' => 'el SIRET',
-       'option_taille_max_label' => 'Tamaño máximo',
-       'option_taille_min_label' => 'Tamaño mínimo',
-       'option_url_mode_complet' => 'Verificación completa de la url',
-       'option_url_mode_label' => 'Modo de verificación de las urls',
-       'option_url_mode_php_filter' => 'Verificación completa de la url a través del filtro FILTER_VALIDATE_URL de php',
-       'option_url_mode_protocole_seul' => 'Verificación únicamente de la presencia de un protocolo',
-       'option_url_protocole_label' => 'Nombre del protocolo a verificar',
-       'option_url_type_protocole_exact' => 'Ingresar un protocolo a continuación:',
-       'option_url_type_protocole_ftp' => 'Protocolos ftp: ftp o sftp',
-       'option_url_type_protocole_label' => 'Tipo de protocolo a verificar',
-       'option_url_type_protocole_mail' => 'Protocolos mail: imap, pop3 o smtp',
-       'option_url_type_protocole_tous' => 'Todos los protocolos aceptados',
-       'option_url_type_protocole_web' => 'Protocolos web: http o https',
-
-       // T
-       'type_couleur' => 'Color',
-       'type_couleur_description' => 'Verifica que el valor es un código color.',
-       'type_date' => 'Fecha',
-       'type_date_description' => 'Comprueba que el valor es una fecha con el formato DD/MM/AAAA. El separador no importa (".", "/", etc).',
-       'type_decimal' => 'Número decimal',
-       'type_decimal_description' => 'Verifica que el valor es un número decimal, con la posibilidad de restringir entre diez valores y de precisar el número de decimales tras la coma.',
-       'type_email' => 'Dirección de correo electrónico',
-       'type_email_description' => 'Comprueba que la dirección de correo electrónico tiene el formato correcto.',
-       'type_email_disponible' => 'Disponibilidad de una dirección de correo electrónico',
-       'type_email_disponible_description' => 'Comprueba que la dirección de correo electrónico no está usada por otro usuario del sistema.',
-       'type_entier' => 'Número entero',
-       'type_entier_description' => 'Comprueba que el valor es un número entero, con la posibilidad de restringir entre dos valores.',
-       'type_regex' => 'Expresión regular',
-       'type_regex_description' => 'Comprueba que el valor corresponda al patrón indicado. Para el uso de los patrones, refiérase a <a href="http://php.net/manual/es/reference.pcre.pattern.syntax.php">la documentación en línea de PHP</a>.',
-       'type_siren_siret' => 'SIREN o SIRET',
-       'type_siren_siret_description' => 'Comprueba que el valor es un número valido del <a href="http://fr.wikipedia.org/wiki/SIREN">Sistema de Identificación del Directorio de las Empresas</a> francés.',
-       'type_taille' => 'Tamaño',
-       'type_taille_description' => 'Comprueba que el tamaño del valor corresponde al mínimo y/o al máximo indicado.',
-       'type_telephone' => 'Número de teléfono',
-       'type_telephone_description' => 'Comprueba que el número de teléfono corresponde a un patrón reconocido.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Verifica que la url corresponde a un patrón conocido.'
-);
diff --git a/www/plugins/verifier/lang/verifier_fa.php b/www/plugins/verifier/lang/verifier_fa.php
deleted file mode 100644 (file)
index 2c76473..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'اين كد پستي درست نيست.',
-       'erreur_comparaison_egal' => 'اين مقدار بايد با ميدان"@nom_champ@"  مساوي باشد', # MODIF
-       'erreur_comparaison_egal_type' => 'اين مقدار بايد با نوع مقدار ميدان  "@nom_champ@" مساوي و يكي باشد', # MODIF
-       'erreur_comparaison_grand' => 'اين مقدار بايد از ميدان"@nom_champ@" بالاتر باشد', # MODIF
-       'erreur_comparaison_grand_egal' => 'اين مقدار بايد از مقدار ميدانِ "@nom_champ@"بالاتر يا مساوي باشد', # MODIF
-       'erreur_comparaison_petit' => 'اين مقدار بايد از مقدار ميدان"@nom_champ@"  پائين‌تر باشد', # MODIF
-       'erreur_comparaison_petit_egal' => 'اين مقدار بايد از مقدار ميدان "@nom_champ@"پائين‌تر يا با آن مساوي باشد', # MODIF
-       'erreur_couleur' => 'كد رنگ معتبر نيست.',
-       'erreur_date' => 'تاريخ معتبر نيست.',
-       'erreur_date_format' => 'فرمت تاريخ قبول نيست.',
-       'erreur_decimal' => 'مقدار بايد يك عدد اعشاري باشد.',
-       'erreur_decimal_nb_decimales' => 'رقم نمي‌تواند بيش از @nb_decimales@ اعشار داشته باشد.',
-       'erreur_email' => 'نشاني ايميل <em>@email@</em> درست فرمت‌ بندي نشده. ',
-       'erreur_email_nondispo' => 'نشاني ايميل <em>@email@</em> پيشتر استفاده شده.',
-       'erreur_entier' => 'مقدار بايد يك عدد صحيح باشد.',
-       'erreur_entier_entre' => 'مقدار بايد بين @min@ و @max@.',
-       'erreur_entier_max' => 'مقدار بايد كم‌تر از @max@ باشد.', # MODIF
-       'erreur_entier_min' => 'مقدار بايد بيشتر از @min@ باشد.', # MODIF
-       'erreur_id_document' => 'اين شناسه‌ي سند معتبر نيست.',
-       'erreur_inconnue_generique' => 'فرمت صحيح نيست',
-       'erreur_numerique' => 'فرمت عدد معتبر نيست.',
-       'erreur_regex' => 'فرمت رشته معتبر نيست.',
-       'erreur_siren' => 'فرمت SIREN معتبر نيست.',
-       'erreur_siret' => 'شماره SIRET معتبر نيست. ',
-       'erreur_taille_egal' => 'مقدار بايد دقيقاً كاراكتر‌هاي @egal@ داشته باشد.', # MODIF
-       'erreur_taille_entre' => 'مقدار بايد بين @min@ و @max@ كاراكتر داشته باشد. ', # MODIF
-       'erreur_taille_max' => 'مقدار نبايد بيش از @max@ كاراكتر داشته باشد.', # MODIF
-       'erreur_taille_min' => 'اين مقدار نبايد كم‌تر از @min@ كارآكتر داشته باشد.', # MODIF
-       'erreur_telephone' => 'اين شماره معتبر نيست.',
-       'erreur_url' => 'نشاني <em>@url@</em> معتبر نيست',
-       'erreur_url_protocole' => 'نشاني وارد شده <em>(@url@)</em> doit بايد با @protocole@ آغاز شود. ', # MODIF
-       'erreur_url_protocole_exact' => 'نشاني وارد شده <em>(@url@)</em> با يك پروتكل معتبر (http:// مانند)شروع نمي‌شود', # MODIF
-
-       // N
-       'normaliser_option_date' => 'عادي‌سازي داده‌؟',
-       'normaliser_option_date_aucune' => 'خير',
-       'normaliser_option_date_en_datetime' => 'با فرمت «تاريخ‌زمان» (براي اس‌كيو‌ال)',
-
-       // O
-       'option_couleur_normaliser_label' => 'عادي سازي كد رنگ؟',
-       'option_couleur_type_hexa' => 'كد رنگ با فرمت هگزادسيمال',
-       'option_couleur_type_label' => 'نوع تأييد براي اجرا',
-       'option_decimal_nb_decimales_label' => 'تعداد اعشارها بعد از مميز',
-       'option_email_disponible_label' => 'نشاني در دسترس',
-       'option_email_disponible_label_case' => 'چك كنيد كه كاربر ديگر اين نشاني را استفاده نكرده باشد',
-       'option_email_mode_5322' => 'چك كنيد كه معتبرترين استانداردها در دسترس باشد',
-       'option_email_mode_label' => 'حالت چك كردن ايميل‌ها',
-       'option_email_mode_normal' => 'چك كردن معمولي اسپيپ ',
-       'option_email_mode_strict' => 'چك كردن آسان‌گيرانه‌تر',
-       'option_entier_max_label' => 'بيشترين مقدار',
-       'option_entier_min_label' => 'كمر‌ترين مقدار ',
-       'option_regex_modele_label' => 'مقدار بايد با عبارت بعدي جور باشد',
-       'option_siren_siret_mode_label' => 'مي‌خواهيد تأييد كنيد؟ ',
-       'option_siren_siret_mode_siren' => 'شماره «نظام ملي اطلاعات فهرست بنگاه‌ها» (به فرانسه SIREN)',
-       'option_siren_siret_mode_siret' => 'شماره «نظام ملي فهرست بنگاه‌ها و مؤسسات» (سرواژه‌ي فرانسه آن: SIRET)',
-       'option_taille_max_label' => 'بيشترين اندازه',
-       'option_taille_min_label' => 'كم‌ترين اندازه',
-       'option_url_mode_complet' => 'چك كامل يو.آر.ال',
-       'option_url_mode_label' => 'حالت چك كردن يو.آر.ال ها',
-       'option_url_mode_php_filter' => 'چك كامل يو.آر.ال از طريق فيلتر FILTER_VALIDATE_URL  پي.اچ.پي',
-       'option_url_mode_protocole_seul' => 'چك كردن انحصاري وجود يك پروتكل ',
-       'option_url_protocole_label' => 'نام پروتكل براي چك كردن',
-       'option_url_type_protocole_exact' => 'يك پروتكل در زير وارد كنيد:',
-       'option_url_type_protocole_ftp' => 'پروتكل‌هاي انتقال پرونده: ftp  يا sftp ',
-       'option_url_type_protocole_label' => 'نوع پروتكل براي چك كردن',
-       'option_url_type_protocole_mail' => 'پروتكل‌هاي نامه‌ الكترونيكي: imap, pop3  يا smtp',
-       'option_url_type_protocole_tous' => 'تمام پروتكل‌هاي مورد قبول ',
-       'option_url_type_protocole_web' => 'پروتكل‌هاي وب: http يا https',
-
-       // T
-       'type_couleur' => 'رنگ',
-       'type_couleur_description' => 'تأييد مقداري كه يك كد رنگ است ',
-       'type_date' => 'تاريخ',
-       'type_date_description' => 'چك كنيد كه فرمت تاريخ اين باشد: س‌س‌س‌س/م‌م/رر. مميز آزاد است («.»، «/»، و غيره).',
-       'type_decimal' => 'شماره‌ي اعشاري',
-       'type_decimal_description' => 'چك كنيد كه مقدار يك رغم اعشاري باشد، با امكان محدود كردن دو مقدار و تعيين اعشار بعد از مميز.',
-       'type_email' => 'نشاني ايميل ',
-       'type_email_description' => 'چك كنيد كه نشاني ايميل فرمت درست داشته باشد.',
-       'type_email_disponible' => 'دسترس‌‌بودگي نشاني ايميل',
-       'type_email_disponible_description' => 'چك كنيد كه نشاني ايميل از سوي كاربر ديگر سامانه استفاده نشده باشد.',
-       'type_entier' => 'عدد صحيح',
-       'type_entier_description' => 'چك كنيد كه مقدار يك عدد صحيح باشد،‌ با گزينه‌ي محدوديت بين دو مقدار.',
-       'type_regex' => 'عبارت عادي',
-       'type_regex_description' => '<چك كنيد كه مقدار با عبارت خواسته شد جور باشد. براي اطلاعات بيشتر در مورد استفاده از عبارت درخواست شده به اينجا رجوع كنيد: <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l’aide en ligne de PHP</a>.',
-       'type_siren_siret' => 'شماره‌ي نظام ملي اطلاعات فهرست بنگاه‌ها يا شماره‌ي ملي فهرست بنگاه‌ها و تأسيسات (سرواژه به فرانسه:SIREN ياSIRET)',
-       'type_siren_siret_description' => 'چك كنيد كه مقدار يك شماره‌ي معتبر است <a href="http://fr.wikipedia.org/wiki/SIREN">نظامل اطلاعات بنگاه‌ها به فرانسه s</a> .',
-       'type_taille' => 'اندازه',
-       'type_taille_description' => 'چك كنيد كه اندازه‌ي مقدار با بيشترين و/يا كم‌ترين مقدار درخواستي جور باشد.',
-       'type_telephone' => 'شماره تلفن',
-       'type_telephone_description' => 'چك كنيد كه شماره‌ي تلفن با فرمت شماره‌ي تلفن جور باشد.',
-       'type_url' => 'يو.آر.ال ',
-       'type_url_description' => 'چك كنيد كه يو.آر.ال با يك فرمت شناخته شده جور باشد. '
-);
diff --git a/www/plugins/verifier/lang/verifier_fr.php b/www/plugins/verifier/lang/verifier_fr.php
deleted file mode 100644 (file)
index 0552f26..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // D
-       'data_choix' => 'Choix possibles :',
-
-       // E
-       'erreur_code_postal' => 'Ce code postal est incorrect.',
-       'erreur_comparaison_egal' => 'La valeur doit être égale au champ "@nom_champ@".',
-       'erreur_comparaison_egal_type' => 'La valeur doit être égale et de même type que le champ "@nom_champ@".',
-       'erreur_comparaison_grand' => 'La valeur doit être supérieure au champ "@nom_champ@".',
-       'erreur_comparaison_grand_egal' => 'La valeur doit être supérieure ou égale au champ "@nom_champ@".',
-       'erreur_comparaison_petit' => 'La valeur doit être inférieure au champ "@nom_champ@".',
-       'erreur_comparaison_petit_egal' => 'La valeur doit être inférieure ou égale au champ "@nom_champ@".',
-       'erreur_couleur' => 'Le code couleur n’est pas valide.',
-       'erreur_date' => 'La date n’est pas valide.',
-       'erreur_date_format' => 'Le format de la date n’est pas accepté.',
-       'erreur_decimal' => 'La valeur doit être un nombre décimal.',
-       'erreur_decimal_nb_decimales' => 'Le nombre ne doit pas avoir plus de @nb_decimales@ chiffres après la virgule.',
-       'erreur_dimension_image' => 'Le fichier « @name@ » est trop grand : @taille@ (maximum @taille_max@).',
-       'erreur_email' => 'L’adresse de courriel <em>@email@</em> n’a pas un format valide.',
-       'erreur_email_nondispo' => 'L’adresse de courriel <em>@email@</em> est déjà utilisée.',
-       'erreur_entier' => 'La valeur doit être un entier.',
-       'erreur_entier_entre' => 'La valeur doit être comprise entre @min@ et @max@.',
-       'erreur_entier_max' => 'La valeur doit être inférieure ou égale à @max@.',
-       'erreur_entier_min' => 'La valeur doit être supérieure ou égale à @min@.',
-       'erreur_heure' => 'L’horaire indiqué n’existe pas.',
-       'erreur_heure_format' => 'Le format de l’heure n’est pas accepté.',
-       'erreur_id_document' => 'Cet identifiant de document n’est pas valide.',
-       'erreur_id_objet' => 'Cet identifiant n’est pas valide.',
-       'erreur_inconnue_generique' => 'Le format n’est pas correct.',
-       'erreur_isbn' => 'Le numéro ISBN n’est pas valide (ex : 978-2-1234-5680-3 ou 2-1234-5680-X).',
-       'erreur_isbn_13_X' => 'Un numéro ISBN-13 ne peut pas se terminer par X.',
-       'erreur_isbn_G' => 'Le premier segment doit être égal à 978 ou 979.',
-       'erreur_isbn_nb_caracteres' => 'Le numéro ISBN doit comprendre 10 ou 13 caractères, sans compter les tirets (actuellement @nb@).',
-       'erreur_isbn_nb_segments' => 'Le numéro ISBN doit comprendre 4 ou 5 segments (actuellement @nb@).',
-       'erreur_isbn_segment' => 'Le segment "@segment@" comprend @nb@ chiffre(s) en trop.',
-       'erreur_isbn_segment_lettre' => 'Le segment "@segment@" ne doit pas contenir de lettre.',
-       'erreur_numerique' => 'Le format du nombre n’est pas valide.',
-       'erreur_objet' => 'Cet objet n’est pas valide.',
-       'erreur_php_file_1' => 'La taille du fichier « @name@ » dépasse celle permise par le serveur',
-       'erreur_php_file_2' => 'La taille du fichier « @name@ » dépasse celle permise par le formulaire',
-       'erreur_php_file_3' => 'Le fichier « @name@ » n’a été que partiellement téléchargé',
-       'erreur_php_file_6' => 'Une erreur du serveur a empêché l’envoi du fichier « @name@ »',
-       'erreur_php_file_7' => 'Une erreur du serveur a empêché l’envoi du fichier « @name@ »',
-       'erreur_php_file_88' => 'Une erreur du serveur a empêché l’envoi du fichier « @name@ »',
-       'erreur_regex' => 'Le format de la chaîne n’est pas valide.',
-       'erreur_siren' => 'Le numéro de SIREN n’est pas valide.',
-       'erreur_siret' => 'Le numéro de SIRET n’est pas valide.',
-       'erreur_taille_egal' => 'La valeur doit comprendre exactement @egal@ caractères (actuellement @nb@).',
-       'erreur_taille_entre' => 'La valeur doit comprendre entre @min@ et @max@ caractères (actuellement @nb@).',
-       'erreur_taille_fichier' => 'Le fichier « @name@ » est trop lourd : @taille@ (maximum @taille_max@).',
-       'erreur_taille_max' => 'La valeur doit comprendre au maximum @max@ caractères (actuellement @nb@).',
-       'erreur_taille_min' => 'La valeur doit comprendre au minimum @min@ caractères (actuellement @nb@).',
-       'erreur_telephone' => 'Le numéro n’est pas valide.',
-       'erreur_type_image' => 'Le fichier « @name@ » n’est pas une image web.',
-       'erreur_type_non_autorise' => 'Le fichier « @name@ » n’est pas d’un type autorisé.',
-       'erreur_url' => 'L’adresse <em>@url@</em> n’est pas valide.',
-       'erreur_url_protocole' => 'L’adresse saisie <em>(@url@)</em> doit commencer par @protocole@.',
-       'erreur_url_protocole_exact' => 'L’adresse saisie <em>(@url@)</em> ne commence pas par un protocole valide (http:// par exemple).',
-
-       // N
-       'normaliser_option_date' => 'Normaliser la date ?',
-       'normaliser_option_date_aucune' => 'Non',
-       'normaliser_option_date_en_datetime' => 'Au format « Datetime » (pour SQL)',
-
-       // O
-       'option_code_postal_pays_explication' => 'Code à 2 chiffres d’un pays : FR, DZ, DE, etc.',
-       'option_code_postal_pays_label' => 'Pays',
-       'option_comparaison_champ_champ_explication' => 'Identifiant du champ (attribut « name »)',
-       'option_comparaison_champ_champ_label' => 'Champ',
-       'option_comparaison_champ_comparaison_explication' => 'Type de comparaison à effectuer',
-       'option_comparaison_champ_comparaison_label' => 'Comparaison',
-       'option_comparaison_champ_egal' => '== Égal',
-       'option_comparaison_champ_egal_type' => '=== Identique (même type)',
-       'option_comparaison_champ_grand' => '> Plus grand',
-       'option_comparaison_champ_grand_egal' => '>= Plus grand ou égal',
-       'option_comparaison_champ_nom_champ_explication' => 'Nom du champ pour les humains',
-       'option_comparaison_champ_nom_champ_label' => 'Nom du champ',
-       'option_comparaison_champ_petit' => '< Plus petit',
-       'option_comparaison_champ_petit_egal' => '<= Plus petit ou égal',
-       'option_couleur_normaliser_label' => 'Normaliser le code couleur ?',
-       'option_couleur_type_hexa' => 'Code couleur au format héxadécimal',
-       'option_couleur_type_label' => 'Type de vérification à effectuer',
-       'option_decimal_nb_decimales_label' => 'Nombre de décimales après la virgule',
-       'option_decimal_separateur_explication' => 'Le point sera accepté dans tous les cas.',
-       'option_decimal_separateur_label' => 'Séparateur de décimal',
-       'option_email_disponible_label' => 'Adresse disponible',
-       'option_email_disponible_label_case' => 'Vérifier que l’adresse n’est pas déjà utilisée par un utilisateur',
-       'option_email_mode_5322' => 'Vérification la plus conforme aux standards disponibles',
-       'option_email_mode_label' => 'Mode de vérification des courriels',
-       'option_email_mode_normal' => 'Vérification normale de SPIP',
-       'option_email_mode_strict' => 'Vérification moins permissive',
-       'option_entier_max_label' => 'Valeur maximum',
-       'option_entier_min_label' => 'Valeur minimum',
-       'option_fichiers_dimension_autoriser_rotation_label' => 'Tenir compte d’une rotation de l’image ?',
-       'option_fichiers_dimension_autoriser_rotation_label_case' => 'Cocher cette case pour pouvoir intervertir largeur et hauteur maximum',
-       'option_fichiers_hauteur_max_label' => 'Hauteur maximum de l’image (en px)',
-       'option_fichiers_largeur_max_label' => 'Largeur maximum de l’image (en px)',
-       'option_fichiers_mime_image_web_label' => 'Autoriser uniquement les images web (gif, jpg, png)',
-       'option_fichiers_mime_label' => 'Type Mime et extension',
-       'option_fichiers_mime_pas_de_verification_label' => 'Autoriser tous les types et extensions (déconseillé)',
-       'option_fichiers_mime_specifique_label' => 'Autoriser  uniquement les types et extensions cochées ci-dessous',
-       'option_fichiers_mime_tout_mime_label' => 'Autoriser tous les types Mime et extensions connues de SPIP',
-       'option_fichiers_taille_max_label' => 'Poids maximum du fichier (en kio)',
-       'option_fichiers_type_mime_label' => 'Cocher les types MIME autorisés',
-       'option_id_objet_objet_label' => 'Nom de l’objet (au singulier)',
-       'option_regex_modele_label' => 'La valeur doit correspondre au masque suivant',
-       'option_siren_siret_mode_label' => 'Que voulez-vous vérifier ?',
-       'option_siren_siret_mode_siren' => 'le SIREN',
-       'option_siren_siret_mode_siret' => 'le SIRET',
-       'option_taille_max_label' => 'Taille maximum',
-       'option_taille_min_label' => 'Taille minimum',
-       'option_url_mode_complet' => 'Vérification complète de l’url',
-       'option_url_mode_label' => 'Mode de vérification des urls',
-       'option_url_mode_php_filter' => 'Vérification complète de l’url via le filtre FILTER_VALIDATE_URL de php',
-       'option_url_mode_protocole_seul' => 'Vérification uniquement de la présence d’un protocole',
-       'option_url_protocole_label' => 'Nom du protocole à vérifier',
-       'option_url_type_protocole_exact' => 'Saisir un protocole ci-dessous :',
-       'option_url_type_protocole_ftp' => 'Protocoles ftp: ftp ou sftp',
-       'option_url_type_protocole_label' => 'Type de protocole à vérifier',
-       'option_url_type_protocole_mail' => 'Protocoles mail : imap, pop3 ou smtp',
-       'option_url_type_protocole_tous' => 'Tous protocoles acceptés',
-       'option_url_type_protocole_web' => 'Protocoles web : http ou https',
-       'option_url_type_protocole_webcal' => 'Protocoles webcal: webcal, http ou https',
-
-       // P
-       'par_defaut' => 'Par défaut :',
-       'plugin_yaml_inactif' => 'Le plugin YAML n‘est pas présent et/ou activé. Il est nécessaire pour voir cette page de documentation.',
-
-       // T
-       'titre_page_verifier_doc' => 'Documentation de l’API de vérification',
-       'type_code_postal' => 'Code postal',
-       'type_code_postal_description' => 'Vérifie que la valeur est un code postal valide.',
-       'type_comparaison_champ' => 'Comparaison',
-       'type_comparaison_champ_description' => 'Compare la valeur avec un autre champ du _request().',
-       'type_couleur' => 'Couleur',
-       'type_couleur_description' => 'Vérifie que la valeur est un code couleur.',
-       'type_date' => 'Date',
-       'type_date_description' => 'Vérifie que la valeur est une date au format JJ/MM/AAAA. Le séparateur est libre (&quot;.&quot;, &quot;/&quot;, etc).',
-       'type_decimal' => 'Nombre décimal',
-       'type_decimal_description' => 'Vérifie que la valeur est un nombre décimal, avec la possibilité de restreindre entre deux valeurs et de préciser le nombre de décimales après la virgule.',
-       'type_email' => 'Adresse de courriel',
-       'type_email_description' => 'Vérifie que l’adresse de courriel a un format correct.',
-       'type_email_disponible' => 'Disponibilité d’une adresse de courriel',
-       'type_email_disponible_description' => 'Vérifie que l’adresse de courriel n’est pas déjà utilisé par un autre utilisateur du système.',
-       'type_entier' => 'Nombre entier',
-       'type_entier_description' => 'Vérifie que la valeur est un entier, avec la possibilité de restreindre entre deux valeurs.',
-       'type_fichiers' => 'Propriétés de fichier',
-       'type_fichiers_description' => 'Pour chaque fichier chargé, vérifier certaines propriétés',
-       'type_id_document' => 'Numéro d’un document',
-       'type_id_document_description' => 'Vérifie que la valeur correspond à un numéro de document existant.',
-       'type_id_objet' => 'Numéro d’un objet',
-       'type_id_objet_description' => 'Vérifie que la valeur correspond à un numéro d’objet existant.',
-       'type_isbn' => 'Numéro ISBN',
-       'type_isbn_description' => 'Vérifie que la valeur correspond à un numéro ISBN à 10 ou 13 chiffres.',
-       'type_regex' => 'Expression régulière',
-       'type_regex_description' => 'Vérifie que la valeur correspond au masque demandé. Pour l’utilisation des masques, reportez-vous à <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l’aide en ligne de PHP</a>.',
-       'type_siren_siret' => 'SIREN ou SIRET',
-       'type_siren_siret_description' => 'Vérifie que la valeur est un numéro valide du <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> français.',
-       'type_taille' => 'Taille',
-       'type_taille_description' => 'Vérifie que la taille de la valeur correspond au minimum et/ou au maximum demandé.',
-       'type_telephone' => 'Numéro de téléphone',
-       'type_telephone_description' => 'Vérifie que le numéro de téléphone correspond à un schéma reconnu.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Vérifie que l’url correspond à un schéma reconnu.',
-
-       // V
-       'verification_a_faire' => 'Vérification à effectuer :'
-);
diff --git a/www/plugins/verifier/lang/verifier_fr_tu.php b/www/plugins/verifier/lang/verifier_fr_tu.php
deleted file mode 100644 (file)
index 3ef3a8c..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=fr_tu
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'Ce code postal est incorrect.',
-       'erreur_comparaison_egal' => 'La valeur doit être égale au champ "@nom_champ@".',
-       'erreur_comparaison_egal_type' => 'La valeur doit être égale et de même type que le champ "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand' => 'La valeur doit être supérieure au champ "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand_egal' => 'La valeur doit être supérieure ou égale au champ "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit' => 'La valeur doit être inférieure au champ "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit_egal' => 'La valeur doit être inférieure ou égale au champ "@nom_champ@"', # MODIF
-       'erreur_couleur' => 'Le code couleur n’est pas valide.',
-       'erreur_date' => 'La date n’est pas valide.',
-       'erreur_date_format' => 'Le format de la date n’est pas accepté.',
-       'erreur_decimal' => 'La valeur doit être un nombre décimal.',
-       'erreur_decimal_nb_decimales' => 'Le nombre ne doit pas avoir plus de @nb_decimales@ chiffres après la virgule.',
-       'erreur_email' => '@email@</em> n’a pas un format valide.',
-       'erreur_email_nondispo' => 'L’adresse de courriel <em>@email@</em> est déjà utilisée.',
-       'erreur_entier' => 'La valeur doit être un entier.',
-       'erreur_entier_entre' => 'La valeur doit être comprise entre @min@ et @max@.',
-       'erreur_entier_max' => 'La valeur doit être inférieure à @max@.', # MODIF
-       'erreur_entier_min' => 'La valeur doit être supérieure à @min@.', # MODIF
-       'erreur_heure' => 'L’horaire indiquée n’existe pas.',
-       'erreur_heure_format' => 'Le format de l’heure n’est pas accepté.',
-       'erreur_id_document' => 'Cet identifiant de document n’est pas valide.',
-       'erreur_inconnue_generique' => 'Le format n’est pas correct.',
-       'erreur_isbn' => 'Le numéro ISBN n’est pas valide (ex : 978-2-1234-5680-3 ou 2-1234-5680-X)', # MODIF
-       'erreur_isbn_13_X' => 'Un numéro ISBN-13 ne peut pas se terminer par X.',
-       'erreur_isbn_G' => 'Le premier segment doit être égal à 978 ou 979.',
-       'erreur_isbn_nb_caracteres' => 'Le numéro ISBN doit comprendre 10 ou 13 caractères, sans compter les tirets (actuellement @nb@).',
-       'erreur_isbn_nb_segments' => 'Le numéro ISBN doit comprendre 4 ou 5 segments (actuellement @nb@).',
-       'erreur_isbn_segment' => 'Le segment "@segment@" comprend @nb@ chiffre(s) en trop.',
-       'erreur_isbn_segment_lettre' => 'Le segment "@segment@" ne doit pas contenir de lettre.',
-       'erreur_numerique' => 'Le format du nombre n’est pas valide.',
-       'erreur_regex' => 'Le format de la chaîne n’est pas valide.',
-       'erreur_siren' => 'Le numéro de SIREN n’est pas valide.',
-       'erreur_siret' => 'Le numéro de SIRET n’est pas valide.',
-       'erreur_taille_egal' => 'La valeur doit comprendre exactement @egal@ caractères (actuellement @nb@).',
-       'erreur_taille_entre' => 'La valeur doit comprendre entre @min@ et @max@ caractères (actuellement @nb@).',
-       'erreur_taille_max' => 'La valeur doit comprendre au maximum @max@ caractères (actuellement @nb@).',
-       'erreur_taille_min' => 'La valeur doit comprendre au minimum @min@ caractères (actuellement @nb@).',
-       'erreur_telephone' => 'Le numéro n’est pas valide.',
-       'erreur_url' => 'L’adresse <em>@url@</em> n’est pas valide.',
-       'erreur_url_protocole' => 'L’adresse saisie <em>(@url@)</em> doit commencer par @protocole@', # MODIF
-       'erreur_url_protocole_exact' => 'L’adresse saisie <em>(@url@)</em> ne commence pas par un protocole valide (http:// par exemple)', # MODIF
-
-       // N
-       'normaliser_option_date' => 'Normaliser la date ?',
-       'normaliser_option_date_aucune' => 'Non',
-       'normaliser_option_date_en_datetime' => 'Au format « Datetime » (pour SQL)',
-
-       // O
-       'option_couleur_normaliser_label' => 'Normaliser le code couleur ?',
-       'option_couleur_type_hexa' => 'Code couleur au format héxadécimal',
-       'option_couleur_type_label' => 'Type de vérification à effectuer',
-       'option_decimal_nb_decimales_label' => 'Nombre de décimales après la virgule',
-       'option_email_disponible_label' => 'Adresse disponible',
-       'option_email_disponible_label_case' => 'Vérifier que l’adresse n’est pas déjà utilisée par un utilisateur',
-       'option_email_mode_5322' => 'Vérification la plus conforme aux standards disponibles',
-       'option_email_mode_label' => 'Mode de vérification des courriels',
-       'option_email_mode_normal' => 'Vérification normale de SPIP',
-       'option_email_mode_strict' => 'Vérification moins permissive',
-       'option_entier_max_label' => 'Valeur maximum',
-       'option_entier_min_label' => 'Valeur minimum',
-       'option_regex_modele_label' => 'La valeur doit correspondre au masque suivant',
-       'option_siren_siret_mode_label' => 'Que veux-tu vérifier ?',
-       'option_siren_siret_mode_siren' => 'le SIREN',
-       'option_siren_siret_mode_siret' => 'le SIRET',
-       'option_taille_max_label' => 'Taille maximum',
-       'option_taille_min_label' => 'Taille minimum',
-       'option_url_mode_complet' => 'Vérification complète de l’url',
-       'option_url_mode_label' => 'Mode de vérification des urls',
-       'option_url_mode_php_filter' => 'Vérification complète de l’url via le filtre FILTER_VALIDATE_URL de php',
-       'option_url_mode_protocole_seul' => 'Vérification uniquement de la présence d’un protocole',
-       'option_url_protocole_label' => 'Nom du protocole à vérifier',
-       'option_url_type_protocole_exact' => 'Saisir un protocole ci-dessous :',
-       'option_url_type_protocole_ftp' => 'Protocoles ftp: ftp ou sftp',
-       'option_url_type_protocole_label' => 'Type de protocole à vérifier',
-       'option_url_type_protocole_mail' => 'Protocoles mail : imap, pop3 ou smtp',
-       'option_url_type_protocole_tous' => 'Tous protocoles acceptés',
-       'option_url_type_protocole_web' => 'Protocoles web : http ou https',
-
-       // T
-       'type_couleur' => 'Couleur',
-       'type_couleur_description' => 'Vérifie que la valeur est un code couleur.',
-       'type_date' => 'Date',
-       'type_date_description' => 'Vérifie que la valeur est une date au format JJ/MM/AAAA. Le séparateur est libre (".", "/", etc).',
-       'type_decimal' => 'Nombre décimal',
-       'type_decimal_description' => 'Vérifie que la valeur est un nombre décimal, avec la possibilité de restreindre entre deux valeurs et de préciser le nombre de décimales après la virgule.',
-       'type_email' => 'Adresse de courriel',
-       'type_email_description' => 'Vérifie que l’adresse de courriel a un format correct.',
-       'type_email_disponible' => 'Disponibilité d’une adresse de courriel',
-       'type_email_disponible_description' => 'Vérifie que l’adresse de courriel n’est pas déjà utilisé par un autre utilisateur du système.',
-       'type_entier' => 'Nombre entier',
-       'type_entier_description' => 'Vérifie que la valeur est un entier, avec la possibilité de restreindre entre deux valeurs.',
-       'type_regex' => 'Expression régulière',
-       'type_regex_description' => 'Vérifie que la valeur correspond au masque demandé. Pour l’utilisation des masques, reporte-toi à <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l’aide en ligne de PHP</a>.',
-       'type_siren_siret' => 'SIREN ou SIRET',
-       'type_siren_siret_description' => 'Vérifie que la valeur est un numéro valide du <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> français.',
-       'type_taille' => 'Taille',
-       'type_taille_description' => 'Vérifie que la taille de la valeur correspond au minimum et/ou au maximum demandé.',
-       'type_telephone' => 'Numéro de téléphone',
-       'type_telephone_description' => 'Vérifie que le numéro de téléphone correspond à un schéma reconnu.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Vérifie que l’url correspond à un schéma reconnu.'
-);
diff --git a/www/plugins/verifier/lang/verifier_it.php b/www/plugins/verifier/lang/verifier_it.php
deleted file mode 100644 (file)
index 21a4450..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=it
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'Il CAP non è corretto.',
-       'erreur_date' => 'La data non è valida.',
-       'erreur_date_format' => 'Il formato della data non è corretto.',
-       'erreur_decimal' => 'Il valore deve essere un numero decimale.',
-       'erreur_decimal_nb_decimales' => 'Il numero non deve avere più di @nb_decimales@ cifre dopo la virgola.',
-       'erreur_email' => 'L’indirizzo di posta <em>@email@</em> non ha un formato valido.',
-       'erreur_email_nondispo' => 'L’indirizzo di posta <em>@email@</em> è già utilizzato.',
-       'erreur_entier' => 'Il valore deve essere un numero intero.',
-       'erreur_entier_entre' => 'Il valore deve essere compreso tra @min@ e @max@.',
-       'erreur_entier_max' => 'Il valore deve essere minore di @max@.', # MODIF
-       'erreur_entier_min' => 'Il valore deve essere maggiore di @min@.', # MODIF
-       'erreur_id_document' => 'L’id del documento non è valido.',
-       'erreur_numerique' => 'Il formato del numero non è valido.',
-       'erreur_regex' => 'Il formato non è valido.',
-       'erreur_siren' => 'Il numero di SIREN non è valido.',
-       'erreur_siret' => 'Il numero di SIRET non è valido.',
-       'erreur_taille_egal' => 'Il valore deve avere esattamente @egal@ caratteri.', # MODIF
-       'erreur_taille_entre' => 'Il valore deve avere da @min@ a @max@ caratteri.', # MODIF
-       'erreur_taille_max' => 'Il valore deve avere al massimo @max@ caratteri.', # MODIF
-       'erreur_taille_min' => 'Il valore deve avere minimo @min@ caratteri.', # MODIF
-       'erreur_telephone' => 'Il numero non è valido.',
-       'erreur_url' => 'L’indirizzo <em>@url@</em> non è valido.',
-       'erreur_url_protocole' => 'L’indirizzo inserito <em>(@url@)</em> deve cominciare con @protocole@', # MODIF
-       'erreur_url_protocole_exact' => 'L’indirizzo inserito <em>(@url@)</em> non comincia con un protocollo valido (http:// ad esempio)', # MODIF
-
-       // O
-       'option_decimal_nb_decimales_label' => 'Numero di decimali dopo la virgola',
-       'option_email_disponible_label' => 'Indirizzo disponibile',
-       'option_email_disponible_label_case' => 'Verifica che l’indirizzo non sia già stato utilizzato da un utente',
-       'option_email_mode_5322' => 'Verifica rispetto agli standard disponibili',
-       'option_email_mode_label' => 'Modalità di verifica delle email',
-       'option_email_mode_normal' => 'Verifica normale di SPIP',
-       'option_email_mode_strict' => 'Verifica meno permissiva',
-       'option_entier_max_label' => 'Valore massimo',
-       'option_entier_min_label' => 'Valore minimo',
-       'option_regex_modele_label' => 'Il valore deve corrispondere alla seguente maschera',
-       'option_siren_siret_mode_label' => 'Cosa vuoi verificare?',
-       'option_siren_siret_mode_siren' => 'il SIREN',
-       'option_siren_siret_mode_siret' => 'il SIRET',
-       'option_taille_max_label' => 'Dimensione massima',
-       'option_taille_min_label' => 'Dimensione minima',
-       'option_url_mode_complet' => 'Verifica completa dell’url',
-       'option_url_mode_label' => 'Modalità di verifica dell’url',
-       'option_url_mode_php_filter' => 'Verifica completa dell’url grazie al filtro FILTER_VALIDATE_URL di php',
-       'option_url_mode_protocole_seul' => 'Verifica solo la presenza di un protocollo',
-       'option_url_protocole_label' => 'Nome del protocollo da verificare',
-       'option_url_type_protocole_exact' => 'Inserisci un protocollo qui sotto:',
-       'option_url_type_protocole_ftp' => 'Protocolli ftp : ftp o sftp',
-       'option_url_type_protocole_label' => 'Tipo di protocollo da verificare',
-       'option_url_type_protocole_mail' => 'Protocolli mail: imap, pop3 o smtp',
-       'option_url_type_protocole_tous' => 'Tutti i protocolli accettati',
-       'option_url_type_protocole_web' => 'Protocolli web: http o https',
-
-       // T
-       'type_date' => 'Data',
-       'type_date_description' => 'Verifica che il valore sia una data nel formato GG/MM/AAAA. Il separatore è libero (";", "/", ecc).',
-       'type_decimal' => 'Numero decimale',
-       'type_decimal_description' => 'Verifica che il valore sia un numero decimale, con la possibilità di restringerlo ad un intervallo tra due valori e di specificare il numero di cifre decimali dopo la virgola.',
-       'type_email' => 'Indirizzo di posta elettronica',
-       'type_email_description' => 'Verifica che l’indirizzo di posta abbia un formato corretto.',
-       'type_email_disponible' => 'Disponibilità di un indirizzo di posta elettronica',
-       'type_email_disponible_description' => 'Verifica che l’indirizzo di posta elettronica non sia già utilizzato da un altro utente del sistema.',
-       'type_entier' => 'Numero intero',
-       'type_entier_description' => 'Verifica che il valore sia un numero intero, con la possibilità di restringerlo ad un intervallo tra due valori.',
-       'type_regex' => 'Espressione regolare',
-       'type_regex_description' => 'Verifica che il valore corrisponda alla maschera richiesta. Per l’utilizzo delle maschere, riferisciti all’<a href="http://it.php.net/manual/en/reference.pcre.pattern.syntax.php">aiuto in linea di PHP</a>.',
-       'type_siren_siret' => 'SIREN o SIRET',
-       'type_siren_siret_description' => 'Verifica che il valore sia un numero valido di <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> francese.',
-       'type_taille' => 'Dimensione',
-       'type_taille_description' => 'Verifica che la dimensione del valore corrisponda ad un minimo e/o ad un massimo richiesto.',
-       'type_telephone' => 'Numero telefonico',
-       'type_telephone_description' => 'Verifica che il numero telefonico corrisponda ad uno schema riconosciuto.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Verifica che l’url corrisponda ad uno schema riconosciuto.'
-);
diff --git a/www/plugins/verifier/lang/verifier_nl.php b/www/plugins/verifier/lang/verifier_nl.php
deleted file mode 100644 (file)
index 347ef3d..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // D
-       'data_choix' => 'Mogelijke keuzes:',
-
-       // E
-       'erreur_code_postal' => 'Deze postcode is ongeldig.',
-       'erreur_comparaison_egal' => 'De waarde moet gelijk zijn aan het veld "@nom_champ@"',
-       'erreur_comparaison_egal_type' => 'De waarde moet gelijk zijn aan en hetzelfde type hebben als het veld "@nom_champ@"',
-       'erreur_comparaison_grand' => 'De waarde moet groter zijn dan het veld "@nom_champ@"',
-       'erreur_comparaison_grand_egal' => 'De waarde moet gelijk zijn aan of groter zijn dan het veld "@nom_champ@"',
-       'erreur_comparaison_petit' => 'De waarde moet kleiner zijn dan het veld "@nom_champ@"',
-       'erreur_comparaison_petit_egal' => 'De waarde moet gelijk zijn aan of kleiner zijn dan het veld "@nom_champ@"',
-       'erreur_couleur' => 'De kleurcode is ongeldig.',
-       'erreur_date' => 'De datum is ongeldig.',
-       'erreur_date_format' => 'Het datumformaat is ongeldig.',
-       'erreur_decimal' => 'De waarde moet een decimaal getal zijn.',
-       'erreur_decimal_nb_decimales' => 'Het getal moet meer dan @nb_decimales@ decimalen na de punt hebben.',
-       'erreur_dimension_image' => 'Het bestand "@name@" is te groot: @taille@ (maximum @taille_max@).',
-       'erreur_email' => 'Het e-mailadres <em>@email@</em> is niet correct geformatteerd.',
-       'erreur_email_nondispo' => 'Het e-mailadres <em>@email@</em> werd al gebruikt.',
-       'erreur_entier' => 'De waarde moet een geheel getal zijn.',
-       'erreur_entier_entre' => 'De waarde moet liggen tussen @min@ en @max@.',
-       'erreur_entier_max' => 'De waarde mag niet groter zijn dan @max@.',
-       'erreur_entier_min' => 'De waarde mag niet kleiner zijn dan @min@.',
-       'erreur_heure' => 'De vermelde tijd bestaat niet.',
-       'erreur_heure_format' => 'Het tijdformaat is niet geldig.',
-       'erreur_id_document' => 'Deze document-identificatie is niet geldig.',
-       'erreur_id_objet' => 'Deze identificatie is ongeldig.',
-       'erreur_inconnue_generique' => 'Het formaat is ongeldig.',
-       'erreur_isbn' => 'De ISBN code is niet geldig (bv: 978-2-1234-5680-3 of 2-1234-5680-X)',
-       'erreur_isbn_13_X' => 'Een ISBN-13 code kan niet eindigen met een X.',
-       'erreur_isbn_G' => 'Het eerste segment moet gelijk zijn aan 978 of 979.',
-       'erreur_isbn_nb_caracteres' => 'de ISBN code moet 10 of 13 tekens bevatten (momenteel @nb@), de streepjes niet meegeteld.',
-       'erreur_isbn_nb_segments' => 'de ISBN code moet uit 4 of 5 segmenten bestaan (momenteel @nb@).',
-       'erreur_isbn_segment' => 'het segment "@segment@" heeft @nb@ teveel teken(s).',
-       'erreur_isbn_segment_lettre' => 'het segment "@segment@" mag geen letters bevatten.',
-       'erreur_numerique' => 'Het nummerformaat is ongeldig.',
-       'erreur_objet' => 'Dit object is niet geldig.',
-       'erreur_php_file_1' => 'Het bestand "@name@" is de groot voor de server',
-       'erreur_php_file_2' => 'Het bestand "@name@" is de groot voor het formulier',
-       'erreur_php_file_3' => 'Het bestand "@name@" is slechts gedeeltelijk geladen',
-       'erreur_php_file_6' => 'Door een fout van de server kan het bestand "@name@" niet worden verzonden',
-       'erreur_php_file_7' => 'Door een fout van de server kan het bestand "@name@" niet worden verzonden',
-       'erreur_php_file_88' => 'Door een fout van de server kan het bestand "@name@" niet worden verzonden',
-       'erreur_regex' => 'De regex string is incorrect geformatteerd.',
-       'erreur_siren' => 'Het SIREN nummer is ongeldig.',
-       'erreur_siret' => 'Het SIRET number is ongeldig.',
-       'erreur_taille_egal' => 'De waarde moet uit exact @egal@ tekens bestaan (momenteel @nb@).',
-       'erreur_taille_entre' => 'De waarde moet tussen de @min@ en @max@ tekens bevatten (momenteel @nb@).',
-       'erreur_taille_fichier' => 'Het bestand "@name@" is te groot: @taille@ (maximum @taille_max@).',
-       'erreur_taille_max' => 'De waarde mag niet meer dan @max@ tekens bevatten (momenteel @nb@).',
-       'erreur_taille_min' => 'De waarde moet minimaal @min@ ctekens bevatten (momenteel @nb@).',
-       'erreur_telephone' => 'Het telefoonnummer is ongeldig.',
-       'erreur_type_image' => 'Het bestand "@name@" is geen webafbeelding.',
-       'erreur_type_non_autorise' => 'Het bestand "@name@" is niet van een toegestaan type.',
-       'erreur_url' => 'Het URL-adres <em>@url@</em> is ongeldig.',
-       'erreur_url_protocole' => 'Het ingevoerde adres <em>(@url@)</em> moet beginnen met @protocole@',
-       'erreur_url_protocole_exact' => 'Het ingevoerde adres <em>(@url@)</em> begint niet met een geldig protocol (bv. http://)',
-
-       // N
-       'normaliser_option_date' => 'De datum normaliseren?',
-       'normaliser_option_date_aucune' => 'Nee',
-       'normaliser_option_date_en_datetime' => '"Datetime" formaat (voor SQL)',
-
-       // O
-       'option_code_postal_pays_explication' => 'Tweeletterige landcode: FR, DE, NL, enz.',
-       'option_code_postal_pays_label' => 'Land',
-       'option_comparaison_champ_champ_explication' => 'Veld identificatie («name» attribuut)',
-       'option_comparaison_champ_champ_label' => 'Veld',
-       'option_comparaison_champ_comparaison_explication' => 'Soort vergelijking',
-       'option_comparaison_champ_comparaison_label' => 'Vergelijking',
-       'option_comparaison_champ_egal' => '== Gelijk',
-       'option_comparaison_champ_egal_type' => '=== Identiek (zelfde soort)',
-       'option_comparaison_champ_grand' => '> Groter dan',
-       'option_comparaison_champ_grand_egal' => '>= Groter dan of gelijk aan ',
-       'option_comparaison_champ_nom_champ_explication' => 'Veldnaam voor mensen',
-       'option_comparaison_champ_nom_champ_label' => 'Veldnaam',
-       'option_comparaison_champ_petit' => '< Kleiner dan',
-       'option_comparaison_champ_petit_egal' => '<= Kleiner dan of gelijk aan',
-       'option_couleur_normaliser_label' => 'De kleurcode normaliseren?',
-       'option_couleur_type_hexa' => 'Kleurcode in hexadecimaal formaat',
-       'option_couleur_type_label' => 'Uit te voeren type verificatie',
-       'option_decimal_nb_decimales_label' => 'Aantal decimale plaatsen',
-       'option_decimal_separateur_explication' => 'Een punt wordt altijd toegestaan.',
-       'option_decimal_separateur_label' => 'Scheidingsteken voor decimalen',
-       'option_email_disponible_label' => 'Beschikbaar adres',
-       'option_email_disponible_label_case' => 'Controleer of het adres niet al door een andere gebruiker wordt gebruikt',
-       'option_email_mode_5322' => 'Controleer tegen de meest stricte beschikbare standaard',
-       'option_email_mode_label' => 'Email verificatiemethode',
-       'option_email_mode_normal' => 'Normale SPIP verificatie',
-       'option_email_mode_strict' => 'Minder tolerante verificatie',
-       'option_entier_max_label' => 'Maximum waarde',
-       'option_entier_min_label' => 'Minimum waarde',
-       'option_fichiers_dimension_autoriser_rotation_label' => 'Rekening houden met rotatie van de afbeelding?',
-       'option_fichiers_dimension_autoriser_rotation_label_case' => 'Aankruisen om maximale hoogte en breedte om te wisselen',
-       'option_fichiers_hauteur_max_label' => 'Maximale hoogte van de afbeelding (in px)',
-       'option_fichiers_largeur_max_label' => 'Maximale breedte van de afbeelding (in px)',
-       'option_fichiers_mime_image_web_label' => 'Uitsluitend webafbeelding (gif, jpg, png) toestaan', # MODIF
-       'option_fichiers_mime_label' => 'Mime type en extensie',
-       'option_fichiers_mime_pas_de_verification_label' => 'Alle types en extensies toestaan (wordt afgeraden)',
-       'option_fichiers_mime_specifique_label' => 'Uitsluitend de hieronder aangegeven Mime types autoriseren',
-       'option_fichiers_mime_tout_mime_label' => 'Alle door SPIP toegelaten Mime types autoriseren',
-       'option_fichiers_taille_max_label' => 'Maximale bestandsgrootte (in kB)',
-       'option_fichiers_type_mime_label' => 'Kruis de toelaten MIME types aan',
-       'option_id_objet_objet_label' => 'Naam van het object (in enkelvoud)',
-       'option_regex_modele_label' => 'De waarde moet met de volgende expressie overeen komen',
-       'option_siren_siret_mode_label' => 'Wat controleer je?',
-       'option_siren_siret_mode_siren' => 'SIREN nummer',
-       'option_siren_siret_mode_siret' => 'SIRET nummer',
-       'option_taille_max_label' => 'Maximum grootte',
-       'option_taille_min_label' => 'Minimum grootte',
-       'option_url_mode_complet' => 'Volledige verificatie van de URL',
-       'option_url_mode_label' => 'URL verificatiemethode',
-       'option_url_mode_php_filter' => 'Volledige URL verificatie met het PHP filter FILTER_VALIDATE_URL',
-       'option_url_mode_protocole_seul' => 'Uitsluitend verificatie van het protocol',
-       'option_url_protocole_label' => 'Naam van het te verifiëren protocol',
-       'option_url_type_protocole_exact' => 'Geef hieronder een protocol aan:',
-       'option_url_type_protocole_ftp' => 'File transfer protocols: FTP of SFTP',
-       'option_url_type_protocole_label' => 'Te verifiëren type protocol',
-       'option_url_type_protocole_mail' => 'Mail protocols: IMAP, POP3 of SMTP',
-       'option_url_type_protocole_tous' => 'Alle toegelaten protocols',
-       'option_url_type_protocole_web' => 'Web protocols: HTTP of HTTPS',
-       'option_url_type_protocole_webcal' => 'Webcal protocols: webcal, http of https',
-
-       // P
-       'par_defaut' => 'Standaard:',
-       'plugin_yaml_inactif' => 'Plugin YAML is niet aanwezig en/of actief. Deze is benodigd om deze bladzijde van de documentatie te tonen.',
-
-       // T
-       'titre_page_verifier_doc' => 'Documentatie van de verificatie-API',
-       'type_code_postal' => 'Postcode',
-       'type_code_postal_description' => 'Controleer of de waarde een geldige postcode is.',
-       'type_comparaison_champ' => 'Vergelijking',
-       'type_comparaison_champ_description' => 'Vergelijk de waarde met een ander veld uit _request().',
-       'type_couleur' => 'Kleur',
-       'type_couleur_description' => 'Controleer of de waarde een kleurcode is.',
-       'type_date' => 'Datum',
-       'type_date_description' => 'Controleer of de waarde een datum is in formaat DD/MM/YYYY. Het scheidingsteken kan van alles zijn (".", "/", enz).',
-       'type_decimal' => 'Decimaal getal',
-       'type_decimal_description' => 'Controleer of de waarde een decimaal getal is, met opties voor een bepaalde reeks en het aaantal decimale plaatsen.',
-       'type_email' => 'E-mailadres',
-       'type_email_description' => 'Controleer of het e-mailadres juist is geformatteerd.',
-       'type_email_disponible' => 'Beschikbaarheid van een e-mailadres',
-       'type_email_disponible_description' => 'Controleer of het e-mailadres niet al door een andere systeemgebruiker wordt gebruikt.',
-       'type_entier' => 'Geheel getal',
-       'type_entier_description' => 'Controleer of de waarde een geheel getal is, met de optie van een bepaalde reeks.',
-       'type_fichiers' => 'Eigenschappen van het bestand',
-       'type_fichiers_description' => 'Controleer bepaalde eigenschappen voor ieder opgeladen bestand',
-       'type_id_document' => 'Documentnummer',
-       'type_id_document_description' => 'Controleer of de waarde met een bestaand documentnummer overeen komt.',
-       'type_id_objet' => 'Nummer van een object',
-       'type_id_objet_description' => 'Controleer dat de waarde overeen komt met die van een bestaand object.',
-       'type_isbn' => 'ISBN',
-       'type_isbn_description' => 'Controleer of de waarde een 10 of 13 teks lange ISBN code is',
-       'type_regex' => 'Regular expression',
-       'type_regex_description' => 'Controleer of de waarde met de expressie overeen komt.',
-       'type_siren_siret' => 'SIREN or SIRET',
-       'type_siren_siret_description' => 'Check that the value is a valid number from the French <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> (Company Registry ID System).',
-       'type_taille' => 'Grootte',
-       'type_taille_description' => 'Controleer of de grootte van de waarde binnen een bepaald minimum en/of maximum valt.',
-       'type_telephone' => 'Telefoonnumber',
-       'type_telephone_description' => 'Controleer of het telefoonnummer met een herkend formaat overeen komt.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Controleer of de URL een herkend formaat heeft.',
-
-       // V
-       'verification_a_faire' => 'Uit te voeren verificatie:'
-);
diff --git a/www/plugins/verifier/lang/verifier_pt_br.php b/www/plugins/verifier/lang/verifier_pt_br.php
deleted file mode 100644 (file)
index bc13541..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'Este Cep está incorreto.',
-       'erreur_comparaison_egal' => 'O valor deve ser igual ao campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_egal_type' => 'O valor deve ser igual e do mesmo tipo que o campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand' => 'O valor deve ser superior ao campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand_egal' => 'O valor deve ser superior ou igual ao campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit' => 'O valor deve ser inferior ao campo "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit_egal' => 'O valor deve ser inferior ou igual ao campo "@nom_champ@"', # MODIF
-       'erreur_couleur' => 'O código de cor não é válido.',
-       'erreur_date' => 'A data não é válida.',
-       'erreur_date_format' => 'O formato da data não é aceitável.',
-       'erreur_decimal' => 'O valor deve ser um número decimal.',
-       'erreur_decimal_nb_decimales' => 'O número não deve ter mais de @nb_decimales@ algarismos depois da vírgula.',
-       'erreur_email' => 'O endereço de e-mail <em>@email@</em> não está num formato válido.',
-       'erreur_email_nondispo' => 'O endereço de e-mail <em>@email@</em> já está sendo usado.',
-       'erreur_entier' => 'O valor deve ser um número inteiro.',
-       'erreur_entier_entre' => 'O valor dever ser entre @min@ e @max@.',
-       'erreur_entier_max' => 'O valor deve ser inferior a @max@.', # MODIF
-       'erreur_entier_min' => 'O valor deve ser superior a @min@.', # MODIF
-       'erreur_heure' => 'O horário indicado não existe.',
-       'erreur_heure_format' => 'O formato de hora não é aceitável.',
-       'erreur_id_document' => 'Esta extensão de documento não é válida.',
-       'erreur_id_objet' => 'Este ID não é válido.',
-       'erreur_inconnue_generique' => 'O formato não está correto.',
-       'erreur_isbn' => 'O número ISBN não é válido (ex: 978-2-1234-5680-3 ou 2-1234-5680-X)', # MODIF
-       'erreur_isbn_13_X' => 'Um número ISBN-13 não pode terminar em X.',
-       'erreur_isbn_G' => 'O primeiro segmento deve ser igual a 978 ou 979.',
-       'erreur_isbn_nb_caracteres' => 'O número ISBN deve ter 10 ou 13 caractéres, sem contar os traços (atualmente @nb@).',
-       'erreur_isbn_nb_segments' => 'O número ISBN deve ter 4 ou 5 segmentos (atualmente @nb@).',
-       'erreur_isbn_segment' => 'O segmento "@segment@" tem @nb@ número(s) a mais.',
-       'erreur_isbn_segment_lettre' => 'O segmento "@segment@" não pode conter letras.',
-       'erreur_numerique' => 'O formato do número não é válido.',
-       'erreur_objet' => 'Este objeto não é válido', # MODIF
-       'erreur_regex' => 'O formato da expressão não é válido.',
-       'erreur_siren' => 'O número SIREN não é válido.',
-       'erreur_siret' => 'O número SIRET não é válido.',
-       'erreur_taille_egal' => 'O valor deve ter exatamente @egal@ caracteres (atualmente @nb@).',
-       'erreur_taille_entre' => 'O valor deve ter entre @min@ e @max@ caracteres (atualmente @nb@).',
-       'erreur_taille_max' => 'O valor deve ter no máximo @max@ caracteres (atualmente @nb@).',
-       'erreur_taille_min' => 'O valor deve ter no mínimo @min@ caracteres (atualmente @nb@).',
-       'erreur_telephone' => 'O número não é válido.',
-       'erreur_url' => 'O endereço <em>@url@</em> não é válido.',
-       'erreur_url_protocole' => 'O endereço informado <em>(@url@)</em> deve começar com @protocole@', # MODIF
-       'erreur_url_protocole_exact' => 'O endereço informado <em>(@url@)</em> não começa com um protocolo válido (http:// por exemplo)', # MODIF
-
-       // N
-       'normaliser_option_date' => 'Normalizar a data?',
-       'normaliser_option_date_aucune' => 'Não',
-       'normaliser_option_date_en_datetime' => 'No formato «Datetime» (do SQL)',
-
-       // O
-       'option_code_postal_pays_explication' => 'Código de país de dois caracteres: BR, PT, FR etc.',
-       'option_code_postal_pays_label' => 'País',
-       'option_comparaison_champ_champ_explication' => 'Identificador do campo (atributo « nome »)',
-       'option_comparaison_champ_champ_label' => 'Campo',
-       'option_comparaison_champ_comparaison_explication' => 'Tipo de comparação a efetuar',
-       'option_comparaison_champ_comparaison_label' => 'Comparação',
-       'option_comparaison_champ_egal' => '== Igual',
-       'option_comparaison_champ_egal_type' => '=== Idêntico (mesmo tipo)',
-       'option_comparaison_champ_grand' => '> Maior',
-       'option_comparaison_champ_grand_egal' => '>= Maior ou igual',
-       'option_comparaison_champ_nom_champ_explication' => 'Nome do campo para humanos',
-       'option_comparaison_champ_nom_champ_label' => 'Nome do campo',
-       'option_comparaison_champ_petit' => '< Menor',
-       'option_comparaison_champ_petit_egal' => '<= Menor ou igual',
-       'option_couleur_normaliser_label' => 'Normalizar o código de cor?',
-       'option_couleur_type_hexa' => 'Código de cor no formato hexadecimal',
-       'option_couleur_type_label' => 'Tipo de verificação a efetuar',
-       'option_decimal_nb_decimales_label' => 'Número de décimais depois da vírgula',
-       'option_email_disponible_label' => 'E-mail disponível',
-       'option_email_disponible_label_case' => 'Verificar se o e-mail já está sendo utilizado por um usuário',
-       'option_email_mode_5322' => 'A verificação mais de acordo com os padrões disponíveis',
-       'option_email_mode_label' => 'Modo de verificação de e-mails',
-       'option_email_mode_normal' => 'Verificação normal do SPIP',
-       'option_email_mode_strict' => 'Verificação menos permissiva',
-       'option_entier_max_label' => 'Valor máximo',
-       'option_entier_min_label' => 'Valor mínimo',
-       'option_regex_modele_label' => 'O valor deve correspponder à máscara a seguir',
-       'option_siren_siret_mode_label' => 'O que você quer verificar?',
-       'option_siren_siret_mode_siren' => 'O número SIREN',
-       'option_siren_siret_mode_siret' => 'O número SIRET',
-       'option_taille_max_label' => 'Tamanho máximo',
-       'option_taille_min_label' => 'Tamanho mínimo',
-       'option_url_mode_complet' => 'Verificação completa do URL',
-       'option_url_mode_label' => 'Modo de verificação dos URLs',
-       'option_url_mode_php_filter' => 'Verificação completa do URL através do filtro FILTER_VALIDATE_URL do php',
-       'option_url_mode_protocole_seul' => 'Verificação apenas da presença de um protocolo',
-       'option_url_protocole_label' => 'Nome do protocolo a ser verificado',
-       'option_url_type_protocole_exact' => 'Informar um protocolo abaixo:',
-       'option_url_type_protocole_ftp' => 'Protocolos ftp: ftp ou sftp',
-       'option_url_type_protocole_label' => 'Tipo de protocolo a ser verificado',
-       'option_url_type_protocole_mail' => 'Protocolos de e-mail: imap, pop3 ou smtp',
-       'option_url_type_protocole_tous' => 'Todos os protocolos aceitos',
-       'option_url_type_protocole_web' => 'Protocolos web: http ou https',
-
-       // T
-       'type_code_postal' => 'CEP',
-       'type_code_postal_description' => 'Verifica se o valor é um CEP válido',
-       'type_comparaison_champ' => 'Comparação',
-       'type_comparaison_champ_description' => 'Compara o valor com um outro campo do _request().',
-       'type_couleur' => 'Cor',
-       'type_couleur_description' => 'Verifica se o valor é um código de cor.',
-       'type_date' => 'Data',
-       'type_date_description' => 'Verifica se o valor é uma data no formato DD/MM/AAAA. O separador é livre (".", "/" etc).',
-       'type_decimal' => 'Número decimal',
-       'type_decimal_description' => 'Verifica se o valor é um número decimal, com a possibilidade de restringir entre dois valores e de especificar o número de decimais após a vírgula.',
-       'type_email' => 'Endereço de e-mail',
-       'type_email_description' => 'Verifica se o endereço de e-mail está num formato correto.',
-       'type_email_disponible' => 'Disponibilidade de um endereço de e-mail',
-       'type_email_disponible_description' => 'Verifica se o endereço de e-mail já está sendo utilizado por outro usuário do sistema.',
-       'type_entier' => 'Número inteiro',
-       'type_entier_description' => 'Verifica se o valor é um número inteiro, com a possibilidade de restringir entre dois valores.',
-       'type_id_document' => 'Número de um documento',
-       'type_id_document_description' => 'Verifica se o valor corresponde a um número de documento existente.',
-       'type_isbn' => 'Número ISBN',
-       'type_isbn_description' => 'Verifica se o valor corresponde a um número ISBN de 10 ou 13 dígitos.',
-       'type_regex' => 'Expressão regular',
-       'type_regex_description' => 'Verifica se o valor corresponde à máscara solicitada. Para a utilização de máscaras, consulte <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">ajuda online do PHP</a>.',
-       'type_siren_siret' => 'SIREN ou SIRET',
-       'type_siren_siret_description' => 'Verifica se o valor é um número válido de <a href="http://fr.wikipedia.org/wiki/SIREN">sistema de identificação do cadastro de empresas (Système d’Identification du Répertoire des ENtreprises)</a> francês.',
-       'type_taille' => 'Tamanho',
-       'type_taille_description' => 'Verifica se o tamanho do valor corresponde ao mínimo e/ou ao máximo solicitado.',
-       'type_telephone' => 'Número de telefone',
-       'type_telephone_description' => 'Verifica se o número de telefone corresponde a um esquema reconhecido.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Verifica se o URL corresponde a um esquema reconhecido.'
-);
diff --git a/www/plugins/verifier/lang/verifier_ru.php b/www/plugins/verifier/lang/verifier_ru.php
deleted file mode 100644 (file)
index 00c1ad2..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'Неправильный индекс',
-       'erreur_comparaison_egal' => 'Значение должно соответствовать полю "@nom_champ@"', # MODIF
-       'erreur_comparaison_egal_type' => 'Значение должно соответствовать и быть такого же типа как поле "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand' => 'Значение должно быть больше чем поле "@nom_champ@"', # MODIF
-       'erreur_comparaison_grand_egal' => 'Значение должно быть больше или соответствовать полю "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit' => 'Значаение должно быть меньше чем поле "@nom_champ@"', # MODIF
-       'erreur_comparaison_petit_egal' => 'Значение должно быть меньшим или равным полю "@nom_champ@"', # MODIF
-       'erreur_couleur' => 'Ошибка в коде цвета',
-       'erreur_date' => 'Неправильный формат даты.',
-       'erreur_date_format' => 'Неправильный формат даты.',
-       'erreur_decimal' => 'Число должно быть десятичным.',
-       'erreur_decimal_nb_decimales' => 'После запятой должно быть больше чем @nb_decimales@ значений',
-       'erreur_email' => 'Неправильный формат <em>@email@</em>.',
-       'erreur_email_nondispo' => '<em>@email@</em> уже используется.',
-       'erreur_entier' => 'Значение должно быть целым числом.',
-       'erreur_entier_entre' => 'Значение должно быть между @min@ и @max@.',
-       'erreur_entier_max' => 'Значение должно быть меньше @max@.', # MODIF
-       'erreur_entier_min' => 'Значение должно быть больше чем @min@.', # MODIF
-       'erreur_id_document' => 'Ошибочный идентификатор документа.',
-       'erreur_inconnue_generique' => 'Неправильный формат.',
-       'erreur_numerique' => 'Неправильный формат числа.',
-       'erreur_regex' => 'Неправильно сформированный regexp.',
-       'erreur_siren' => 'Значение SIREN ошибочно.',
-       'erreur_siret' => 'Значение SIRET ошибочно.',
-       'erreur_taille_egal' => 'Значение должно состоять строго из  @egal@ знаков.',
-       'erreur_taille_entre' => 'Значение должно иметь от @min@ до @max@ знаков.',
-       'erreur_taille_max' => 'Значение должно иметь не больше чем @max@ знаков.',
-       'erreur_taille_min' => 'Значение должно иметь не меньше чем @min@ знаков.',
-       'erreur_telephone' => 'Неверный номер телефона.',
-       'erreur_url' => 'Неверный URL адрес <em>@url@</em>',
-       'erreur_url_protocole' => 'Адрес <em>(@url@)</em> должен начинаться с @protocole@', # MODIF
-       'erreur_url_protocole_exact' => 'Адрес <em>(@url@)</em> должен начинаться с протокола  (например http:// )', # MODIF
-
-       // N
-       'normaliser_option_date' => 'Упорядочить дату?',
-       'normaliser_option_date_aucune' => 'Нет',
-       'normaliser_option_date_en_datetime' => 'Формат даты и времени (для SQL)',
-
-       // O
-       'option_couleur_normaliser_label' => 'Упорядочить цвет?',
-       'option_couleur_type_hexa' => 'Код цвета в шестнадцатеричном формате ',
-       'option_couleur_type_label' => 'Тип проверки',
-       'option_decimal_nb_decimales_label' => 'Количество символов после запятой.',
-       'option_email_disponible_label' => 'Доступный адрес',
-       'option_email_disponible_label_case' => 'Проверить использовался ли адрес другим пользователем.',
-       'option_email_mode_5322' => 'Проверить по строгим стандартам.',
-       'option_email_mode_label' => 'Режим проверки электронной почты.',
-       'option_email_mode_normal' => 'Стандартная проверка SPIP',
-       'option_email_mode_strict' => 'Не строгая проверка.',
-       'option_entier_max_label' => 'Максимальное значение',
-       'option_entier_min_label' => 'Минимальное значение',
-       'option_regex_modele_label' => 'Значение должно соответствовать следующему выражению',
-       'option_siren_siret_mode_label' => 'Что вы будете проверять?',
-       'option_siren_siret_mode_siren' => 'SIREN номер',
-       'option_siren_siret_mode_siret' => 'SIRET номер',
-       'option_taille_max_label' => 'Максимальный размер ',
-       'option_taille_min_label' => 'Минимальный размер',
-       'option_url_mode_complet' => 'Полная проверка URL',
-       'option_url_mode_label' => 'Режим проверки URL',
-       'option_url_mode_php_filter' => 'Полная проверка валидации URL  с помощью PHP фильтра FILTER_VALIDATE_URL',
-       'option_url_mode_protocole_seul' => 'Проверка на существование протокола',
-       'option_url_protocole_label' => 'Название протокола, который нужно проверить',
-       'option_url_type_protocole_exact' => 'Введите названия протокола:',
-       'option_url_type_protocole_ftp' => 'Протоколы передачи файлов: FTP or SFTP',
-       'option_url_type_protocole_label' => 'Тип протокола для проверки',
-       'option_url_type_protocole_mail' => 'Почтовые протоколы : imap, pop3 ou smtp',
-       'option_url_type_protocole_tous' => 'Все доступные протоколы',
-       'option_url_type_protocole_web' => 'Интернет протоколы : http или https',
-
-       // T
-       'type_couleur' => 'Цвет',
-       'type_couleur_description' => 'Проверить является ли информация цветовым кодом',
-       'type_date' => 'Дата',
-       'type_date_description' => 'Проверить является ли формат даты ДД/ММ/ГГГГ. Разделитель может быть произвольным (".", "/", и т.д.).',
-       'type_decimal' => 'Десятичное число',
-       'type_decimal_description' => 'Проверить является ли значение десятичным числом, с целью определить количество знаков после запятой.',
-       'type_email' => 'Электронная почта',
-       'type_email_description' => 'Проверить корректность формата электронной почты.',
-       'type_email_disponible' => 'Доступность электронной почты',
-       'type_email_disponible_description' => 'Проверить не использовалась ли электронная почта другим пользователем.',
-       'type_entier' => 'Целое число',
-       'type_entier_description' => 'Проверить является ли число целым.',
-       'type_regex' => 'Регулярное выражение',
-       'type_regex_description' => 'Проверить совместимость значения и выражения. Для подробной информации о  регулярных выражениях обратитесь по адресу <a href="http://fr2.php.net/manual/en/reference.pcre.pattern.syntax.php">the online PHP help</a>.',
-       'type_siren_siret' => 'SIREN или SIRET',
-       'type_siren_siret_description' => 'Проверить валидность с французского языка <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> (Company Registry ID System).',
-       'type_taille' => 'Размер',
-       'type_taille_description' => 'Проверить лежит ли значение параметра в диапазоне минимального и максимального значения.',
-       'type_telephone' => 'Номер телефона',
-       'type_telephone_description' => 'Проверить соответствует ли номер телефона формату ввода.',
-       'type_url' => 'URL',
-       'type_url_description' => 'Проверить соответствие ли URL  формат ввода.'
-);
diff --git a/www/plugins/verifier/lang/verifier_sk.php b/www/plugins/verifier/lang/verifier_sk.php
deleted file mode 100644 (file)
index c77161f..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/verifier?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // E
-       'erreur_code_postal' => 'Toto PSČ je neplatné.',
-       'erreur_comparaison_egal' => 'Hodnota musí byť rovná poľu "@nom_champ@".',
-       'erreur_comparaison_egal_type' => 'Hodnota musí byť rovná poľu"@nom_champ@" a musí byť rovnakého typu.',
-       'erreur_comparaison_grand' => 'Hodnota musí byť väčšia ako pole "@nom_champ@"',
-       'erreur_comparaison_grand_egal' => 'Hodnota musí byť väčšia alebo rovná ako pole "@nom_champ@"',
-       'erreur_comparaison_petit' => 'Hodnota musí byť menšia ako pole "@nom_champ@".',
-       'erreur_comparaison_petit_egal' => 'Hodnota musí byť menšia alebo rovná ako "@nom_champ@"',
-       'erreur_couleur' => 'Kód farby nie je platný.',
-       'erreur_date' => 'Tento dátum je neplatný.',
-       'erreur_date_format' => 'Formát dátumu je neplatný.',
-       'erreur_decimal' => 'Hodnota musí byť desatinné číslo.',
-       'erreur_decimal_nb_decimales' => 'Číslo musí mať po desatinnej čiarke viac ako @nb_decimales@ miest.',
-       'erreur_email' => 'E-mailová adresa <em>@email@</em> nemá  správny formát.',
-       'erreur_email_nondispo' => 'E-mailová adresa <em>@email@</em> sa už používa.',
-       'erreur_entier' => 'Hodnota musí byť celé číslo.',
-       'erreur_entier_entre' => 'Hodnota musí byť medzi @min@ a @max@.',
-       'erreur_entier_max' => 'Hodnota musí byť menšia alebo rovná ako @max@.',
-       'erreur_entier_min' => 'Hodnota musí byť väčšia alebo rovná ako @min@.',
-       'erreur_heure' => 'Zadaný čas neexistuje.',
-       'erreur_heure_format' => 'Formát času, ktorý ste zadali, nie je akceptovaný.',
-       'erreur_id_document' => 'Tento identifikátor dokumentu nie je platný.',
-       'erreur_inconnue_generique' => 'Formát nie je správny.',
-       'erreur_isbn' => 'Číslo ISBN nie je platné (napr.: 978-2-1234-5680-3 alebo 2-1234-5680-X)',
-       'erreur_isbn_13_X' => 'Číslo ISBN-13 sa nemôže končiť písmenom X.',
-       'erreur_isbn_G' => 'Musí sa začínať číslami 978 alebo 979.',
-       'erreur_isbn_nb_caracteres' => 'Číslo ISBN musí mať 10 alebo 13 znakov okrem spojovníkov (teraz má @nb@).',
-       'erreur_isbn_nb_segments' => 'Číslo ISBN musí mať 4 alebo 5 skupín číslic (teraz má @nb@).',
-       'erreur_isbn_segment' => 'V skupine "@segment@" je naviac @nb@ číslo/čísel.',
-       'erreur_isbn_segment_lettre' => 'V skupine "@segment@" nesmie byť žiadne písmeno.',
-       'erreur_numerique' => 'Formát čísla je neplatný.',
-       'erreur_objet' => 'Tento objekt je neplatný',
-       'erreur_regex' => 'Reťazec pravidelného výrazu má nesprávny formát.',
-       'erreur_siren' => 'IČO je neplatné.',
-       'erreur_siret' => 'Obchodné meno s IČOm je neplatné.',
-       'erreur_taille_egal' => 'Údaj musí mať presne @egal@ znakov (teraz má @nb@).',
-       'erreur_taille_entre' => 'Údaj musí mať medzi @min@ a @max@ znakov (teraz má @nb@). ',
-       'erreur_taille_max' => 'Údaj nesmie mať menej ako @max@ znakov (teraz má @nb@).',
-       'erreur_taille_min' => 'Údaj nesmie mať menej ako @min@ znakov (teraz má @nb@).',
-       'erreur_telephone' => 'Telefónne číslo je neplatné.',
-       'erreur_url' => 'Internetová adresa <em>@url@</em> je neplatná.',
-       'erreur_url_protocole' => 'Zadaná adresa <em>(@url@)</em> sa musí začínať @protocole@',
-       'erreur_url_protocole_exact' => 'Zadaná adresa <em>(@url@)</em> sa nezačína platným protokolom (napr. http://)',
-
-       // N
-       'normaliser_option_date' => 'Štandardizovať dátum?',
-       'normaliser_option_date_aucune' => 'Nie',
-       'normaliser_option_date_en_datetime' => 'Vo formáte "Dátum a čas" (pre SQL)',
-
-       // O
-       'option_code_postal_pays_label' => 'Krajina',
-       'option_comparaison_champ_champ_label' => 'Pole',
-       'option_comparaison_champ_comparaison_label' => 'Porovnávanie',
-       'option_comparaison_champ_egal' => '== Rovná sa',
-       'option_comparaison_champ_egal_type' => '=== identický (rovnaký typ)',
-       'option_comparaison_champ_grand' => '> väčší',
-       'option_comparaison_champ_grand_egal' => '>= väčší alebo rovný',
-       'option_comparaison_champ_nom_champ_label' => 'Názov poľa',
-       'option_comparaison_champ_petit' => '< menší',
-       'option_comparaison_champ_petit_egal' => '<= menší alebo rovný',
-       'option_couleur_normaliser_label' => 'Štandardizovať kód farby?',
-       'option_couleur_type_hexa' => 'Kód farby v hexadecimálnom (šetnástkovom) formáte',
-       'option_couleur_type_label' => 'Typ overenia, ktorý sa má použiť',
-       'option_decimal_nb_decimales_label' => 'Počet desatinných miest',
-       'option_decimal_separateur_label' => 'Oddeľovač desatinných miest',
-       'option_email_disponible_label' => 'Dostupná adresa',
-       'option_email_disponible_label_case' => 'Skontrolujte, či túto adresu už nepoužíva iný používateľ',
-       'option_email_mode_5322' => 'Skontrolovať podľa najprísnejších dostupných štandardov',
-       'option_email_mode_label' => 'Režim kontroly e-mailov',
-       'option_email_mode_normal' => 'Normálna kontrola SPIPu',
-       'option_email_mode_strict' => 'Prísnejšia kontrola',
-       'option_entier_max_label' => 'Maximálna hodnota',
-       'option_entier_min_label' => 'Minimálna hodnota',
-       'option_fichiers_hauteur_max_label' => 'Maximálna šírka obrázka (v px)',
-       'option_fichiers_largeur_max_label' => 'Maximálna veľkosť obrázka (v px)',
-       'option_fichiers_mime_label' => 'Typ Mime a prípona',
-       'option_id_objet_objet_label' => 'Názov objektu (v jednotnom čísle)',
-       'option_regex_modele_label' => 'Hodnota sa musí zhodovať s týmto výrazom',
-       'option_siren_siret_mode_label' => 'Určite to chcete potvrdiť?',
-       'option_siren_siret_mode_siren' => 'IČO',
-       'option_siren_siret_mode_siret' => 'IČO a obchodné meno',
-       'option_taille_max_label' => 'Maximálna veľkosť',
-       'option_taille_min_label' => 'Minimálna veľkosť',
-       'option_url_mode_complet' => 'Úplné overenie internetovej adresy',
-       'option_url_mode_label' => 'Režim overenia internetovej adresy',
-       'option_url_mode_php_filter' => 'Úplné overenie internetovej adresy pomocou PHP filtra FILTER_VALIDATE_URL',
-       'option_url_mode_protocole_seul' => 'Iba overenie existencie protokolu',
-       'option_url_protocole_label' => 'Názov protokolu, ktorý treba overiť',
-       'option_url_type_protocole_exact' => 'Zadajte protokol:',
-       'option_url_type_protocole_ftp' => 'Protokoly na prenos súborov: FTP alebo SFTP',
-       'option_url_type_protocole_label' => 'Typ protokolu, ktorý treba overiť',
-       'option_url_type_protocole_mail' => 'E-mailové protokoly: IMAP, POP3 alebo SMTP',
-       'option_url_type_protocole_tous' => 'Všetky akceptované protokoly',
-       'option_url_type_protocole_web' => 'Internetové protokoly: HTTP alebo HTTPS',
-
-       // T
-       'type_code_postal' => 'PSČ',
-       'type_comparaison_champ' => 'Porovnanie',
-       'type_couleur' => 'Farba',
-       'type_couleur_description' => 'Skontroluje, či je hodnota zadaný kód farby.',
-       'type_date' => 'Dátum',
-       'type_date_description' => 'Skontrolujte, či je dátum vo formáte DD/MM/RRRR. Oddeľovacím znakom môže byť čokoľvek (napr. ".", "/").',
-       'type_decimal' => 'Desatinné číslo',
-       'type_decimal_description' => 'Skontroluje, či je zadané desatinné číslo s možnosťou obmedziť jeho hodnotu určitým rozsahom a určiť počet desatinných miest.',
-       'type_email' => 'E-mailová adresa',
-       'type_email_description' => 'Skontrolujte, či má e-mailová adresa správnu podobu.',
-       'type_email_disponible' => 'Dostupnosť e-mailovej adresy',
-       'type_email_disponible_description' => 'Skontrolujte, či e-mailovú adresu už nepoužíva iný používateľ systému.',
-       'type_entier' => 'Celé číslo',
-       'type_entier_description' => 'Skontroluje, či je hodnotou celé číslo s možnosťou obmedziť ju dvoma hraničnými hodnotami.',
-       'type_fichiers' => 'Vlastnosti súboru',
-       'type_id_document' => 'Číslo dokumentu',
-       'type_id_objet' => 'Číslo objektu',
-       'type_isbn' => 'Číslo ISBN',
-       'type_regex' => 'Pravidelný výraz',
-       'type_regex_description' => 'Skontrolujte, že hodnota sa zhoduje so zadaným výrazom. Viac informácií o používaní pravidelných výrazov nájdete v <a href="http://fr2.php.net/manual/en/reference.pcre.pattern.syntax.php">internetovompomocníkovi k PHP.</a>',
-       'type_siren_siret' => 'IČO alebo IČO a obchodné meno',
-       'type_siren_siret_description' => 'Skontroluje, že hodnota je platné číslo z Fracúzskeho<a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> (Obchodný register).',
-       'type_taille' => 'Veľkosť',
-       'type_taille_description' => 'Skontroluje, že veľkosť hodnoty zodpovedá určenej minimálnej a/lebo maximálnej hodnote.',
-       'type_telephone' => 'Telefónne číslo',
-       'type_telephone_description' => 'Skontroluje, či sa telefónne číslo zhoduje s rozoznávaným formátom telefónnych čísel.',
-       'type_url' => 'Internetová adresa',
-       'type_url_description' => 'Overí, či sa internetová adresa zhoduje s rozoznávaným formátom.'
-);
diff --git a/www/plugins/verifier/paquet.xml b/www/plugins/verifier/paquet.xml
deleted file mode 100644 (file)
index 86cb8be..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<paquet\r
-       prefix="verifier"\r
-       categorie="outil"\r
-       version="1.6.16"\r
-       etat="stable"\r
-       compatibilite="[2.0.10;3.2.*]"\r
-       logo="images/verifier-128.png"\r
-       documentation="https://contrib.spip.net/Verifier"\r
->\r
-\r
-       <nom>API de v&#233;rification</nom>\r
-       <!-- Une API générique pour vérifier une valeur -->\r
-\r
-       <auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>\r
-\r
-       <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>\r
-\r
-       <traduire module="verifier" reference="fr" gestionnaire="salvatore" />\r
-\r
-       <pipeline nom="verifier" action="" />\r
-\r
-       <menu nom="verifier_doc" titre="verifier:titre_page_verifier_doc" parent="menu_developpement"  icone="images/verifier-16.png" />\r
-\r
-       <utilise nom="yaml" compatibilite="[1.5.0;]" />\r
-</paquet>\r
diff --git a/www/plugins/verifier/plugin.xml b/www/plugins/verifier/plugin.xml
deleted file mode 100644 (file)
index 9a48c4e..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<plugin>\r
-       <nom>\r
-               <multi>\r
-                       [fr]API de v&#233;rification\r
-                       [en]Control API\r
-               </multi>\r
-       </nom>\r
-       <slogan>Une API g&#233;n&#233;rique pour v&#233;rifier une valeur</slogan>\r
-       <auteur>[Les Développements Durables->http://www.ldd.fr]</auteur>\r
-       <icon>images/verifier-128.png</icon>\r
-       <licence>GPL v3</licence>\r
-       <version>1.6.16</version>\r
-       <etat>stable</etat>\r
-       <description>\r
-               <multi>\r
-                       [fr]Fournit une fonction unique <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> permettant de tester la validit&#233; d'une valeur.\r
-                       [en]Provides a unique function <code>verifier($value, $type, $options, &$valeur_normalisee)</code> to test the validity of a value.\r
-               </multi>\r
-       </description>\r
-       <prefix>verifier</prefix>\r
-       <lien>https://contrib.spip.net/Verifier</lien>\r
-       <pipeline>\r
-               <nom>verifier</nom>\r
-               <action></action>\r
-       </pipeline>\r
-       <necessite id="SPIP" version="[2.0.10;3.2.99]" />\r
-       <utilise id="yaml" version="[1.5.0;]" />\r
-       <categorie>outil</categorie>\r
-       <fonctions>verifier_fonctions.php</fonctions>\r
-       <traduire gestionnaire="salvatore" module="verifier" reference="fr" />\r
-</plugin>\r
diff --git a/www/plugins/verifier/prive/squelettes/contenu/verifier_doc.html b/www/plugins/verifier/prive/squelettes/contenu/verifier_doc.html
deleted file mode 100644 (file)
index 75c16f0..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<h1 class="grostitre"><:verifier:titre_page_verifier_doc:></h1>
-<div class="nettoyeur"></div>
-
-<BOUCLE_plugin_yaml (CONDITION) {si #VAL{_DIR_PLUGIN_YAML}|defined}>
-       <B_verifier>
-               <BOUCLE_verifier (DATA) {source table, #VAL{verifier}|verifier_lister_disponibles}>
-                       [(#BOITE_OUVRIR{<h3 id="[verifier_(#CLE)]">[(#ICONE|balise_img) ][(#TITRE)] [\[(#CLE)\]]</h3>, 'simple'})]
-
-                       [<p class="explication">(#DESCRIPTION)</p>]
-                       <BOUCLE_options (DATA) {source table, #OPTIONS}>
-                               <div class="info #VALEUR{saisie}">
-                                       <ul class="spip">
-                                               <li><strong>[(#VALEUR{options/label}|sinon{#VALEUR{options/label_case}}|saisies_label)] [\[(#VALEUR{saisie})\]]</strong>[(#VALEUR{options/label}|oui|et{#VALEUR{options/label_case}|oui})[(#VALEUR{options/label_case}|saisies_label)]]
-                                                       [(#VALEUR{options/explication}|oui)<br/>[(#VALEUR{options/explication}|saisies_label)]]
-                                                       [(#VALEUR{options/defaut}|oui)<br/>[<:verifier:par_defaut:> (#VALEUR{options/defaut}|saisies_label)]]
-                                                       <B_verifier_datas>
-                                                               <br/><:verifier:data_choix:>
-                                                               <ul class="spip"><BOUCLE_verifier_datas (DATA) {source table, #VALEUR{options/datas}}>
-                                                                       <li class="item data_[(#CLE)]">[<strong>(#CLE)</strong>]<br/>[(#VALEUR|saisies_label)]</li>
-                                                       </BOUCLE_verifier_datas></ul>
-                                                       </B_verifier_datas>
-                                                       <B_verifier_info><br/><em><:verifier:verification_a_faire:></em><ul>
-                                                       <BOUCLE_verifier_info (DATA) {source table, #VALEUR{verifier}} {si #VALEUR{verifier}|is_array|oui}>
-                                                               <B_array>
-                                                                       <BOUCLE_array (DATA) {source table, #VALEUR} {si #VALEUR|is_array}><li>#CLE : <em>#VALEUR</em></li></BOUCLE_array>
-                                                               </B_array>
-                                                               <li>#CLE : <em>#VALEUR</em></li><//B_array>
-                                                       </BOUCLE_verifier_info>
-                                                               </ul></B_verifier_info>
-                                               </li>
-                                       </ul>
-                               </div>
-                       </BOUCLE_options>
-                       [(#BOITE_FERMER)]
-               </BOUCLE_verifier>
-       </B_verifier>
-       <//B_verifier>
-</BOUCLE_plugin_yaml>
-</B_plugin_yaml>
-<:verifier:plugin_yaml_inactif:>
-<//B_plugin_yaml>
\ No newline at end of file
diff --git a/www/plugins/verifier/prive/squelettes/navigation/verifier_doc.html b/www/plugins/verifier/prive/squelettes/navigation/verifier_doc.html
deleted file mode 100644 (file)
index 1641e1c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<B_verifier>
-       <div class="navigation">
-               <ul class="liste_items sous_navigation">
-               <BOUCLE_verifier (DATA) {source table, #VAL{verifier}|verifier_lister_disponibles} {si #VAL{_DIR_PLUGIN_YAML}|defined}>
-                               <li class="item"><a href="#[verifier_(#CLE)]" class="bando2_verifier_[(#CLE)]">[(#TITRE)] [((#CLE))]</a></li>
-               </BOUCLE_verifier>
-               </ul>
-       </div>
-</B_verifier>
diff --git a/www/plugins/verifier/prive/style_prive_plugin_verifier.html b/www/plugins/verifier/prive/style_prive_plugin_verifier.html
deleted file mode 100644 (file)
index 7a7bf4f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-[(#REM)<style>/*
-       Ce squelette definit les styles de l'espace prive
-
-       Note: l'entete "Vary:" sert a repousser l'entete par
-       defaut "Vary: Cookie,Accept-Encoding", qui est (un peu)
-       genant en cas de "rotation du cookie de session" apres
-       un changement d'IP (effet de clignotement).
-
-       ATTENTION: il faut absolument le charset sinon Firefox croit que
-       c'est du text/html !
-*/]#CACHE{3600*100,cache-client}
-#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
-#HTTP_HEADER{Vary: Accept-Encoding}
-
-body.verifier_doc {
-       background-color: #efefef;
-}
-<BOUCLE_plugin_yaml (CONDITION) {si #VAL{_DIR_PLUGIN_YAML}|defined}>
-       <BOUCLE_verifier (DATA) {source table, #VAL{verifier}|appliquer_filtre{verifier_lister_disponibles}}>
-       .navigation_avec_icones .bando2_verifier_[(#CLE)] { [background-image: url((#ICONE|image_reduire{16}|extraire_attribut{src}));] }
-       </BOUCLE_verifier>
-</BOUCLE_plugin_yaml>
-<:verifier:plugin_yaml_inactif:>
-<//B_plugin_yaml>
\ No newline at end of file
diff --git a/www/plugins/verifier/svn.revision b/www/plugins/verifier/svn.revision
deleted file mode 100644 (file)
index 5d63078..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/verifier
-Revision: 107782
-Dernier commit: 2017-11-29 05:35:58 +0100 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/verifier</origine>
-<revision>107782</revision>
-<commit>2017-11-29 05:35:58 +0100 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/verifier/test/verifier.html b/www/plugins/verifier/test/verifier.html
deleted file mode 100644 (file)
index 663ba96..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-<html>\r
-<body>\r
-<h1>Test de vérification de valeurs</h1>\r
-\r
-<h2>Vérifions qu'un mot est un mot :</h2>\r
-<pre>\r
-<?php\r
-\r
-$verifier = charger_fonction('verifier','inc');\r
-\r
-$un_mot = "poli4_EFSdq89";\r
-$un_autre_mot = "aqe  edioj o^";\r
-$modele = "/^[\w]+$/";\r
-\r
-echo "Modèle => $modele\n\n";\r
-echo "'$un_mot' ?";\r
-var_dump($verifier($un_mot, 'regex', array('modele'=>$modele)));\r
-echo "'$un_autre_mot' ?";\r
-var_dump($verifier($un_autre_mot, 'regex', array('modele'=>$modele)));\r
-\r
-?>\r
-</pre>\r
-\r
-<h2>Vérifions des entiers :</h2>\r
-<pre>\r
-<?php\r
-\r
-$un_entier = 568;\r
-$un_autre_entier = "-89";\r
-\r
-echo "$un_entier entre 0 et 1000 ?";\r
-var_dump($verifier($un_entier, 'entier', array('min'=>0, 'max'=>1000)));\r
-echo "$un_entier < 100 ?";\r
-var_dump($verifier($un_entier, 'entier', array('max'=>100)));\r
-echo "$un_autre_entier est positif ?";\r
-var_dump($verifier($un_autre_entier, 'entier', array('min'=>0)));\r
-echo "$un_autre_entier entre -100 et -50 ?";\r
-var_dump($verifier($un_autre_entier, 'entier', array('min'=>-100, 'max'=>-50)));\r
-\r
-?>\r
-</pre>\r
-\r
-<h2>V&eacute;rifions une taille d'une cha&icirc;ne :</h2>\r
-<pre>\r
-<?php\r
-\r
-$une_chaine = "123456";\r
-$un_autre_chaine = "abc";\r
-\r
-echo "$une_chaine de 1 à 3 caractères ?";\r
-var_dump($verifier($une_chaine, 'taille', array('min'=>1, 'max'=>3)));\r
-echo "$une_chaine 5 caractères max ?";\r
-var_dump($verifier($une_chaine, 'taille', array('max'=>5)));\r
-echo "$une_chaine 4 caractères mini ?";\r
-var_dump($verifier($une_chaine, 'taille', array('min'=>4)));\r
-echo "$un_autre_chaine de 1 à 3 caractères ?";\r
-var_dump($verifier($un_autre_chaine, 'taille', array('min'=>1, 'max'=>3)));\r
-echo "$un_autre_chaine 5 caractères max ?";\r
-var_dump($verifier($un_autre_chaine, 'taille', array('max'=>5)));\r
-echo "$un_autre_chaine 4 caractères mini ?";\r
-var_dump($verifier($un_autre_chaine, 'taille', array('min'=>4)));\r
-echo "$une_chaine de 3 caractères ?";\r
-var_dump($verifier($une_chaine, 'taille', array('egal'=>3)));\r
-echo "$un_autre_chaine de 3 caractères ?";\r
-var_dump($verifier($un_autre_chaine, 'taille', array('egal'=>3)));\r
-\r
-?>\r
-</pre>\r
-\r
-\r
-<h2>Vérifions des emails :</h2>\r
-<pre>\r
-<?php\r
-\r
-$email = "test@test.fr";\r
-$email2 = "test@b";\r
-$email3 = "test";\r
-\r
-echo "Valide SPIP : $email ?";\r
-var_dump($verifier($email, 'email'));\r
-echo "Valide SPIP : $email2 ?";\r
-var_dump($verifier($email2, 'email'));\r
-echo "Valide SPIP : $email3 ?";\r
-var_dump($verifier($email3, 'email'));\r
-\r
-echo "Valide Strict : $email ?";\r
-var_dump($verifier($email, 'email',array('mode'=>'strict')));\r
-echo "Valide Strict : $email2 ?";\r
-var_dump($verifier($email2, 'email',array('mode'=>'strict')));\r
-echo "Valide Strict : $email3 ?";\r
-var_dump($verifier($email3, 'email',array('mode'=>'strict')));\r
-\r
-\r
-?>\r
-</pre>\r
-\r
-<h2>Vérifions des téléphones :</h2>\r
-<pre>\r
-<?php\r
-\r
-$telephone = "01.01/01-02 03";\r
-$telephone2 = "090909";\r
-$telephone3 = "10 01 01 01 01";\r
-\r
-echo "Téléphone : $telephone ?";\r
-var_dump($verifier($telephone, 'telephone_fr'));\r
-echo "Téléphone : $telephone2 ?";\r
-var_dump($verifier($telephone2, 'telephone_fr'));\r
-echo "Téléphone : $telephone3 ?";\r
-var_dump($verifier($telephone3, 'telephone_fr'));\r
-\r
-\r
-?>\r
-</pre>\r
-\r
-\r
-<h2>Vérifions des SIREN/SIRET :</h2>\r
-<pre>\r
-<?php\r
-\r
-$siren_valide = "321227852";\r
-$siren_non_valide = "321227822";\r
-$siret_valide = "32122785200019";\r
-$siret_non_valide = "32122785200033";\r
-\r
-echo "SIREN : $siren_valide ?";\r
-var_dump($verifier($siren_valide, 'siren_siret'));\r
-echo "SIREN : $siren_non_valide ?";\r
-var_dump($verifier($siren_non_valide, 'siren_siret'));\r
-\r
-echo "SIRET : $siret_valide ?";\r
-var_dump($verifier($siret_valide, 'siren_siret',array('mode'=>'siret')));\r
-echo "SIRET : $siret_non_valide ?";\r
-var_dump($verifier($siret_non_valide, 'siren_siret',array('mode'=>'siret')));\r
-?>\r
-</pre>\r
-\r
-<h2>Vérifions des DATES :</h2>\r
-<pre>\r
-<?php\r
-$date_valide = "30-01-2009";\r
-$date_non_valide = "321227822";\r
-$date_non_valide2 = "29-02-2011";\r
-$date_valide2 = "29-02-2012";\r
-\r
-echo "Date JJ/MM/AAAA (avec séparateur /.-) : $date_valide ?";\r
-var_dump($verifier($date_valide, 'date'));\r
-echo "Date JJ/MM/AAAA : $date_non_valide ?";\r
-var_dump($verifier($date_non_valide, 'date'));\r
-echo "Date JJ/MM/AAAA : $date_non_valide2 ?";\r
-var_dump($verifier($date_non_valide2, 'date'));\r
-echo "Date JJ/MM/AAAA : $date_valide2 ?";\r
-var_dump($verifier($date_valide2, 'date'));\r
-?>\r
-</pre>\r
-\r
-<h2>Vérifions des URL :</h2>\r
-<pre>\r
-<?php\r
-\r
-// Bon c'est pas terrible tout ce code... Faut revoir ca avec le plugin test builder\r
-$url_web_valide1 = "Http://www.domaine.tld";\r
-$url_web_valide2 = "https://www.Domaine.tld";\r
-$url_ftp_valide = "sftp://www.domaine.tld";\r
-$url_mail_valide = "pop3://www.domaine.tld";\r
-$url_exact_valide = "ssh://www.domaine.tld";\r
-$url_tous_valide = "rtsp://www.domaine.tld";\r
-\r
-echo "protocole_seul : url_web_valide1 : $url_web_valide1 ?";\r
-var_dump($verifier($url_web_valide1, 'url', array('mode'=>'protocole_seul','type_protocole'=>'web')));\r
-echo "protocole_seul : url_web_valide2 : $url_web_valide2 ?";\r
-var_dump($verifier($url_web_valide2, 'url', array('mode'=>'protocole_seul','type_protocole'=>'web')));\r
-echo "protocole_seul : url_ftp_valide : $url_ftp_valide ?";\r
-var_dump($verifier($url_ftp_valide, 'url', array('mode'=>'protocole_seul','type_protocole'=>'ftp')));\r
-echo "protocole_seul : url_mail_valide : $url_mail_valide ?";\r
-var_dump($verifier($url_mail_valide, 'url', array('mode'=>'protocole_seul','type_protocole'=>'mail')));\r
-echo "protocole_seul : url_exact_valide : $url_exact_valide ?";\r
-var_dump($verifier($url_exact_valide, 'url', array('mode'=>'protocole_seul','type_protocole'=>'exact','protocole'=>'ssh')));\r
-echo "protocole_seul : url_tous_valide : $url_tous_valide ?";\r
-var_dump($verifier($url_tous_valide, 'url', array('mode'=>'protocole_seul','type_protocole'=>'tous')));\r
-\r
-$url_web_invalide1 = "htpp://www.domaine.tld";\r
-$url_web_invalide2 = "http:/www.domaine.tld";\r
-$url_web_invalide3 = "ftp://www.domaine.tld";\r
-\r
-echo "protocole_seul : url_web_invalide1 : $url_web_invalide1 ?";\r
-var_dump($verifier($url_web_invalide1, 'url', array('mode'=>'protocole_seul','type_protocole'=>'web')));\r
-echo "protocole_seul : url_web_invalide2 : $url_web_invalide2 ?";\r
-var_dump($verifier($url_web_invalide2, 'url', array('mode'=>'protocole_seul','type_protocole'=>'web')));\r
-echo "protocole_seul : url_web_invalide3 : $url_web_invalide3 ?";\r
-var_dump($verifier($url_web_invalide3, 'url', array('mode'=>'protocole_seul','type_protocole'=>'web')));\r
-\r
-$url_web_valide1 = "http://www.domaine.co.tld";\r
-$url_web_valide2 = "http://www.domaine.tld/repertoire";\r
-$url_web_valide3 = "http://www.DOMAINE.tld/repertoire";\r
-$url_web_valide4 = "http://www.domaine.tld/fichier%20.html";\r
-$url_web_valide5 = "http://www.domaine.tld/fichier.html#ancre";\r
-$url_web_valide6 = "http://www.domaine.tld/spip.php?page=test/verifier&toto=1";\r
-$url_web_valide7 = "http://www.domaine.tld/Presentation,432.html";\r
-$url_web_valide8 = "http://toto:t8_&$!@192.168.0.1:8000";\r
-$url_web_invalide1 = "http://www.domaïne.tld";\r
-$url_web_invalide2 = "http://www.domaine.tld\toto";\r
-$url_web_invalide3 = "http://www.domaine.tld/toto titi";\r
-\r
-\r
-echo "complet : url_web_valide1 : $url_web_valide1 ?";\r
-var_dump($verifier($url_web_valide1, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_valide2 : $url_web_valide2 ?";\r
-var_dump($verifier($url_web_valide2, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_valide3 : $url_web_valide3 ?";\r
-var_dump($verifier($url_web_valide3, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_valide4 : $url_web_valide4 ?";\r
-var_dump($verifier($url_web_valide4, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_valide5 : $url_web_valide5 ?";\r
-var_dump($verifier($url_web_valide5, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_valide6 : $url_web_valide6 ?";\r
-var_dump($verifier($url_web_valide6, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_valide7 : $url_web_valide7 ?";\r
-var_dump($verifier($url_web_valide7, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_valide8 : $url_web_valide8 ?";\r
-var_dump($verifier($url_web_valide8, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-\r
-echo "complet : url_web_invalide1 : $url_web_invalide1 ?";\r
-var_dump($verifier($url_web_invalide1, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_invalide2 : $url_web_invalide2 ?";\r
-var_dump($verifier($url_web_invalide2, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-echo "complet : url_web_invalide3 : $url_web_invalide3 ?";\r
-var_dump($verifier($url_web_invalide3, 'url', array('mode'=>'complet','type_protocole'=>'web')));\r
-\r
-\r
-echo "php_filter : url_web_valide1 : $url_web_valide1 ?";\r
-var_dump($verifier($url_web_valide1, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_valide2 : $url_web_valide2 ?";\r
-var_dump($verifier($url_web_valide2, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_valide3 : $url_web_valide3 ?";\r
-var_dump($verifier($url_web_valide3, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_valide4 : $url_web_valide4 ?";\r
-var_dump($verifier($url_web_valide4, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_valide5 : $url_web_valide5 ?";\r
-var_dump($verifier($url_web_valide5, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_valide6 : $url_web_valide6 ?";\r
-var_dump($verifier($url_web_valide6, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_valide7 : $url_web_valide7 ?";\r
-var_dump($verifier($url_web_valide7, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_valide8 : $url_web_valide8 ?";\r
-var_dump($verifier($url_web_valide8, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-\r
-echo "php_filter : url_web_invalide1 : $url_web_invalide1 ?";\r
-var_dump($verifier($url_web_invalide1, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_invalide2 : $url_web_invalide2 ?";\r
-var_dump($verifier($url_web_invalide2, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-echo "php_filter : url_web_invalide3 : $url_web_invalide3 ?";\r
-var_dump($verifier($url_web_invalide3, 'url', array('mode'=>'php_filter','type_protocole'=>'web')));\r
-\r
-?>\r
-</pre>\r
-\r
-\r
-</body>\r
-</html>\r
diff --git a/www/plugins/verifier/verifier/code_postal.php b/www/plugins/verifier/verifier/code_postal.php
deleted file mode 100644 (file)
index a1471d1..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Un code postal francais est compose de 5 chiffres
- * http://fr.wikipedia.org/wiki/Code_postal_en_France
- * a completer pour d'autre pays
- *
- * cf : http://fr.wikipedia.org/wiki/Codes_postaux
- *
- * La regexp par défaut doit valider toutes les possibilités
- * -* combinaisons de chiffres et de lettres et aussi tiret
- * -* notations internationales cf : http://en.wikipedia.org/wiki/List_of_postal_codes#On_the_use_of_country_codes
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   pays => code pays
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_code_postal_dist($valeur, $options = array()) {
-       $erreur = _T('verifier:erreur_code_postal');
-       if (!is_string($valeur)) {
-               return $erreur;
-       }
-
-       $ok = '';
-
-       $pays = isset($options['pays']) ? $options['pays'] : '';
-       switch ($pays) {
-               case 'FR':
-                       if (!preg_match(',^((0[1-9])|([1-8][0-9])|(9[0-8]))[0-9]{3}$,', $valeur)) {
-                               return $erreur;
-                       }
-                       break;
-               case 'DZ':// Algérie
-               case 'DE':// Allemagne
-               case 'BY':// Bielorussie
-               case 'BA':// Bosnie Herzégovine
-               case 'HR':// Croatie
-               case 'ES':// Espagne
-               case 'FI':// Finlande
-               case 'GT':// Guatemala
-               case 'IT':// Italie
-               case 'LT':// Lituanie
-               case 'MY':// Malaisie
-               case 'MA':// Maroc
-               case 'MX':// Mexique
-               case 'ME':// Montenegro
-               case 'LK':// Sri lanka
-               case 'UA':// Ukraine
-                       // 5 chiffres
-                       if (!preg_match(',^[0-9]{5}$,', $valeur)) {
-                               return $erreur;
-                       }
-                       break;
-               default:
-                       if (!preg_match('/^[A-Z]{1,2}[-|\s][0-9]{3,6}$|^[0-9]{3,6}$|^[0-9|A-Z]{2,5}[-|\s][0-9|A-Z]{2,4}$|^[A-Z]{1,2} [0-9|A-Z]{2,5}[-|\s][0-9|A-Z]{2,4}/i', $valeur)) {
-                               return $erreur;
-                       }
-                       break;
-       }
-
-       return $ok;
-}
diff --git a/www/plugins/verifier/verifier/code_postal.yaml b/www/plugins/verifier/verifier/code_postal.yaml
deleted file mode 100644 (file)
index e76237f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-titre: '<:verifier:type_code_postal:>'
-description: '<:verifier:type_code_postal_description:>'
-options:
-  -
-    saisie: 'input'
-    options:
-      nom: 'pays'
-      label: '<:verifier:option_code_postal_pays_label:>'
-      explication: '<:verifier:option_code_postal_pays_explication:>'
diff --git a/www/plugins/verifier/verifier/comparaison_champ.php b/www/plugins/verifier/verifier/comparaison_champ.php
deleted file mode 100644 (file)
index e4eeae7..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Compare la valeur avec un autre champ du _request().
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   Un éventuel tableau d'options.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_comparaison_champ_dist($valeur, $options = array()) {
-       include_spip('inc/filtres');
-
-       // On vérifie qu'on a bien un champ à comparer
-       if (!$champ = $options['champ'] or !is_scalar($champ)) {
-               return true;
-       } else {
-               $valeur_champ = _request($champ);
-       }
-
-       // On cherche le nom du champ
-       $nom_champ = $options['nom_champ'] ? $options['nom_champ'] : $champ;
-
-       switch ($options['comparaison']) {
-               case 'petit':
-                       return $valeur < $valeur_champ ? '' : _T('verifier:erreur_comparaison_petit', array('nom_champ'=>$nom_champ));
-                       break;
-               case 'petit_egal':
-                       return $valeur <= $valeur_champ ? '' : _T('verifier:erreur_comparaison_petit_egal', array('nom_champ'=>$nom_champ));
-                       break;
-               case 'grand':
-                       return $valeur > $valeur_champ ? '' : _T('verifier:erreur_comparaison_grand', array('nom_champ'=>$nom_champ));
-                       break;
-               case 'grand_egal':
-                       return $valeur >= $valeur_champ ? '' : _T('verifier:erreur_comparaison_grand_egal', array('nom_champ'=>$nom_champ));
-                       break;
-               case 'egal_type':
-                       return $valeur === $valeur_champ ? '' : _T('verifier:erreur_comparaison_egal_type', array('nom_champ'=>$nom_champ));
-                       break;
-               default:
-                       return $valeur == $valeur_champ ? '' : _T('verifier:erreur_comparaison_egal', array('nom_champ'=>$nom_champ));
-                       break;
-       }
-}
diff --git a/www/plugins/verifier/verifier/comparaison_champ.yaml b/www/plugins/verifier/verifier/comparaison_champ.yaml
deleted file mode 100644 (file)
index 754bb3f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-titre: '<:verifier:type_comparaison_champ:>'
-description: '<:verifier:type_comparaison_champ_description:>'
-options:
-  -
-    saisie: 'input'
-    options:
-      nom: 'champ'
-      label: '<:verifier:option_comparaison_champ_champ_label:>'
-      explication: '<:verifier:option_comparaison_champ_champ_explication:>'
-  -
-    saisie: 'input'
-    options:
-      nom: 'nom_champ'
-      label: '<:verifier:option_comparaison_champ_nom_champ_label:>'
-      explication: '<:verifier:option_comparaison_champ_nom_champ_explication:>'
-  -
-    saisie: 'radio'
-    options:
-      nom: 'comparaison'
-      label: '<:verifier:option_comparaison_champ_comparaison_label:>'
-      explication: '<:verifier:option_comparaison_champ_comparaison_explication:>'
-      datas:
-        egal: '<:verifier:option_comparaison_champ_egal:>'
-        egal_type: '<:verifier:option_comparaison_champ_egal_type:>'
-        petit: '<:verifier:option_comparaison_champ_petit:>'
-        petit_egal: '<:verifier:option_comparaison_champ_petit_egal:>'
-        grand: '<:verifier:option_comparaison_champ_grand:>'
-        grand_egal: '<:verifier:option_comparaison_champ_grand_egal:>'
diff --git a/www/plugins/verifier/verifier/couleur.php b/www/plugins/verifier/verifier/couleur.php
deleted file mode 100644 (file)
index 887a2dc..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie la validité d'un code couleur
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   type => hexa,...
- *   normaliser => oui ou rien
- * @param null $valeur_normalisee
- *   Si normalisation a faire, la variable sera rempli par la couleur normalisee.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_couleur_dist($valeur, $options = array(), &$valeur_normalisee = null) {
-       $erreur = _T('verifier:erreur_couleur');
-       if (!is_string($valeur)) {
-               return $erreur;
-       }
-
-       $ok = '';
-       switch ($options['type']) {
-               case 'hexa':
-               default:
-                       if (!preg_match(',^#[a-f0-9]{6}$,i', $valeur)) {
-                               if (isset($options['normaliser']) and preg_match(',^[a-f0-9]{6}$,i', $valeur)) {
-                                       $valeur_normalisee = '#'.$valeur;
-                               } else {
-                                       return $erreur;
-                               }
-                       }
-                       break;
-       }
-
-       return $ok;
-}
diff --git a/www/plugins/verifier/verifier/couleur.yaml b/www/plugins/verifier/verifier/couleur.yaml
deleted file mode 100644 (file)
index f20e507..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-\r
-titre: '<:verifier:type_couleur:>'\r
-description: '<:verifier:type_couleur_description:>'\r
-options:\r
-  -\r
-    saisie: 'radio'\r
-    options:\r
-      nom: 'type'\r
-      label: '<:verifier:option_couleur_type_label:>'\r
-      datas:\r
-        hexa: '<:verifier:option_couleur_type_hexa:>'\r
-      defaut: 'hexa'\r
-  -\r
-    saisie: 'oui_non'\r
-    options:\r
-      nom: 'normaliser'\r
-      label: '<:verifier:option_couleur_normaliser_label:>'\r
-      defaut: ''\r
diff --git a/www/plugins/verifier/verifier/date.php b/www/plugins/verifier/verifier/date.php
deleted file mode 100644 (file)
index bd628c5..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Une date au format JJ/MM/AAAA (avec séparateurs souples : espace / - .)
- * Options :
- * - format : permet de préciser le format de la date  jma pour jour/mois/année (par défaut), mja (pour mois / jour / année), amj (année/mois/jour)
- * TODO : compléter les formats
- * On pourrait faire mieux, genre vérifier les jours en fonction du mois
- * Mais c'est pas très important, on reste simple
- *
- * @param string|array $valeur
- *   La valeur à vérifier, en chaîne pour une date seule, en tableau contenant deux entrées "date" et "heure" si on veut aussi l'heure
- * @param array $options
- *   tableau d'options.
- * @param null $valeur_normalisee
- *   Si normalisation a faire, la variable sera rempli par la date normalisee.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_date_dist($valeur, $options = array(), &$valeur_normalisee = null) {
-       $erreur = _T('verifier:erreur_date_format');
-       $horaire = false; // par défaut on ne teste qu'une date
-
-       // Si ce n'est ni une chaîne ni un tableau : pas le bon format
-       if (!is_string($valeur) and !is_array($valeur)) {
-               return $erreur;
-       }
-
-       // Si c'est un tableau
-       if (is_array($valeur)) {
-               // S'il y a les bonnes infos on les garde aux bons endroits
-               if (isset($valeur['date']) and is_string($valeur['date'])
-                       and isset($valeur['heure']) and is_string($valeur['heure'])) {
-                       $options['heure'] = $valeur['heure']; // l'heure pour la fonction de normalisation
-                       $valeur = $valeur['date']; // valeur principale pour la date
-                       $horaire = true; // on détecte une vérif avec horaire uniquement dans ce cas
-               } else {
-                       // Sinon : pas le bon format
-                       return $erreur;
-               }
-       }
-
-       $ok = '';
-
-       // On tolère différents séparateurs
-       $valeur = preg_replace('#\.|/| #i', '-', $valeur);
-
-       // On vérifie la validité du format
-       $format = isset($options['format']) ? $options['format'] : 'jma';
-
-       if ($format=='mja') {
-               if (!preg_match('#^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$#', $valeur)) {
-                       return $erreur;
-               }
-               list($mois,$jour,$annee) = explode('-', $valeur);
-       } elseif ($format=='amj') {
-               if (!preg_match('#^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$#', $valeur)) {
-                       return $erreur;
-               }
-               list($annee,$mois,$jour) = explode('-', $valeur);
-       } else {
-       // Format jma par défaut
-               if (!preg_match('#^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$#', $valeur)) {
-                       return $erreur;
-               }
-               list($jour,$mois,$annee) = explode('-', $valeur);
-       }
-
-       // Validité de la date
-       $erreur = _T('verifier:erreur_date');
-       if (!checkdate($mois, $jour, $annee)) {
-               return $erreur;
-       }
-
-       if ($horaire) {
-               // Format de l'heure
-               $options['heure'] = str_replace(array('h','m','min'), array(':','',''), $options['heure']);
-               if (!preg_match('#^([0-9]{1,2}):([0-9]{1,2})$#', $options['heure'], $hetm)) {
-                       return _T('verifier:erreur_heure_format');
-               } else {
-                       // Si c'est le bon format, on teste si les nombres donnés peuvent exister
-                       $heures = intval($hetm[1]);
-                       $minutes = intval($hetm[2]);
-                       if ($heures < 0 or $heures > 23 or $minutes < 0 or $minutes > 59) {
-                               return _T('verifier:erreur_heure');
-                       } else {
-                               // Si tout est bon pour l'heure, on recompose en ajoutant des 0 si besoin
-                               $options['heure'] = sprintf('%02d:%02d', $heures, $minutes);
-                       }
-               }
-       }
-       // normaliser si demandé
-       if ($options['normaliser'] and $options['normaliser'] == 'datetime') {
-               $valeur_normalisee = normaliser_date_datetime_dist($valeur, $options, $ok);
-       }
-
-       return $ok;
-}
-
-/**
- * Convertir une date en datetime
- *
-**/
-function normaliser_date_datetime_dist($valeur, $options, &$erreur) {
-       $defaut = '0000-00-00 00:00:00';
-       if (!$valeur or $valeur==array('date'=>'','heure'=>'')) {
-               return $defaut;
-       }
-
-       $date = str_replace('-', '/', $valeur); // formater en jj/mm/aaaa
-
-       if (isset($options['heure'])) {
-               $date .= (' ' . $options['heure'] . ':00');
-       } else {
-               $date .= ' 00:00:00';
-       }
-
-       include_spip('inc/filtres');
-       if (!$date = recup_date($date)) {
-               $erreur = "Impossible d'extraire la date de $date";
-               return false;
-       }
-
-       if (!($date = mktime($date[3], $date[4], 0, (int)$date[1], (int)$date[2], (int)$date[0]))) {
-               // mauvais format de date
-               $erreur = 'Impossible de normaliser la date...';
-               return false;
-       }
-
-       $date = date('Y-m-d H:i:s', $date);
-       $date = vider_date($date); // enlever les valeurs considerees comme nulles (1 1 1970, etc...)
-
-       if (!$date) {
-               $date = $defaut;
-       }
-
-       return $date;
-}
diff --git a/www/plugins/verifier/verifier/date.yaml b/www/plugins/verifier/verifier/date.yaml
deleted file mode 100644 (file)
index aef4408..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-titre: '<:verifier:type_date:>'
-description: '<:verifier:type_date_description:>'
-options:
-  -
-    saisie: 'radio'
-    options:
-      nom: 'normaliser'
-      label: '<:verifier:normaliser_option_date:>'
-      datas:
-        aucune: '<:verifier:normaliser_option_date_aucune:>'
-        datetime: '<:verifier:normaliser_option_date_en_datetime:>'
-      defaut: 'datetime'
diff --git a/www/plugins/verifier/verifier/decimal.php b/www/plugins/verifier/verifier/decimal.php
deleted file mode 100644 (file)
index 168822e..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie qu'un entier cohérent peut être extrait de la valeur
- * Options :
- * - min : valeur minimale acceptée
- * - max : valeur maximale acceptée
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   Si ce tableau associatif contient une valeur pour 'min' ou 'max', un contrôle supplémentaire sera effectué.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_decimal_dist($valeur, $options = array()) {
-       $erreur = _T('verifier:erreur_decimal');
-       if (isset($options['separateur']) and $options['separateur']!='') {
-               $valeur = str_replace($options['separateur'], '.', $valeur);
-       }
-       // Pas de tableau ni d'objet
-       if (is_numeric($valeur) and $valeur == floatval($valeur)) {
-               // Si c'est une chaine on convertit en flottant
-               $valeur = floatval($valeur);
-               $ok = true;
-               $erreur = '';
-
-               if (isset($options['min'])) {
-                       $min = floatval(str_replace(",", '.', $options['min']));
-                       $ok = ($ok and ($valeur >= $min));
-               }
-
-               if (isset($options['max'])) {
-                       $max = floatval(str_replace(",", '.', $options['max']));
-                       $ok = ($ok and ($valeur <= $max));
-               }
-
-               if (!$ok) {
-                       if (isset($options['min']) and isset($options['max'])) {
-                               $erreur = _T('verifier:erreur_entier_entre', $options);
-                       } elseif (isset($options['max'])) {
-                               $erreur = _T('verifier:erreur_entier_max', $options);
-                       } else {
-                               $erreur = _T('verifier:erreur_entier_min', $options);
-                       }
-               }
-       }
-
-       // On vérifie le nombre de décimales après la virgule
-       if (isset($options['nb_decimales']) and $nb_decimales = $options['nb_decimales'] and round($valeur, $nb_decimales) != $valeur) {
-               $erreur = _T('verifier:erreur_decimal_nb_decimales', array('nb_decimales' => $nb_decimales));
-       }
-
-       return $erreur;
-}
diff --git a/www/plugins/verifier/verifier/decimal.yaml b/www/plugins/verifier/verifier/decimal.yaml
deleted file mode 100644 (file)
index da2ede6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-
-titre: '<:verifier:type_decimal:>'
-description: '<:verifier:type_decimal_description:>'
-options:
-  -
-    saisie: 'input'
-    options:
-      nom: 'separateur'
-      label: '<:verifier:option_decimal_separateur_label:>'
-      explication: '<:verifier:option_decimal_separateur_explication:>'
-      defaut: ','
-  -
-    saisie: 'input'
-    options:
-      nom: 'min'
-      label: '<:verifier:option_entier_min_label:>'
-    verifier:
-      type: 'decimal'
-      options:
-        separateur: ','
-  -
-    saisie: 'input'
-    options:
-      nom: 'max'
-      label: '<:verifier:option_entier_max_label:>'
-    verifier:
-      type: 'decimal'
-      options:
-        separateur: ','
-  -
-    saisie: 'input'
-    options:
-      nom: 'nb_decimales'
-      label: '<:verifier:option_decimal_nb_decimales_label:>'
-    verifier:
-      type: 'entier'
-      min: 0
diff --git a/www/plugins/verifier/verifier/email.php b/www/plugins/verifier/verifier/email.php
deleted file mode 100644 (file)
index 286f455..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie la validité d'une adresse de courriel.
- *
- * Les contraintes du mail sont déterminées par le mode de validation
- * En option, on contrôle aussi la disponibilité du mail dans la table des auteurs
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   Un éventuel tableau d'options.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_email_dist($valeur, $options = array()) {
-       include_spip('inc/filtres');
-       if (!is_string($valeur)) {
-               return $erreur;
-       }
-
-       // Disponibilite des courriels en base AUTEURS
-       // Si l'adresse n'est pas disponible, on stoppe tout sinon on continue
-       if (!empty($options['disponible']) and !verifier_disponibilite_email($valeur, isset($options['id_auteur']) ? $options['id_auteur'] : null)) {
-               return _T('verifier:erreur_email_nondispo', array('email' => echapper_tags($valeur)));
-       }
-
-       // Choix du mode de verification de la syntaxe des courriels
-       if (empty($options['mode']) or !in_array($options['mode'], array('normal','rfc5322','strict'))) {
-               $mode = 'normal';
-       } else {
-               $mode = $options['mode'];
-       }
-
-       $fonctions_disponibles = array(
-               'normal'  => 'email_valide',
-               'rfc5322' => 'verifier_email_rfc5322',
-               'strict'  => 'verifier_email_de_maniere_stricte'
-       );
-       $fonction_verif = $fonctions_disponibles[$mode];
-
-       if (!$fonction_verif($valeur)) {
-               return _T('verifier:erreur_email', array('email' => echapper_tags($valeur)));
-       } else {
-               return '';
-       }
-}
-
-/**
- * Changement de la RegExp d'origine
- *
- * Respect de la RFC5322
- *
- * @link (phraseur détaillé ici : http://www.dominicsayers.com/isemail/)
- * @param string $valeur La valeur à vérifier
- * @return boolean Retourne true uniquement lorsque le mail est valide
- */
-function verifier_email_rfc5322($valeur) {
-       // Si c'est un spammeur autant arreter tout de suite
-       if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $valeur)) {
-               spip_log("Tentative d'injection de mail : $valeur");
-               return false;
-       }
-       include_spip('inc/is_email');
-       foreach (explode(',', $valeur) as $adresse) {
-               if (!is_email(trim($adresse))) {
-                       return false;
-               }
-       }
-       return true;
-}
-
-/**
- * Version basique du contrôle des mails
- *
- * Cette version impose des restrictions supplémentaires
- * qui sont souvent utilisées pour des raison de simplification des adresses
- * (ex. comptes utilisateurs lisibles, etc..)
- *
- * @param string $valeur La valeur à vérifier
- * @return boolean Retourne true uniquement lorsque le mail est valide
- */
-function verifier_email_de_maniere_stricte($valeur) {
-       // Si c'est un spammeur autant arreter tout de suite
-       if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $valeur)) {
-               spip_log("Tentative d'injection de mail : $valeur");
-               return false;
-       }
-       foreach (explode(',', $valeur) as $adresse) {
-               // nettoyer certains formats
-               // "Marie Toto <Marie@toto.com>"
-               $adresse = trim(preg_replace(',^[^<>\"]*<([^<>\"]+)>$,i', '\\1', $adresse));
-               if (!preg_match('/^([A-Za-z0-9]){1}([A-Za-z0-9]|-|_|\.)*@[A-Za-z0-9]([A-Za-z0-9]|-|\.){1,}\.[A-Za-z]{2,4}$/', $adresse)) {
-                       return false;
-               }
-       }
-       return true;
-}
-
-/**
- * Vérifier que le courriel à tester n'est pas
- * déjà utilisé dans la table spip_auteurs
- *
- * @param string $valeur La valeur à vérifier
- * @return boolean Retourne false lorsque le mail est déjà utilisé
- */
-function verifier_disponibilite_email($valeur, $exclure_id_auteur = null) {
-       include_spip('base/abstract_sql');
-
-       if (sql_getfetsel('id_auteur', 'spip_auteurs', 'email='.sql_quote($valeur).(!is_null($exclure_id_auteur)?"AND statut<>'5poubelle' AND id_auteur<>".intval($exclure_id_auteur):''))) {
-               return false;
-       } else {
-               return true;
-       }
-}
diff --git a/www/plugins/verifier/verifier/email.yaml b/www/plugins/verifier/verifier/email.yaml
deleted file mode 100644 (file)
index bbd904f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-titre: '<:verifier:type_email:>'
-description: '<:verifier:type_email_description:>'
-options:
-  -
-    saisie: 'radio'
-    options:
-      nom: 'mode'
-      label: '<:verifier:option_email_mode_label:>'
-      datas:
-        normal: '<:verifier:option_email_mode_normal:>'
-        strict: '<:verifier:option_email_mode_strict:>'
-        rfc5322: '<:verifier:option_email_mode_5322:>'
-      defaut: 'normal'
-  -
-    saisie: 'case'
-    options:
-      nom: 'disponible'
-      label: '<:verifier:option_email_disponible_label:>'
-      label_case: '<:verifier:option_email_disponible_label_case:>'
diff --git a/www/plugins/verifier/verifier/entier.php b/www/plugins/verifier/verifier/entier.php
deleted file mode 100644 (file)
index 22d3cab..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie qu'un entier cohérent peut être extrait de la valeur
- * Options :
- * - min : valeur minimale acceptée
- * - max : valeur maximale acceptée
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   Si ce tableau associatif contient une valeur pour 'min' ou 'max', un contrôle supplémentaire sera effectué.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_entier_dist($valeur, $options = array()) {
-       $erreur = _T('verifier:erreur_entier');
-
-       // Pas de tableau ni d'objet
-       if (is_numeric($valeur) and $valeur == intval($valeur)) {
-               // Si c'est une chaine on convertit en entier
-               $valeur = intval($valeur);
-               $ok = true;
-               $erreur = '';
-
-               if (isset($options['min'])) {
-                       $ok = ($ok and ($valeur >= $options['min']));
-               }
-               if (isset($options['max'])) {
-                       $ok = ($ok and ($valeur <= $options['max']));
-               }
-
-               if (!$ok) {
-                       if (isset($options['min']) and isset($options['max'])) {
-                               $erreur = _T('verifier:erreur_entier_entre', $options);
-                       } elseif (isset($options['max'])) {
-                               $erreur = _T('verifier:erreur_entier_max', $options);
-                       } else {
-                               $erreur = _T('verifier:erreur_entier_min', $options);
-                       }
-               }
-       }
-
-       return $erreur;
-}
diff --git a/www/plugins/verifier/verifier/entier.yaml b/www/plugins/verifier/verifier/entier.yaml
deleted file mode 100644 (file)
index 43021a0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-titre: '<:verifier:type_entier:>'
-description: '<:verifier:type_entier_description:>'
-options:
-  -
-    saisie: 'input'
-    options:
-      nom: 'min'
-      label: '<:verifier:option_entier_min_label:>'
-    verifier:
-      type: 'entier'
-  -
-    saisie: 'input'
-    options:
-      nom: 'max'
-      label: '<:verifier:option_entier_max_label:>'
-    verifier:
-      type: 'entier'
diff --git a/www/plugins/verifier/verifier/fichiers.php b/www/plugins/verifier/verifier/fichiers.php
deleted file mode 100755 (executable)
index cea2b0a..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined("_ECRIRE_INC_VERSION")) {
-       return;
-}
-
-/**
- * Vérifier une saisie d'envoi de fichiers
- *
- * @param array|bool $valeur
- *   Le sous tableau de $_FILES à vérifier, $_FILES['logo'] par exemple
- *   Doit être un champ avec un ou plusieurs upload
- *   Si bool égal à true, cela signifie que le fichier avait déjà été vérifié, et qu'il est inutile de refaire la vérification. 
- * @param array $options
- *   Options à vérifier :
- *   - mime au choix 'pas_de_verification', 'image_web','tout_mime','specifique'
- *   - mime_specifique (si l'option 'mime_specifique' est choisi ci-dessus)
- *   - taille_max (en Kio)
- *   - dimension_max, tableau contenant les dimension max:
- *             - largeur (en px)
- *             - hauteur (en px)
- *             - autoriser_rotation : booléen à mettre à true (ou bien string égale à 'on') si on autorise une image qui tiendrait dans ces dimensions si on faisait une rotation de 90°
- *      - on peut remplacer ce tableau par des strings directement dans $options:
- *             - largeur_max
- *             - hauteur_max
- *             - autoriser_rotation
- * @param array|string &$erreurs_par_fichier
- *   Si on vérifier un upload multiple, un tableau, passé par référence, qui contient le détail des erreurs fichier de $_FILES['fichier'] par fichier
- *   Si on vérifie un upload unique, une chaîne qui contiendra l'erreur du fichier.  
- * @return string
-**/
-function verifier_fichiers_dist($valeur, $options, &$erreurs_par_fichier) {
-       if (!is_array($valeur['tmp_name'])){//si on reçoit une info de type fichier unique, on bascule comme si on était fichier multiple
-
-               if ($valeur === True) { // Si on n'a rien à vérifier
-                       return array(); 
-               };
-
-               $old_valeur = $valeur;
-               $valeur = array();
-               foreach ($old_valeur as $propriete=>$val){
-                       $valeur[$propriete][0] = $val;
-               }
-       }
-       
-       // normalisation de $options
-       if (isset($options['largeur_max']) and !isset($options['dimension_max']['largeur'])) {
-               if (!isset($options['dimension_max'])) {
-                       $options['dimension_max'] = array();
-               }
-               $options['dimension_max']['largeur'] = $options['largeur_max'];
-               unset($options['largeur_max']);
-       }
-       if (isset($options['hauteur_max']) and !isset($options['dimension_max']['hauteur'])) {
-               if (!isset($options['dimension_max'])) {
-                       $options['dimension_max'] = array();
-               }
-               $options['dimension_max']['hauteur'] = $options['hauteur_max'];
-               unset($options['hauteur_max']);
-       }
-       if (isset($options['dimension_autoriser_rotation']) and !isset($options['dimension_max']['autoriser_rotation'])) {
-               if (!isset($options['dimension_max'])) {
-                       $options['dimension_max'] = array();
-               }
-               $options['dimension_max']['autoriser_rotation'] = $options['dimension_autoriser_rotation'];
-               unset($options['dimension_autoriser_rotation']);
-       }
-       if (isset($options['dimension_max']['autoriser_rotation']) and $options['dimension_max']['autoriser_rotation'] == 'on') {
-        $options['dimension_max']['autoriser_rotation'] = True;
-       }
-       // Vérification proprement dite
-       foreach ($valeur['tmp_name'] as $cle=>$tmp_name){//On parcourt tous les fichiers
-               if ($valeur['error'][$cle] != 0 and $valeur['error'][$cle] !=4) {//On vérifie uniquement les fichiers bien expediés, si mal expedié, on indique une erreur générique. Si pas expediés, on indique rien
-                       $erreur = _T("verifier:erreur_php_file_".$valeur['error'][$cle], array('name'=>$valeur['name'][$cle]));
-                       if (!is_array($erreurs_par_fichier)) {
-                               $erreurs_par_fichier = $erreur;
-                               return $erreur;
-                       } else {
-                                       $erreurs_par_fichier[$cle] = "- $erreur";
-                       }
-                       continue;       
-               }
-               if ($valeur['error'][$cle] == 4) {
-                       continue;
-               }
-               foreach (array('mime','taille','dimension_max') as $verification){ // On va vérifier d'hivers choses, dans un certain ordre, en confiant cela à des fonctions homonymes
-                       $fonction_verification = "verifier_fichier_$verification";
-                       if ($erreur = $fonction_verification($valeur,$cle,$options)) {
-                               if (!is_array($erreurs_par_fichier)) {
-                                       $erreurs_par_fichier = $erreur;
-                                       return $erreur;
-                               } else{
-                                       $erreurs_par_fichier[$cle] = "- $erreur";
-                               }
-                       }
-               }
-       }
-       if (!empty($erreurs_par_fichier)){
-               return implode($erreurs_par_fichier,"<br />"); 
-       }
-       return '';
-}
-
-/**
- * Vérifier le mime type d'une saisie d'envoi de fichiers
- *
- * @param array $valeur
- *   Le sous tableau de $_FILES à vérifier, $_FILES['logo'] par exemple
- *   Doit être un champ plusieurs uploads
- * @param int $cle
- *   La clé du tableau qu'on vérifie
- * @param array $options
- *   Les options tels que passés à verifier_fichiers()
- * @return string
-**/
-function verifier_fichier_mime($valeur,$cle,$options){
-       if ($options['mime'] == 'pas_de_verification') {
-               return '';
-       }
-
-       // Récuperer les infos mime + extension
-       $mime_type = $valeur['type'][$cle];
-       $extension = pathinfo($valeur['name'][$cle],PATHINFO_EXTENSION);
-       
-       // Appliquer les alias de type_mime
-       include_spip('base/typedoc');
-       while (isset($GLOBALS['mime_alias'][$mime_type])) {
-               $mime_type = $GLOBALS['mime_alias'][$mime_type];
-       }
-
-       // Voir si les mime_type fournit par le serveur sont significatifs ou non
-       $mime_insignifiant = False;
-       if (in_array($valeur['type'][$cle], array('text/plain', '', 'application/octet-stream'))) { // si mime-type insignifiant, on se base uniquement sur l'extension (comme par exemple dans recuperer_infos_distantes())
-               $mime_insignifiant = True;
-       }
-
-       if ($options['mime'] == 'specifique'){
-               if (!$mime_insignifiant) {
-                       if (!in_array($mime_type,$options['mime_specifique'])){
-                               return _T('verifier:erreur_type_non_autorise',array('name'=>$valeur['name'][$cle]));
-                       }
-               }
-               $res = sql_select('mime_type','spip_types_documents', sql_in('mime_type',$options['mime_specifique']).' and extension='.sql_quote($extension));
-               if (sql_count($res) == 0) {
-                       return _T('verifier:erreur_type_non_autorise',array('name'=>$valeur['name'][$cle]));
-               }
-       } elseif ($options['mime'] == 'tout_mime') {
-               if (!$mime_insignifiant) {
-                       $res = sql_select('mime_type','spip_types_documents','mime_type='.sql_quote($mime_type).' and extension='.sql_quote($extension));
-               } else {
-                       $res = sql_select('mime_type','spip_types_documents','extension='.sql_quote($extension));
-               }
-               if (sql_count($res) == 0) {
-                       return _T('verifier:erreur_type_non_autorise',array('name'=>$valeur['name'][$cle]));
-               }
-       } elseif ($options['mime'] == 'image_web') {
-               if (!in_array($mime_type,array('image/gif','image/jpeg','image/png'))) {
-                       return _T('verifier:erreur_type_image',array('name'=>$valeur['name'][$cle]));
-               }
-       }
-       return '';
-}
-
-
-/**
- * Vérifier la taille d'une saisie d'envoi de fichiers
- *
- * La taille est vérifiée en fonction du paramètre passé en option, sinon en fonction d'une constante:
- *     - _IMG_MAX_SIZE si jpg/png/gif
- *     - _DOC_MAX_SIZE si pas jpg/png/gif ou si _IMG_MAX_SIZE n'est pas définie
- *
- * @param array $valeur
- *   Le sous tableau de `$_FILES` à vérifier, `$_FILES['logo']` par exemple
- *   Doit être un champ plusieurs uploads
- * @param int $cle
- *   La clé du tableau qu'on vérifie
- * @param array $options
- *   Les options tels que passés à verifier_fichiers()
- * @return string
-**/
-function verifier_fichier_taille($valeur,$cle,$options){
-       $taille = $valeur['size'][$cle];
-       $mime = $valeur['type'][$cle];
-
-       // On commence par déterminer la taille max
-       if (isset($options['taille_max'])) {
-               $taille_max = $options['taille_max'];
-       } elseif (in_array($mime, array('image/gif','image/jpeg','image/png')) and defined('_IMG_MAX_SIZE')) {
-               $taille_max = _IMG_MAX_SIZE;
-       } elseif (defined('_DOC_MAX_SIZE')) {
-               $taille_max = _DOC_MAX_SIZE;
-       } else {
-               $taille_max = 0; // pas de taille max.
-       }
-
-       $taille_max = intval($taille_max); // précaution
-
-       //Si la taille max est déterminée, on vérifie que le fichier ne dépasse pas cette taille
-       if ($taille_max) {
-               $taille_max = 1024 * $taille_max; // passage de l'expression en kibioctets à une expression en octets 
-               if ($taille > $taille_max) {
-                       return _T('verifier:erreur_taille_fichier', array(
-                               'name'       => $valeur['name'][$cle],
-                               'taille_max' => taille_en_octets($taille_max),
-                               'taille'     => taille_en_octets($taille)
-                       ));
-               }
-       }
-       return '';
-}
-
-/**
- * Vérifier la dimension d'une saisie d'envoi de fichiers
- *
- * Les dimensions sont vérifiées en fonction du paramètre passé en option, sinon en fonction des constantes:
- *     - _IMG_MAX_WIDTH
- *     - _IMG_MAX_HEIGHT
- *
- * On suppose que le type mime a été vérifié auparavent
- * @param array $valeur
- *   Le sous tableau de $_FILES à vérifier, $_FILES['logo'] par exemple
- *   Doit être un champ plusieurs uploads
- * @param int $cle
- *   La clé du tableau qu'on vérifie
- * @param array $options
- *   Les options tels que passés à verifier_fichiers()
- * @return string
- **/
-function verifier_fichier_dimension_max($valeur, $cle, $options) {
-       // On commence par récupérer les dimension de l'image
-       include_spip('inc/filtres');
-       $imagesize = @getimagesize($valeur['tmp_name'][$cle]);
-
-       // Puis les infos sur ce qu'on autorise
-       $largeur_max = (isset($options['dimension_max']['largeur']) ? $options['dimension_max']['largeur'] : (defined('_IMG_MAX_WIDTH') ? _IMG_MAX_WIDTH : 0));
-       $hauteur_max = (isset($options['dimension_max']['hauteur']) ? $options['dimension_max']['hauteur'] : (defined('_IMG_MAX_HEIGHT') ? _IMG_MAX_HEIGHT : 0));
-       $autoriser_rotation = (isset($options['dimension_max']['autoriser_rotation'])) ? $options['dimension_max']['autoriser_rotation'] : false;
-       
-       // Et on teste, si on a ce qui est nécessaire pour tester
-       if ($imagesize and ($hauteur_max or $largeur_max)) {
-               if ($autoriser_rotation) { // dans le cas où on autorise une rotation
-                       if (
-                                       ($imagesize[0] > $largeur_max or $imagesize[1] > $hauteur_max)
-                                       and  
-                                       ($imagesize[1] > $largeur_max or $imagesize[0] > $hauteur_max)
-                               )       {
-                               return _T('verifier:erreur_dimension_image', array(
-                                       'name'       => $valeur['name'][$cle],
-                                       'taille_max' => $largeur_max . '&nbsp;px * ' . $hauteur_max . '&nbsp;px',
-                                       'taille'     => $imagesize[0] . '&nbsp;px * ' . $imagesize[1] . '&nbsp;px'
-                                       )
-                               );
-                       }
-               } else { // dans le cas où on autorise pas la rotation
-                       if ($imagesize[0] > $largeur_max or $imagesize[1] > $hauteur_max) {
-                               return _T('verifier:erreur_dimension_image', array(
-                                       'name'       => $valeur['name'][$cle],
-                                       'taille_max' => $largeur_max . '&nbsp;px * ' . $hauteur_max . '&nbsp;px',
-                                       'taille'     => $imagesize[0] . '&nbsp;px * ' . $imagesize[1] . '&nbsp;px'
-                                       )
-                               );
-                       }
-               }
-       }
-}
diff --git a/www/plugins/verifier/verifier/fichiers.yaml b/www/plugins/verifier/verifier/fichiers.yaml
deleted file mode 100644 (file)
index d61b30b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-titre: '<:verifier:type_fichiers:>'
-description: '<:verifier:type_fichiers_description:>'
-options:
-  -
-    saisie: 'radio'
-    options:
-      nom: 'mime'
-      label: '<:verifier:option_fichiers_mime_label:>'
-      datas:
-        pas_de_verification: '<:verifier:option_fichiers_mime_pas_de_verification_label:>'
-        tout_mime: '<:verifier:option_fichiers_mime_tout_mime_label:>'
-        image_web: '<:verifier:option_fichiers_mime_image_web_label:>'
-        specifique: '<:verifier:option_fichiers_mime_specifique_label:>'
-      defaut: 'tout_mime'
-  -
-    saisie: 'type_mime'
-    options:
-      nom: 'mime_specifique'
-      label: '<:verifier:option_fichiers_type_mime_label:>'
-      afficher_si: "@mime@=='specifique'"
-  - 
-    saisie: 'input'
-    options:
-      nom: 'taille_max'
-      label: '<:verifier:option_fichiers_taille_max_label:>'
-    verifier:
-      type: 'entier'
-      options:
-        min: 0
-  -  
-    saisie: 'input'
-    options:
-      nom: 'largeur_max'
-      label: '<:verifier:option_fichiers_largeur_max_label:>'
-    verifier:
-      type: 'entier'
-      options:
-        min: 0
-  -  
-    saisie: 'input'
-    options:
-      nom: 'hauteur_max'
-      label: '<:verifier:option_fichiers_hauteur_max_label:>'
-    verifier:
-      type: 'entier'
-      options:
-        min: 0
-  -  
-    saisie: 'case'
-    options:
-      nom: 'dimension_autoriser_rotation'
-      label: '<:verifier:option_fichiers_dimension_autoriser_rotation_label:>'
-      label_case: '<:verifier:option_fichiers_dimension_autoriser_rotation_label_case:>'
-      value: 'on'
diff --git a/www/plugins/verifier/verifier/id_document.php b/www/plugins/verifier/verifier/id_document.php
deleted file mode 100644 (file)
index 08bdb61..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie que la valeur correspond à un id_dcoument valide
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_id_document_dist($valeur, $options = array()) {
-       $erreur = '';
-
-       if ($valeur !== '') {
-               // On vérifie déjà qu'il s'agit d'un nombre
-               if (!is_numeric($valeur)) {
-                       $erreur = _T('verifier:erreur_id_document');
-               } elseif (!sql_countsel('spip_documents', 'id_document='.intval($valeur))) {
-                       // Puis qu'il y a au moins un document avec cet id
-                       $erreur = _T('verifier:erreur_id_document');
-               }
-       }
-
-       return $erreur;
-}
diff --git a/www/plugins/verifier/verifier/id_document.yaml b/www/plugins/verifier/verifier/id_document.yaml
deleted file mode 100644 (file)
index f922b72..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-titre: '<:verifier:type_id_document:>'
-description: '<:verifier:type_id_document_description:>'
diff --git a/www/plugins/verifier/verifier/id_objet.php b/www/plugins/verifier/verifier/id_objet.php
deleted file mode 100644 (file)
index d14edeb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie que la valeur correspond à un identifiant d'objet valide
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_id_objet_dist($valeur, $options = array()) {
-       $erreur = '';
-
-       if ($valeur !== '') {
-               // On vérifie déjà qu'il s'agit d'un nombre
-               if (!is_numeric($valeur)) {
-                       $erreur = _T('verifier:erreur_id_objet');
-               } elseif (isset($options['objet'])) {
-                       $id_table_objet = id_table_objet($options['objet']);
-                       $table = table_objet_sql($options['objet']);
-                       if ($id_table_objet && $table) {
-                               if (!sql_countsel($table, $id_table_objet.'='.intval($valeur))) {
-                                       $erreur = _T('verifier:erreur_id_objet');
-                               }
-                       } else {
-                               $erreur = _T('verifier:erreur_objet');
-                       }
-               }
-       }
-
-       return $erreur;
-}
diff --git a/www/plugins/verifier/verifier/id_objet.yaml b/www/plugins/verifier/verifier/id_objet.yaml
deleted file mode 100644 (file)
index 122337e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-titre: '<:verifier:type_id_objet:>'
-description: '<:verifier:type_id_objet_description:>'
-options:
-  -
-    saisie: 'input'
-    options:
-      nom: 'objet'
-      label: '<:verifier:option_id_objet_objet_label:>'
diff --git a/www/plugins/verifier/verifier/image_upload.php b/www/plugins/verifier/verifier/image_upload.php
deleted file mode 100755 (executable)
index a36134a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined("_ECRIRE_INC_VERSION")) {
-       return;
-}
-
-/**
- * Vérifier un upload d'image unique
- * Cette fonction est depréciée, on utilisera de préférence la vérification 'fichiers', plus souple, et à laquelle la présente fonction renvoie. 
- * @param array $valeur
- *   Le sous tableau de $_FILES à vérifier, $_FILES['logo'] par exemple
- *   Doit être un champ avec un seul upload
- * @param array $options
- *   Options à vérifier :
- *   - taille_max (en kio)
- *   - largeur_max (en px)
- *   - hauteur_max (en px)
- *
- * @return string
- */
-function verifier_image_upload_dist($valeur, $options) {
-       // Convertir pour les nouveaux réglages de la vérification 'fichier'
-       $nouvelles_options = array('mime'=>'image_web');
-       if (isset($options['taille_max'])) {
-               $nouvelles_options['taille_max'] = $options['taille_max'];
-       }
-       if (isset($options['largeur_max']) or isset($options['hauteur_max'])) {
-               $nouvelles_options['dimension_max'] = array();
-               if (isset($options['largeur_max'])) {
-                       $nouvelles_options['dimension_max']['largeur'] = $options['largeur_max']; 
-               }
-               if (isset($options['hauteur_max'])) {
-                       $nouvelles_options['dimension_max']['hauteur'] = $options['hauteur_max']; 
-               }
-       }
-       $verifier = charger_fonction('verifier', 'inc', true);
-
-       return $verifier($valeur, 'fichiers', $nouvelles_options, $valeur_normalisee);
-}
diff --git a/www/plugins/verifier/verifier/image_upload_multiple.php b/www/plugins/verifier/verifier/image_upload_multiple.php
deleted file mode 100755 (executable)
index 5988b6d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined("_ECRIRE_INC_VERSION")) {
-       return;
-}
-
-/**
- * Vérifier un upload d'image unique ou multiple
- * 
- * Cette fonction n'est conservée que pour compatibilité ascendant. 
- * Lui préferer la vérification 'fichiers', qui possède plus d'options, et qui est d'ailleurs appeler ici. 
- *
- * @param array $valeur
- *   Le sous tableau de $_FILES à vérifier
- *   Peut être un champ avec plusieurs uploads
- * @param array $options
- *   Options à vérifier :
- *   - taille_max (en kio)
- *   - largeur_max (en px)
- *   - hauteur_max (en px)
- * @param null  $valeur_normalisee
- *   Retourne un tableau des indexes de fichiers en erreur
- *
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-
-function verifier_image_upload_multiple_dist($valeur, $options = array(), &$valeur_normalisee = null) {
-       // Convertir pour les nouveaux réglages de la vérification 'fichier'
-       $nouvelles_options = array('mime'=>'image_web');
-       if (isset($options['taille_max'])) {
-               $nouvelles_options['taille_max'] = $options['taille_max'];
-       }
-       if (isset($options['largeur_max']) or isset($options['hauteur_max'])) {
-               $nouvelles_options['dimension_max'] = array();
-               if (isset($options['largeur_max'])) {
-                       $nouvelles_options['dimension_max']['largeur'] = $options['largeur_max']; 
-               }
-               if (isset($options['hauteur_max'])) {
-                       $nouvelles_options['dimension_max']['hauteur'] = $options['hauteur_max']; 
-               }
-       }
-       $verifier = charger_fonction('verifier', 'inc', true);
-
-       return $verifier($valeur, 'fichiers', $nouvelles_options, $valeur_normalisee);
-
-}
diff --git a/www/plugins/verifier/verifier/isbn.php b/www/plugins/verifier/verifier/isbn.php
deleted file mode 100644 (file)
index 34946b1..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Validation d'un numero ISBN
- *
- * d apres https://fr.wikipedia.org/wiki/Numéro_ISBN
- * ISBN-13 : longeur totale 13 caracteres divises en 5 segments de la forme G - A - B - C - K
- *           G:  3 caracteres (978 ou 979)
- *           A:  de 1 a 5 caracteres (code de la zone geographique)
- *           B:  de 1 a 7 caracteres (code de l editeur)
- *           C:  de 1 a 6 caracteres, completes eventuellement par des 0 afin que le total-G soit egal a 10 caracteres (code du livre)
- *           K:  1 caractere entre 0 et 9 (cle de controle calculee d apres les autres chiffres)
- *           ex: 978-2-1234-5680-3
- * ISBN-10 : longeur totale 10 caracteres divises en 4 segments de la forme A -B -C -K
- *           A, B, C : idem ISBN-13
- *           K:  1 caractere entre 0 et 9, ou X (cle de controle calculee d apres les autres chiffres)
- *           ex: 2-1234-5680-X
- *
- * Avec un numero ISBN comportant des tirets, on pourrait utiliser une regex
- * pour verifier que chaque segment comporte le nombre adequat de caracteres.
- * Cependant ca ne permet pas d indiquer precisement la nature de l erreur.
- * La regex au cas ou : "/^(97[89][- ]){0,1}[0-9]{1,5}[- ][0-9]{1,7}[- ][0-9]{1,6}[- ][0-9X]$/"
- *
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-
-function verifier_isbn_dist($valeur, $options = array()) {
-
-       // dans tous les cas, on doit avoir 10 ou 13 caracteres (en enlevant les tirets)
-       $val['nb'] = $nb = strlen(preg_replace('/-/', '', $valeur));
-       if (!preg_match('/10|13/', $nb)) {
-               return _T('verifier:erreur_isbn_nb_caracteres', $val);
-       } else if (preg_match('/^97[89].*X$/', $valeur)) {
-               // un numero ISBN-13 ne peut pas se terminer par X
-               return _T('verifier:erreur_isbn_13_X');
-       } else {
-               // s il y a le bon nombre de caracteres, on verifie qu il soient bien agences
-               // si le numero ISBN est decompose en segments par des tirets, verifier chaque segment
-               if (preg_match('/-/', $valeur)) {
-                       // d'abord on recupere les valeurs de chaque segment
-                       $segments = explode('-', $valeur);
-                       $val['nb'] = count($segments);
-                       // ISBN-13
-                       if ($val['nb'] == 5) {
-                               $isbn = 13;
-                               $G = $segments[0];
-                               $A = $segments[1];
-                               $B = $segments[2];
-                               $C = $segments[3];
-                               $K = $segments[4];
-                       } elseif ($val['nb'] == 4) {
-                               // ISBN-10
-                               $isbn = 10;
-                               $A = $segments[0];
-                               $B = $segments[1];
-                               $C = $segments[2];
-                               $K = $segments[3];
-                       } else {
-                               // nombre de segments incorrect (on ne sait jamais)
-                               return _T('verifier:erreur_isbn_nb_segments', $val);
-                       }
-
-                       // puis ensuite, on verifie leur conformite
-                       // G : 978 ou 979
-                       if ($G and !preg_match('/97[89]/', $G)) {
-                               return _T('verifier:erreur_isbn_G');
-                       }
-                       // A, B et C doivent contenir des chiffres
-                       foreach (array($A,$B,$C) as $segment) {
-                               $val['segment'] = $segment;
-                               if (!is_numeric($segment)) {
-                                       return _T('verifier:erreur_isbn_segment_lettre', $val);
-                               }
-                       }
-                       // A (code zone geographique) : 5 caracteres max
-                       if ($nbA = strlen($A) and $nbA > 5) {
-                               $val['nb'] = $nbA - 5;
-                               $val['segment'] = $A;
-                               return _T('verifier:erreur_isbn_segment', $val);
-                       }
-                       // B (code editeur) : 7 caracteres max
-                       if ($nbB = strlen($B) and $nbB > 7) {
-                               $val['nb'] = $nbB - 7;
-                               $val['segment'] = $B;
-                               return _T('verifier:erreur_isbn_segment', $val);
-                       }
-                       // C (code livre) : 6 caracteres max
-                       if ($nbC = strlen($C) and $nbC > 6) {
-                               $val['nb'] = $nbC - 6;
-                               $val['segment'] = $C;
-                               return _T('verifier:erreur_isbn_segment', $val);
-                       }
-                       // K (cle de controle) : 1 caractere max
-                       if ($nbK = strlen($K) and $nbK > 1) {
-                               $val['nb'] = $nbK - 1;
-                               $val['segment'] = $K;
-                               return _T('verifier:erreur_isbn_segment', $val);
-                       }
-               } else {
-                       // si le numero ISBN n a pas de tiret, on verifie au moyen d une regex
-                       // verification generique [978 ou 979] [9 chiffres] [1 chiffre ou lettre X]
-                       if (!preg_match('/^(97[89]){0,1}[0-9]{1,9}[0-9X]$/', $valeur)) {
-                               return _T('verifier:erreur_isbn');
-                       }
-               }
-       }
-
-       return '';
-}
diff --git a/www/plugins/verifier/verifier/isbn.yaml b/www/plugins/verifier/verifier/isbn.yaml
deleted file mode 100644 (file)
index 738ff27..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-titre: '<:verifier:type_isbn:>'
-description: '<:verifier:type_isbn_description:>'
diff --git a/www/plugins/verifier/verifier/password.php b/www/plugins/verifier/verifier/password.php
deleted file mode 100644 (file)
index dc91e5a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie les passwords
- * Options :
- *
- * - match : Nom du champ avec lequel le password dois correspondre
- * - longueur : taille minimum du password. Si la longueur a pour valeur "spip",
- * c'est la constante _PASS_LONGUEUR_MINI qui sera utilisée
- *
- * @param string $valeur
- * @param array $options
- * @access public
- * @return string
- */
-function verifier_password_dist($valeur, $options = array()) {
-       $erreur = '';
-
-       // Si on demander la longueur de password définie par SPIP
-       if ($options['longueur'] == 'spip') {
-               $options['longueur'] = _PASS_LONGUEUR_MINI;
-       }
-
-       // Vérification de la longueur
-       if (strlen($valeur) < $options['longueur']) {
-               $erreur = _T('info_passe_trop_court_car_pluriel', array('nb' => $options['longueur']));
-       }
-
-       // Vérification de la correspondance entre les passwords
-       if ($match = $options['match'] and _request($match) != $valeur) {
-               $erreur = _T('info_passes_identiques');
-       }
-
-       return $erreur;
-}
diff --git a/www/plugins/verifier/verifier/regex.php b/www/plugins/verifier/verifier/regex.php
deleted file mode 100644 (file)
index 2157049..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifié une valeur suivant une expression régulière.
- * Options :
- * - modele : chaine représentant l'expression
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   Contient une chaine représentant l'expression.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_regex_dist($valeur, $options = array()) {
-       $erreur = _T('verifier:erreur_regex');
-       if (!is_string($valeur)) {
-               return $erreur;
-       }
-
-       if (preg_match($options['modele'], $valeur)) {
-               return '';
-       }
-
-       return $erreur;
-}
diff --git a/www/plugins/verifier/verifier/regex.yaml b/www/plugins/verifier/verifier/regex.yaml
deleted file mode 100644 (file)
index 590aaf4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-titre: '<:verifier:type_regex:>'
-description: '<:verifier:type_regex_description:>'
-options:
-  -
-    saisie: 'input'
-    options:
-      nom: 'modele'
-      label: '<:verifier:option_regex_modele_label:>'
diff --git a/www/plugins/verifier/verifier/siren_siret.php b/www/plugins/verifier/verifier/siren_siret.php
deleted file mode 100644 (file)
index 0d488df..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Validation d'un SIREN ou d'un SIRET
- *
- * 1/ Un SIREN comporte STRICTEMENT 9 caractères
- * 1b/ Un SIRET comporte strictement 14 caractères
- * 2/ Un siren/siret utilise une clef de controle "1-2"
- *    Un siren/siret est donc valide si la somme des chiffres pairs
- *    + la somme du double de tous les chiffres impairs (16 = 1+6 = 7) est un multiple de 10
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   Indique s'il faut tester le SIREN ou le SIRET.
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_siren_siret_dist($valeur, $options = array()) {
-       if (!$options['mode'] or !in_array($options['mode'], array('siren', 'siret'))) {
-               $mode = 'siren';
-       } else {
-               $mode = $options['mode'];
-       }
-
-       // on supprime les espaces avant d'effectuer les tests
-       $valeur = preg_replace('/\s/', '', $valeur);
-
-       // Test de SIREN
-       if ($mode == 'siren') {
-               $erreur = _T('verifier:erreur_siren');
-               if (!is_string($valeur)) {
-                       return $erreur;
-               }
-
-               // Si pas 9 caractère, c'est déjà foiré !
-               if (!preg_match('/^[0-9]{9}$/', $valeur)) {
-                       return $erreur;
-               }
-
-               // On vérifie la clef de controle "1-2"
-               $somme = 0;
-               $i = 0; // Les impaires
-               while ($i < 9) {
-                       $somme += $valeur[$i];
-                       $i+=2;
-               }
-               $i = 1; // Les paires !
-               while ($i < 9) {
-                       if ((2*$valeur[$i])>9) {
-                               $somme += (2*$valeur[$i])-9;
-                       } else {
-                               $somme += 2*$valeur[$i];
-                       }
-                       $i+=2;
-               }
-
-               if ($somme % 10) {
-                       return $erreur;
-               }
-       } else {
-               // Test de SIRET
-               $erreur = _T('verifier:erreur_siret');
-               if (!is_string($valeur)) {
-                       return $erreur;
-               }
-
-               // Si pas 14 caractère, c'est déjà foiré !
-               if (!preg_match('/^[0-9]{14}$/', $valeur)) {
-                       return $erreur;
-               }
-               if (preg_match('/[0]{8}/', $valeur)) {
-                       return $erreur;
-               }
-
-               // Pour le SIRET on vérifie la clef de controle "1-2" avec les impaires *2
-               // (vs pairs*2 pour SIREN, parce qu'on part de la fin)
-               $somme = 0;
-               $i = 1; // Les paires
-               while ($i < 14) {
-                       $somme += $valeur[$i];
-                       $i+=2;
-               }
-               $i = 0; // Les impaires !
-               while ($i < 14) {
-                       if ((2*$valeur[$i])>9) {
-                               $somme += (2*$valeur[$i])-9;
-                       } else {
-                               $somme += 2*$valeur[$i];
-                       }
-                       $i+=2;
-               }
-
-               if ($somme % 10) {
-                       return $erreur;
-               }
-       }
-
-       return '';
-}
diff --git a/www/plugins/verifier/verifier/siren_siret.yaml b/www/plugins/verifier/verifier/siren_siret.yaml
deleted file mode 100644 (file)
index c9d8b30..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-titre: '<:verifier:type_siren_siret:>'
-description: '<:verifier:type_siren_siret_description:>'
-options:
-  -
-    saisie: 'radio'
-    options:
-      nom: 'mode'
-      label: '<:verifier:option_siren_siret_mode_label:>'
-      datas:
-        siren: '<:verifier:option_siren_siret_mode_siren:>'
-        siret: '<:verifier:option_siren_siret_mode_siret:>'
diff --git a/www/plugins/verifier/verifier/taille.php b/www/plugins/verifier/verifier/taille.php
deleted file mode 100644 (file)
index f74a61c..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifier une taille minimale/maximale, pour un mot de passe par exemple
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   Les éléments à vérifier (min, max, egal).
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-
-function verifier_taille_dist($valeur, $options = array()) {
-       $ok = true;
-       if (!is_string($valeur)) {
-               return _T('erreur_inconnue_generique');
-       }
-
-       include_spip('inc/charsets');
-       $erreur = '';
-       $taille = spip_strlen($valeur);
-
-       if (isset($options['min'])) {
-               $ok = ($ok and ($taille >= $options['min']));
-       }
-
-       if (isset($options['max'])) {
-               $ok = ($ok and ($taille <= $options['max']));
-       }
-       if (isset($options['egal'])) {
-               $ok = ($ok and ($taille == $options['egal']));
-       }
-
-       if (!$ok) {
-               // On ajoute la taille actuelle aux valeurs de remplacement
-               $options['nb'] = $taille;
-               if (isset($options['min']) and isset($options['max'])) {
-                       $erreur = _T('verifier:erreur_taille_entre', $options);
-               } elseif (isset($options['max'])) {
-                       $erreur = _T('verifier:erreur_taille_max', $options);
-               } elseif (isset($options['egal'])) {
-                       $erreur = _T('verifier:erreur_taille_egal', $options);
-               } else {
-                       $erreur = _T('verifier:erreur_taille_min', $options);
-               }
-       }
-
-       return $erreur;
-}
diff --git a/www/plugins/verifier/verifier/taille.yaml b/www/plugins/verifier/verifier/taille.yaml
deleted file mode 100644 (file)
index 3b9283c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-titre: '<:verifier:type_taille:>'
-description: '<:verifier:type_taille_description:>'
-options:
-  -
-    saisie: 'input'
-    options:
-      nom: 'min'
-      label: '<:verifier:option_taille_min_label:>'
-    verifier:
-      type: 'entier'
-      options:
-        min: 0
-  -
-    saisie: 'input'
-    options:
-      nom: 'max'
-      label: '<:verifier:option_taille_max_label:>'
-    verifier:
-      type: 'entier'
-      options:
-        min: 0
diff --git a/www/plugins/verifier/verifier/telephone.php b/www/plugins/verifier/verifier/telephone.php
deleted file mode 100644 (file)
index 35065ff..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérifie un numéro de téléphone. Pour l'instant seulement avec le schéma français.
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *   [INUTILISE].
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_telephone_dist($valeur, $options = array()) {
-       $erreur = _T('verifier:erreur_telephone');
-       if (!is_string($valeur)) {
-               return $erreur;
-       }
-       $ok = '';
-
-       // On accepte differentes notations, les points, les tirets, les espaces, les slashes
-       $tel = preg_replace('#\.|/|-| #i', '', $valeur);
-
-       // Pour les prefixes, on accepte les notations +33 et 0033
-       $prefixe_FR = '/^(\+|00)33/';
-       $prefixe_ES = '/^(\+|00)34/';
-       $prefixe_CH = '/^(\+|00)41/';
-       if (preg_match($prefixe_FR, $tel)) {
-               $options['pays'] = 'FR';
-               $tel = preg_replace($prefixe_FR, '0', $tel);
-       }
-       if (preg_match($prefixe_ES, $tel)) {
-               $options['pays'] = 'ES';
-               $tel = preg_replace($prefixe_ES, '', $tel);
-       }
-       if (preg_match($prefixe_CH, $tel)) {
-               $options['pays'] = 'CH';
-               $tel = preg_replace($prefixe_CH, '0', $tel);
-       }
-
-       $pays = isset($options['pays']) ? $options['pays'] : null;
-       switch ($pays) {
-               case 'CH':
-                       if (!preg_match('/^0[1-9]{9}$/', $tel)) {
-                               return $erreur;
-                       }
-                       break;
-               case 'ES':
-                       if (!preg_match('/^[69][0-9]{8}$/', $tel)) {
-                               return $erreur;
-                       }
-                       break;
-               case 'FR':
-                       if (!preg_match('/^0[1-9][0-9]{8}$/', $tel)) {
-                               return $erreur;
-                       }
-                       break;
-               default:
-                       // On interdit les 000 etc. mais je pense qu'on peut faire plus malin
-                       // On interdit egalement les "numéros" tout en lettres
-                       // TODO finaliser les numéros à la con
-                       if (intval($tel) == 0) {
-                               return $erreur;
-                       }
-                       break;
-       }
-
-       return $ok;
-}
diff --git a/www/plugins/verifier/verifier/telephone.yaml b/www/plugins/verifier/verifier/telephone.yaml
deleted file mode 100644 (file)
index dacf99a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-titre: '<:verifier:type_telephone:>'
-description: '<:verifier:type_telephone_description:>'
diff --git a/www/plugins/verifier/verifier/url.php b/www/plugins/verifier/verifier/url.php
deleted file mode 100644 (file)
index 44e7a86..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-/**
- * Vérification d'une URL
- *
- * Si auncune option n'est définie, vérifie uniquement si un protocole de type web est défini
- *
- * @param string $valeur
- *   La valeur à vérifier.
- * @param array $options
- *      mode : protocole_seul, php_filter, complet
- *              type_protocole : tous, web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), exact
- *     protocole : nom du protocole (si type_protocole=exact)
- * @return string
- *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
- */
-function verifier_url_dist($valeur, $options = array()) {
-       if (!is_string($valeur)) {
-               return _T('erreur_inconnue_generique');
-       }
-
-       // Choix du mode de verification de la syntaxe des url
-       if (!$options['mode'] or !in_array($options['mode'], array('protocole_seul','php_filter','complet'))) {
-               $mode = 'protocole_seul';
-       } else {
-               $mode = $options['mode'];
-       }
-
-       // Choix du type de protocole à vérifier
-       if (!$options['type_protocole'] or !in_array($options['type_protocole'], array('tous','web','mail','ftp','webcal_souple','webcal_strict','exact'))) {
-               $type_protocole = 'web';
-               $protocole = '';
-       } else {
-               $type_protocole = $options['type_protocole'];
-               $protocole = '' ;
-               if ($type_protocole=='exact' && $options['protocole']) {
-                       $protocole = $options['protocole'];
-               }
-       }
-
-       $fonctions_disponibles = array('protocole_seul' => 'verifier_url_protocole', 'php_filter' => 'verifier_php_filter', 'complet' => 'verifier_url_complet');
-       $fonction_verif = $fonctions_disponibles[$mode];
-       return $fonction_verif($valeur,$type_protocole,$protocole) ;
-}
-
-/**
- * Vérifier uniquement la présence d'un protocole
- *
- * @param string $valeur La valeur à vérifier
- * @param string $type_protocole : tous, web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), webcal (webcal, http, https), exact
- * @param string $protocole : nom du protocole (si type_protocole=exact)
- * @return boolean Retourne true uniquement lorsque l'url est valide
- */
-function verifier_url_protocole($url, $type_protocole, $protocole) {
-
-       $urlregex = array(
-               'tous' => '#^([a-z0-9]*)\:\/\/.*$# i',
-               'web' => '#^(https?)\:\/\/.*$# i',
-               'ftp' => '#^(s?ftp)\:\/\/.*$# i',
-               'mail' => '#^(pop3|smtp|imap)\:\/\/.*$# i',
-               'webcal' => '#^(webcal|https?)\:\/\/.*$# i',
-               'exact' => '#^(".$protocole.")\:\/\/.*$# i'
-       );
-
-       $msg_erreur = array(
-               'tous' => '',
-               'web' => 'http://, https://',
-               'ftp' => '^ftp://, sftp://',
-               'mail' => 'pop3://, smtp://, imap://',
-               'webcal' => 'webcal://, http://, https://',
-               'exact' => $protocole.'://'
-       );
-
-
-       if (!preg_match($urlregex[$type_protocole], $url)) {
-               if ($type_protocole == 'tous') {
-                       return _T('verifier:erreur_url_protocole_exact', array('url' => echapper_tags($url)));
-               } else {
-                       return _T('verifier:erreur_url_protocole', array('url' => echapper_tags($url),'protocole' => $msg_erreur[$type_protocole]));
-               }
-       }
-       return '';
-}
-
-/**
- * Vérifier la présence d'un protocole,
- * puis utilise le filtre FILTER_VALIDATE_URL de PHP pour s'assurer que l'url est complète
- *
- * @param string $valeur La valeur à vérifier
- * @param string $type_protocole : tous, web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), webcal (webcal, http, https), exact
- * @param string $protocole : nom du protocole (si type_protocole=exact)
- * @return boolean Retourne true uniquement lorsque l'url est valide
- */
-function verifier_php_filter($url, $type_protocole, $protocole) {
-       if ($msg = verifier_url_protocole($url, $type_protocole, $protocole)) {
-               return $msg;
-       }
-       if (!filter_var($url, FILTER_VALIDATE_URL)) {
-               return _T('verifier:erreur_url', array('url' => echapper_tags($valeur)));
-       }
-       return '';
-}
-
-/**
- * Vérifier la présence d'un protocole et de la bonne syntaxe du reste de l'url
- *
- * http://phpcentral.com/208-url-validation-in-php.html
- * <http[s]|ftp> :// [user[:pass]@] hostname [port] [/path] [?getquery] [anchor]
- *
- * @param string $valeur La valeur à vérifier
- * @param string $type_protocole : web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), webcal (webcal, http, https), exact
- * @param string $protocole : nom du protocole (si type_protocole=exact)
- * @return boolean Retourne true uniquement lorsque l'url est valide
- */
-function verifier_url_complet($url, $type_protocole, $protocole) {
-
-       if ($msg = verifier_url_protocole($url, $type_protocole, $protocole)) {
-               return $msg;
-       }
-       // SCHEME
-       $urlregex = '#^(.*)\:\/\/';
-
-       // USER AND PASS (optional)
-       $urlregex .= '([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?';
-
-       // HOSTNAME OR IP
-       $urlregex .= '[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*'; // http://x = allowed (ex. http://localhost, http://routerlogin)
-       //$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)+"; // http://x.x = minimum
-       //$urlregex .= "([a-z0-9+\$_-]+\.)*[a-z0-9+\$_-]{2,3}"; // http://x.xx(x) = minimum
-       //use only one of the above
-
-       // PORT (optional)
-       $urlregex .= '(\:[0-9]{2,5})?';
-       // PATH (optional)
-       $urlregex .= '(\/([a-z0-9+\$_%,-]\.?)+)*\/?';
-       // GET Query (optional)
-       $urlregex .= '(\?[a-z+&\$_.-][a-z0-9;:@\&%=+\$_.-]*)?';
-       // ANCHOR (optional)
-       $urlregex .= '(\#[a-z_.-][a-z0-9+\$_.-]*)?\$# i';
-
-       if (!preg_match($urlregex, $url)) {
-               return _T('verifier:erreur_url', array('url' => echapper_tags($url)));
-       }
-       return '';
-}
diff --git a/www/plugins/verifier/verifier/url.yaml b/www/plugins/verifier/verifier/url.yaml
deleted file mode 100644 (file)
index 866101c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-\r
-titre: '<:verifier:type_url:>'\r
-description: '<:verifier:type_url_description:>'\r
-options:\r
-  -\r
-    saisie: 'radio'\r
-    options:\r
-      nom: 'mode'\r
-      label: '<:verifier:option_url_mode_label:>'\r
-      datas:\r
-        protocole_seul: '<:verifier:option_url_mode_protocole_seul:>'\r
-        php_filter: '<:verifier:option_url_mode_php_filter:>'\r
-        complet: '<:verifier:option_url_mode_complet:>'\r
-      defaut: 'protocole_seul'\r
-  -\r
-    saisie: 'radio'\r
-    options:\r
-      nom: 'type_protocole'\r
-      label: '<:verifier:option_url_type_protocole_label:>'\r
-      datas:\r
-        tous: '<:verifier:option_url_type_protocole_tous:>'\r
-        web: '<:verifier:option_url_type_protocole_web:>'\r
-        mail: '<:verifier:option_url_type_protocole_mail:>'\r
-        ftp: '<:verifier:option_url_type_protocole_ftp:>'\r
-        webcal: '<:verifier:option_url_type_protocole_webcal:>'\r
-        exact: '<:verifier:option_url_type_protocole_exact:>'\r
-      defaut: 'web'\r
-  -\r
-    saisie: 'input'\r
-    options:\r
-      nom: 'protocole'\r
-      label: '<:verifier:option_url_protocole_label:>'\r
-\r
-\r
diff --git a/www/plugins/verifier/verifier_fonctions.php b/www/plugins/verifier/verifier_fonctions.php
deleted file mode 100644 (file)
index b9c5a68..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function filtre_verifier_lister_disponibles_dist($repertoire = 'verifier') {
-       include_spip('inc/verifier');
-
-       return verifier_lister_disponibles($repertoire);
-}
\ No newline at end of file
diff --git a/www/plugins/yaml b/www/plugins/yaml
new file mode 160000 (submodule)
index 0000000..6de45f4
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 6de45f4fdcadfaf2ce888f4d01837441c23b0db7
diff --git a/www/plugins/yaml/demo/iter_data_yaml.html b/www/plugins/yaml/demo/iter_data_yaml.html
deleted file mode 100644 (file)
index 9b52dce..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#CACHE{0}
-
-<h2>(DATA) YAML</h2>
-
-<dl>
-
-<B_r1>
-#PAGINATION
-<br />#TOTAL_BOUCLE/#GRAND_TOTAL
-<BOUCLE_r1(DATA)
-       {datasource http://per.sonn.es/Marcimat.yaml, yaml}
-       {pagination 5}>
-<dt>#CLE</dt>
-<dd> [(#VALEUR|print)] </dd>
-</BOUCLE_r1>
-
-</dl>
diff --git a/www/plugins/yaml/experimental/README b/www/plugins/yaml/experimental/README
deleted file mode 100644 (file)
index e7e8012..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Installer ces deux fichiers dans les squelettes
-
-Puis appeler spip.php?page=yaml&id_article=X
-
-ou alors dans .htaccess ajouter :
-RewriteRule ^article([0-9]+)[\.,]yaml$ spip.php?page=yaml&id_article=$1 [QSA,L]
-
-puis appeler articleXXX,yaml
-
diff --git a/www/plugins/yaml/experimental/yaml.html b/www/plugins/yaml/experimental/yaml.html
deleted file mode 100644 (file)
index 38f5ce7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#HTTP_HEADER{Content-Type: text/plain; charset=#CHARSET}
-<BOUCLE_a(ARTICLES){id_article}>
-# Article #ID_ARTICLE du site #URL_SITE_SPIP*
-[(#ID_ARTICLE|yaml_article)]
-</BOUCLE_a>
diff --git a/www/plugins/yaml/experimental/yaml_fonctions.php b/www/plugins/yaml/experimental/yaml_fonctions.php
deleted file mode 100644 (file)
index 4b95e90..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function yaml_article($id_article) {
-       include_spip('inc/yaml');
-       $a = array_filter(sql_fetsel('*', 'spip_articles', 'id_article='.$id_article));
-       $a['rubrique'] = array_filter(sql_fetsel('*', 'spip_rubriques', 'id_rubrique='.$a['id_rubrique']));
-
-       foreach (sql_allfetsel('*', 'spip_mots AS m LEFT JOIN spip_mots_articles AS c ON m.id_mot=c.id_mot', 'c.id_article='.$id_article) as $m) {
-               $a['mots'][] = array_filter($m);
-       }
-
-       return yaml_encode(array_filter($a));
-}
diff --git a/www/plugins/yaml/inc/yaml.php b/www/plugins/yaml/inc/yaml.php
deleted file mode 100644 (file)
index 59f8974..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-# textwheel fournit yaml_decode() aussi...
-# include_spip('inc/yaml-mini');
-
-# wrapper de la class sfYAML pour SPIP
-#
-# fournit deux fonctions pour YAML,
-# analogues a json_encode() et json_decode
-#
-# Regle de dev: ne pas se rendre dependant de la lib sous-jacente
-
-// Si on est en PHP4
-if (version_compare(PHP_VERSION, '5.0.0', '<')) {
-       define('_LIB_YAML', 'spyc-php4');
-} else {
-       // temporaire le temps de tester spyc
-       define('_LIB_YAML', 'sfyaml');
-       #define('_LIB_YAML','spyc');
-}
-
-/*
- * Encode n'importe quelle structure en yaml
- * @param $struct
- * @return string
- */
-function yaml_encode($struct, $opt = array()) {
-       // Si PHP4
-       if (_LIB_YAML == 'spyc-php4') {
-               require_once _DIR_PLUGIN_YAML.'spyc/spyc-php4.php';
-               return Spyc::YAMLDump($struct);
-       }
-       // test temporaire
-       if (_LIB_YAML == 'spyc') {
-               require_once _DIR_PLUGIN_YAML.'spyc/spyc.php';
-               return Spyc::YAMLDump($struct);
-       }
-
-       require_once _DIR_PLUGIN_YAML.'inc/yaml_sfyaml.php';
-       return yaml_sfyaml_encode($struct, $opt);
-}
-
-/*
- * Decode un texte yaml, renvoie la structure
- * @param string $input
- *        boolean $show_error  true: arrete le parsing et retourne erreur en cas d'echec  - false: retourne un simple false en cas d'erreur de parsing
- */
-if (!function_exists('yaml_decode')) {
-function yaml_decode($input, $show_error = true) {
-       // Si PHP4
-       if (_LIB_YAML == 'spyc-php4') {
-               require_once _DIR_PLUGIN_YAML.'spyc/spyc-php4.php';
-               return Spyc::YAMLLoad($input);
-       }
-       // test temporaire
-       if (_LIB_YAML == 'spyc') {
-               require_once _DIR_PLUGIN_YAML.'spyc/spyc.php';
-               return Spyc::YAMLLoad($input);
-       }
-
-       require_once _DIR_PLUGIN_YAML.'inc/yaml_sfyaml.php';
-       return yaml_sfyaml_decode($input, $show_error);
-}
-}
-
-/*
- * Decode un fichier en utilisant yaml_decode
- * @param string $fichier
- */
-function yaml_decode_file($fichier) {
-       $yaml = '';
-       $retour = false;
-
-       lire_fichier($fichier, $yaml);
-       // Si on recupere bien quelque chose
-       if ($yaml) {
-               $retour = yaml_decode($yaml);
-       }
-
-       return $retour;
-}
-
-/*
- * Charge les inclusions de YAML dans un tableau
- * Les inclusions sont indiquees dans le tableau via la valeur 'inclure:rep/fichier.yaml' ou rep indique le chemin relatif.
- * On passe donc par find_in_path() pour trouver le fichier
- * @param array $tableau
- */
-function yaml_charger_inclusions($tableau) {
-       if (is_array($tableau)) {
-               $retour = array();
-               foreach ($tableau as $cle => $valeur) {
-                       if (is_string($valeur) && substr($valeur, 0, 8) == 'inclure:' && substr($valeur, -5) == '.yaml') {
-                               $retour = array_merge($retour, yaml_charger_inclusions(yaml_decode_file(find_in_path(substr($valeur, 8)))));
-                       } elseif (is_array($valeur)) {
-                               $retour = array_merge($retour, array($cle => yaml_charger_inclusions($valeur)));
-                       } else {
-                               $retour = array_merge($retour, array($cle => $valeur));
-                       }
-               }
-               return $retour;
-       } elseif (is_string($tableau) && substr($tableau, 0, 8) == 'inclure:' && substr($tableau, -5) == '.yaml') {
-               return yaml_charger_inclusions(yaml_decode_file(find_in_path(substr($tableau, 8))));
-       } else {
-               return $tableau;
-       }
-}
diff --git a/www/plugins/yaml/inc/yaml_sfyaml.php b/www/plugins/yaml/inc/yaml_sfyaml.php
deleted file mode 100644 (file)
index 02b4bb4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function yaml_sfyaml_encode($struct, $opt = array()) {
-       require_once _DIR_PLUGIN_YAML.'sfyaml/sfYaml.php';
-       require_once _DIR_PLUGIN_YAML.'sfyaml/sfYamlDumper.php';
-       $opt = array_merge(array('inline' => 2), $opt);
-       $yaml = new sfYamlDumper();
-       return $yaml->dump($struct, $opt['inline']);
-}
-
-function yaml_sfyaml_decode($input, $show_error = true) {
-       require_once _DIR_PLUGIN_YAML.'sfyaml/sfYaml.php';
-       require_once _DIR_PLUGIN_YAML.'sfyaml/sfYamlParser.php';
-
-       $yaml = new sfYamlParser();
-
-       try {
-               $ret = $yaml->parse($input);
-       } catch (Exception $e) {
-               if ($show_error) {
-                       throw new InvalidArgumentException(sprintf('Unable to parse string: %s', $e->getMessage()));
-               } else {
-                       return false;
-               }
-       }
-
-       return $ret;
-}
diff --git a/www/plugins/yaml/inc/yaml_to_array.php b/www/plugins/yaml/inc/yaml_to_array.php
deleted file mode 100644 (file)
index bcebb83..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-function inc_yaml_to_array_dist($u) {
-       include_spip('inc/yaml');
-       if (is_array($yaml = yaml_decode($u))) {
-               $tableau = $yaml;
-       } elseif (is_object($yaml)) {
-               $tableau = (array) $yaml;
-       }
-
-       return $tableau;
-}
diff --git a/www/plugins/yaml/lang/paquet-yaml.xml b/www/plugins/yaml/lang/paquet-yaml.xml
deleted file mode 100644 (file)
index 5ee8814..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<traduction module="paquet-yaml" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/yaml/lang/" reference="fr">
-       <langue code="de" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=de" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Torsten Willmann" lien="https://trad.spip.net/auteur/torsten-willmann" />
-       </langue>
-       <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
-       </langue>
-       <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=es" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
-       </langue>
-       <langue code="fa" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=fa" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
-       </langue>
-       <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-       </langue>
-       <langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=nl" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
-       </langue>
-       <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=pt_br" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
-       </langue>
-       <langue code="ru" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=ru" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="nazar" lien="https://trad.spip.net/auteur/nazar" />
-               <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
-       </langue>
-       <langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=sk" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
-               <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
-       </langue>
-</traduction>
diff --git a/www/plugins/yaml/lang/paquet-yaml_de.php b/www/plugins/yaml/lang/paquet-yaml_de.php
deleted file mode 100644 (file)
index 9239b39..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=de
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'Dieses Plugin stellt die Funtkionen zum lesen/schreiben des Formats YAML bereit :
-       <code>yaml_decode()</code> und <code>yaml_encode()</code>. Es ermöglicht die Verwendung des Formats YAML in Schleifen (DATA).',
-       'yaml_slogan' => 'Ein einfaches Dateiformat um Datenlisten zu bearbeiten'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_en.php b/www/plugins/yaml/lang/paquet-yaml_en.php
deleted file mode 100644 (file)
index ad68a91..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=en
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'This plugin provides the functions for reading/writing YAML format:
-<code>yaml_decode()</code> and <code>yaml_encode()</code>. It also provides the yaml format for the (DATA) loop.',
-       'yaml_slogan' => 'A simple file format for editing lists of data'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_es.php b/www/plugins/yaml/lang/paquet-yaml_es.php
deleted file mode 100644 (file)
index bb6c2d4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=es
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'Este plugin proporciona las funciones de lectura/escritura del formato YAML: <code>yaml_decode()</code> y <code>yaml_encode()</code>. También proporciona el formato yaml para el bucle (DATA).',
-       'yaml_slogan' => 'Un formato de archivo simple para editar listas de datos'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_fa.php b/www/plugins/yaml/lang/paquet-yaml_fa.php
deleted file mode 100644 (file)
index d98036c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=fa
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'اين پلاگين كاركردهاي خواندن/نوشتن فرمت يا.اي.ام.ال را فراهم مي‌آورد: <code>yaml_decode()</code> و<code>yaml_encode()</code>. همچنين فرمت يا.اي.ام.ال را براي حلقه‌ي (DATA) فراهم مي‌سازد.',
-       'yaml_slogan' => 'فرمتي براي پروند‌ه ساده براي ويرايش فهرست‌هاي داده‌ها'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_fr.php b/www/plugins/yaml/lang/paquet-yaml_fr.php
deleted file mode 100644 (file)
index 66a6a9e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/yaml/lang/
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'Ce plugin fournit les fonctions de lecture/écriture du format YAML :
-       <code>yaml_decode()</code> et <code>yaml_encode()</code>. Il fournit aussi le format yaml pour la boucle (DATA).',
-       'yaml_slogan' => 'Un format de fichier simple pour éditer des listes de données'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_nl.php b/www/plugins/yaml/lang/paquet-yaml_nl.php
deleted file mode 100644 (file)
index a8d2bac..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=nl
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'Met behulp van deze plugin komt de functie van het lezen/schrijven in YAML-formaat beschikbaar:
-       <code>yaml_decode()</code> en <code>yaml_encode()</code>. Het formaat kan ook in de (DATA) lus worden gebruikt.',
-       'yaml_slogan' => 'Een eenvoudig bestandsformaat om gegevenslijsten te redigeren'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_pt_br.php b/www/plugins/yaml/lang/paquet-yaml_pt_br.php
deleted file mode 100644 (file)
index c255e52..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=pt_br
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'Este plugin fornece as funções de leitura/escrita do formato YAML : <code>yaml_decode()</code> e <code>yaml_encode()</code>. Ele fornece também o formato yaml para o laço (DATA).',
-       'yaml_slogan' => 'Um formato de arquivo simples para editar listas de dados'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_ru.php b/www/plugins/yaml/lang/paquet-yaml_ru.php
deleted file mode 100644 (file)
index 2b1f263..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=ru
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'Плагин позволяет использовать функции чтения/записи в формате YAML:
-       <code>yaml_decode()</code> и <code>yaml_encode()</code>. И позволяет использовать YAML в запросе BOUCLE(DATA).',
-       'yaml_slogan' => 'Позволяет работать с YAML форматом'
-);
diff --git a/www/plugins/yaml/lang/paquet-yaml_sk.php b/www/plugins/yaml/lang/paquet-yaml_sk.php
deleted file mode 100644 (file)
index 647fef0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-yaml?lang_cible=sk
-// ** ne pas modifier le fichier **
-
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-       // Y
-       'yaml_description' => 'Tento zásuvný modul ponúka funkcie čítanie/zápisu formátu YAML:
-       <code>yaml_decode()</code> a <code>yaml_encode()</code>. Poskytuje formát yaml aj pre cyklus (DATA).',
-       'yaml_slogan' => 'Jednoduchý formát súborov na upravovanie zoznamov dát'
-);
diff --git a/www/plugins/yaml/paquet.xml b/www/plugins/yaml/paquet.xml
deleted file mode 100644 (file)
index b6ae063..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<paquet
-       prefix="yaml"
-       categorie="outil"
-       version="1.5.3"
-       etat="stable"
-       compatibilite="[2.0.10;3.2.*]"
-       logo="yaml.png"
-       documentation="https://contrib.spip.net/Le-plugin-YAML"
->
-
-       <nom>YAML</nom>
-       <!-- Un format de fichier simple pour éditer des listes de données -->
-
-       <credit lien="http://yaml.org/">yaml.org</credit>
-       <credit lien="http://code.google.com/p/spyc/">Spyc</credit>
-       <credit lien="http://components.symfony-project.org/yaml/">Symfony YAML - Fabien Potencier</credit>
-
-       <licence lien="http://opensource.org/licenses/mit-license.php">MIT</licence>
-</paquet>
diff --git a/www/plugins/yaml/plugin.xml b/www/plugins/yaml/plugin.xml
deleted file mode 100644 (file)
index 82d6025..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<plugin>
-       <nom>YAML</nom>
-       <slogan>Un format de fichier simple pour &#233;diter des listes de donn&#233;es.</slogan>
-       <auteur>format d&#233;fini par yaml.org, librairie php d&#233;velopp&#233;e par Fabien Potencier pour Symfony</auteur>
-       <licence>MIT</licence>
-       <version>1.5.3</version>
-       <etat>stable</etat>
-       <description>
-       Ce plugin fournit les fonctions de lecture/&#233;criture du format YAML.
-       <code>yaml_decode()</code> et <code>yaml_encode()</code>. Il fournit aussi le format yaml pour la boucle (DATA).
-       </description>
-       <prefix>YAML</prefix>
-       <lien>https://contrib.spip.net/Le-plugin-YAML</lien>
-       <icon>yaml.png</icon>
-       <fonctions>yaml_fonctions.php</fonctions>
-       <necessite id="SPIP" version="[2.0.10;3.2.99]" />
-       <categorie>outil</categorie>
-       <chemin dir='' />
-</plugin>
diff --git a/www/plugins/yaml/sfyaml/sfYaml.php b/www/plugins/yaml/sfyaml/sfYaml.php
deleted file mode 100755 (executable)
index 5a2be2e..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-
-/*
- * This file is part of the symfony package.
- * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/**
- * sfYaml offers convenience methods to load and dump YAML.
- *
- * @package    symfony
- * @subpackage yaml
- * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version    SVN: $Id: sfYaml.class.php 8988 2008-05-15 20:24:26Z fabien $
- */
-class sfYaml
-{
-  static protected
-    $spec = '1.2';
-
-  /**
-   * Sets the YAML specification version to use.
-   *
-   * @param string $version The YAML specification version
-   */
-  static public function setSpecVersion($version)
-  {
-    if (!in_array($version, array('1.1', '1.2')))
-    {
-      throw new InvalidArgumentException(sprintf('Version %s of the YAML specifications is not supported', $version));
-    }
-
-    self::$spec = $version;
-  }
-
-  /**
-   * Gets the YAML specification version to use.
-   *
-   * @return string The YAML specification version
-   */
-  static public function getSpecVersion()
-  {
-    return self::$spec;
-  }
-
-  /**
-   * Loads YAML into a PHP array.
-   *
-   * The load method, when supplied with a YAML stream (string or file),
-   * will do its best to convert YAML in a file into a PHP array.
-   *
-   *  Usage:
-   *  <code>
-   *   $array = sfYaml::load('config.yml');
-   *   print_r($array);
-   *  </code>
-   *
-   * @param string $input Path of YAML file or string containing YAML
-   *
-   * @return array The YAML converted to a PHP array
-   *
-   * @throws InvalidArgumentException If the YAML is not valid
-   */
-  public static function load($input)
-  {
-    $file = '';
-
-    // if input is a file, load it
-    if (strpos($input, "\n") === false && is_file($input))
-    {
-      $file = $input;
-
-      $content = $yaml = file_get_contents($input);
-
-      // if the file contains valid PHP, process it
-      if (strpos($content, '<'.'?') !== false
-      AND !(defined('_YAML_EVAL_PHP') AND !_YAML_EVAL_PHP))
-      {
-        ob_start();
-        $retval = eval('?'.'>'.$yaml);
-        $content = ob_get_clean();
-        // syntax error?
-        if ($retval === FALSE)
-          $content = $yaml;
-      }
-
-      // if an array is returned by the config file assume it's in plain php form else in YAML
-      $input = is_array($retval) ? $retval : $content;
-    }
-
-    // if an array is returned by the config file assume it's in plain php form else in YAML
-    if (is_array($input))
-    {
-      return $input;
-    }
-
-    require_once dirname(__FILE__).'/sfYamlParser.php';
-
-    $yaml = new sfYamlParser();
-
-    try
-    {
-      $ret = $yaml->parse($input);
-    }
-    catch (Exception $e)
-    {
-      throw new InvalidArgumentException(sprintf('Unable to parse %s: %s', $file ? sprintf('file "%s"', $file) : 'string', $e->getMessage()));
-    }
-
-    return $ret;
-  }
-
-  /**
-   * Dumps a PHP array to a YAML string.
-   *
-   * The dump method, when supplied with an array, will do its best
-   * to convert the array into friendly YAML.
-   *
-   * @param array   $array PHP array
-   * @param integer $inline The level where you switch to inline YAML
-   *
-   * @return string A YAML string representing the original PHP array
-   */
-  public static function dump($array, $inline = 2)
-  {
-    require_once dirname(__FILE__).'/sfYamlDumper.php';
-
-    $yaml = new sfYamlDumper();
-
-    return $yaml->dump($array, $inline);
-  }
-}
-
-/**
- * Wraps echo to automatically provide a newline.
- *
- * @param string $string The string to echo with new line
- */
-function echoln($string)
-{
-  echo $string."\n";
-}
diff --git a/www/plugins/yaml/sfyaml/sfYamlDumper.php b/www/plugins/yaml/sfyaml/sfYamlDumper.php
deleted file mode 100755 (executable)
index 0ada2b3..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/*
- * This file is part of the symfony package.
- * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-require_once(dirname(__FILE__).'/sfYamlInline.php');
-
-/**
- * sfYamlDumper dumps PHP variables to YAML strings.
- *
- * @package    symfony
- * @subpackage yaml
- * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version    SVN: $Id: sfYamlDumper.class.php 10575 2008-08-01 13:08:42Z nicolas $
- */
-class sfYamlDumper
-{
-  /**
-   * Dumps a PHP value to YAML.
-   *
-   * @param  mixed   $input  The PHP value
-   * @param  integer $inline The level where you switch to inline YAML
-   * @param  integer $indent The level o indentation indentation (used internally)
-   *
-   * @return string  The YAML representation of the PHP value
-   */
-  public function dump($input, $inline = 0, $indent = 0)
-  {
-    $output = '';
-    $prefix = $indent ? str_repeat(' ', $indent) : '';
-
-    if ($inline <= 0 || !is_array($input) || empty($input))
-    {
-      $output .= $prefix.sfYamlInline::dump($input);
-    }
-    else
-    {
-      $isAHash = array_keys($input) !== range(0, count($input) - 1);
-
-      foreach ($input as $key => $value)
-      {
-        $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);
-
-        $output .= sprintf('%s%s%s%s',
-          $prefix,
-          $isAHash ? sfYamlInline::dump($key).':' : '-',
-          $willBeInlined ? ' ' : "\n",
-          $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + 2)
-        ).($willBeInlined ? "\n" : '');
-      }
-    }
-
-    return $output;
-  }
-}
diff --git a/www/plugins/yaml/sfyaml/sfYamlInline.php b/www/plugins/yaml/sfyaml/sfYamlInline.php
deleted file mode 100755 (executable)
index f2e74bd..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-<?php
-
-/*
- * This file is part of the symfony package.
- * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/**
- * sfYamlInline implements a YAML parser/dumper for the YAML inline syntax.
- *
- * @package    symfony
- * @subpackage yaml
- * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version    SVN: $Id: sfYamlInline.class.php 16177 2009-03-11 08:32:48Z fabien $
- */
-class sfYamlInline
-{
-  /**
-   * Convert a YAML string to a PHP array.
-   *
-   * @param string $value A YAML string
-   *
-   * @return array A PHP array representing the YAML string
-   */
-  static public function load($value)
-  {
-    $value = trim($value);
-
-    if (0 == strlen($value))
-    {
-      return '';
-    }
-
-    switch ($value[0])
-    {
-      case '[':
-        return self::parseSequence($value);
-      case '{':
-        return self::parseMapping($value);
-      default:
-        return self::parseScalar($value);
-    }
-  }
-
-  /**
-   * Dumps a given PHP variable to a YAML string.
-   *
-   * @param mixed $value The PHP variable to convert
-   *
-   * @return string The YAML string representing the PHP array
-   */
-  static public function dump($value)
-  {
-    $trueValues = '1.1' == sfYaml::getSpecVersion() ? array('true', 'on', '+', 'yes', 'y') : array('true');
-    $falseValues = '1.1' == sfYaml::getSpecVersion() ? array('false', 'off', '-', 'no', 'n') : array('false');
-
-    switch (true)
-    {
-      case is_resource($value):
-        throw new InvalidArgumentException('Unable to dump PHP resources in a YAML file.');
-      case is_object($value):
-        return '!!php/object:'.serialize($value);
-      case is_array($value):
-        return self::dumpArray($value);
-      case null === $value:
-        return 'null';
-      case true === $value:
-        return 'true';
-      case false === $value:
-        return 'false';
-      case ctype_digit($value):
-        return is_string($value) ? "'$value'" : (int) $value;
-      case is_numeric($value):
-        return is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : (is_string($value) ? "'$value'" : $value);
-      case false !== strpos($value, "\n"):
-        return sprintf('"%s"', str_replace(array('"', "\n", "\r"), array('\\"', '\n', '\r'), $value));
-      case preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \#] | \A[ - ? | < > = ! % @ ]/x', $value):
-        return sprintf("'%s'", str_replace('\'', '\'\'', $value));
-      case '' == $value:
-        return "''";
-      case preg_match(self::getTimestampRegex(), $value):
-        return "'$value'";
-      case in_array(strtolower($value), $trueValues):
-        return "'$value'";
-      case in_array(strtolower($value), $falseValues):
-        return "'$value'";
-      case in_array(strtolower($value), array('null', '~')):
-        return "'$value'";
-      default:
-        return $value;
-    }
-  }
-
-  /**
-   * Dumps a PHP array to a YAML string.
-   *
-   * @param array $value The PHP array to dump
-   *
-   * @return string The YAML string representing the PHP array
-   */
-  static protected function dumpArray($value)
-  {
-    // array
-    $keys = array_keys($value);
-    if (
-      (1 == count($keys) && '0' == $keys[0])
-      ||
-      (count($keys) > 1 && array_reduce($keys, create_function('$v,$w', 'return (integer) $v + $w;'), 0) == count($keys) * (count($keys) - 1) / 2))
-    {
-      $output = array();
-      foreach ($value as $val)
-      {
-        $output[] = self::dump($val);
-      }
-
-      return sprintf('[%s]', implode(', ', $output));
-    }
-
-    // mapping
-    $output = array();
-    foreach ($value as $key => $val)
-    {
-      $output[] = sprintf('%s: %s', self::dump($key), self::dump($val));
-    }
-
-    return sprintf('{ %s }', implode(', ', $output));
-  }
-
-  /**
-   * Parses a scalar to a YAML string.
-   *
-   * @param scalar  $scalar
-   * @param string  $delimiters
-   * @param array   $stringDelimiter
-   * @param integer $i
-   * @param boolean $evaluate
-   *
-   * @return string A YAML string
-   */
-  static public function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true)
-  {
-    if (in_array($scalar[$i], $stringDelimiters))
-    {
-      // quoted scalar
-      $output = self::parseQuotedScalar($scalar, $i);
-
-      // skip next delimiter
-      ++$i;
-    }
-    else
-    {
-      // "normal" string
-      if (!$delimiters)
-      {
-        $output = substr($scalar, $i);
-        $i += strlen($output);
-
-        // remove comments
-        if (false !== $strpos = strpos($output, ' #'))
-        {
-          $output = rtrim(substr($output, 0, $strpos));
-        }
-      }
-      else if (preg_match('/^(.+?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match))
-      {
-        $output = $match[1];
-        $i += strlen($output);
-      }
-      else
-      {
-        throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', $scalar));
-      }
-
-      $output = $evaluate ? self::evaluateScalar($output) : $output;
-    }
-
-    return $output;
-  }
-
-  /**
-   * Parses a quoted scalar to YAML.
-   *
-   * @param string  $scalar
-   * @param integer $i
-   *
-   * @return string A YAML string
-   */
-  static protected function parseQuotedScalar($scalar, &$i)
-  {
-    $delimiter = $scalar[$i];
-    ++$i;
-    $buffer = '';
-    $len = strlen($scalar);
-    $escaped = '"' == $delimiter ? '\\"' : "''";
-
-    while ($i < $len)
-    {
-      if (isset($scalar[$i + 1]) && $escaped == $scalar[$i].$scalar[$i + 1])
-      {
-        $buffer .= $delimiter;
-        ++$i;
-      }
-      else if ($delimiter == $scalar[$i])
-      {
-        break;
-      }
-      else
-      {
-        $buffer .= $scalar[$i];
-      }
-
-      ++$i;
-    }
-
-    if ('"' == $delimiter)
-    {
-      // evaluate the string
-      $buffer = str_replace(array('\\n', '\\r'), array("\n", "\r"), $buffer);
-                       if (strpos($buffer,'\\x')!==false){
-                               $buffer = preg_replace_callback(',\\\\x([0-9a-f]+),', create_function('$m', 'return chr(hexdec($m[1]));'), $buffer);
-                       }
-    }
-
-    return $buffer;
-  }
-
-  /**
-   * Parses a sequence to a YAML string.
-   *
-   * @param string  $sequence
-   * @param integer $i
-   *
-   * @return string A YAML string
-   */
-  static protected function parseSequence($sequence, &$i = 0)
-  {
-    $output = array();
-    $len = strlen($sequence);
-    $i += 1;
-
-    // [foo, bar, ...]
-    while ($i < $len)
-    {
-      switch ($sequence[$i])
-      {
-        case '[':
-          // nested sequence
-          $output[] = self::parseSequence($sequence, $i);
-          break;
-        case '{':
-          // nested mapping
-          $output[] = self::parseMapping($sequence, $i);
-          break;
-        case ']':
-          return $output;
-        case ',':
-        case ' ':
-          break;
-        default:
-          $isQuoted = in_array($sequence[$i], array('"', "'"));
-          $value = self::parseScalar($sequence, array(',', ']'), array('"', "'"), $i);
-
-          if (!$isQuoted && false !== strpos($value, ': '))
-          {
-            // embedded mapping?
-            try
-            {
-              $value = self::parseMapping('{'.$value.'}');
-            }
-            catch (InvalidArgumentException $e)
-            {
-              // no, it's not
-            }
-          }
-
-          $output[] = $value;
-
-          --$i;
-      }
-
-      ++$i;
-    }
-
-    throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $sequence));
-  }
-
-  /**
-   * Parses a mapping to a YAML string.
-   *
-   * @param string  $mapping
-   * @param integer $i
-   *
-   * @return string A YAML string
-   */
-  static protected function parseMapping($mapping, &$i = 0)
-  {
-    $output = array();
-    $len = strlen($mapping);
-    $i += 1;
-
-    // {foo: bar, bar:foo, ...}
-    while ($i < $len)
-    {
-      switch ($mapping[$i])
-      {
-        case ' ':
-        case ',':
-          ++$i;
-          continue 2;
-        case '}':
-          return $output;
-      }
-
-      // key
-      $key = self::parseScalar($mapping, array(':', ' '), array('"', "'"), $i, false);
-
-      // value
-      $done = false;
-      while ($i < $len)
-      {
-        switch ($mapping[$i])
-        {
-          case '[':
-            // nested sequence
-            $output[$key] = self::parseSequence($mapping, $i);
-            $done = true;
-            break;
-          case '{':
-            // nested mapping
-            $output[$key] = self::parseMapping($mapping, $i);
-            $done = true;
-            break;
-          case ':':
-          case ' ':
-            break;
-          default:
-            $output[$key] = self::parseScalar($mapping, array(',', '}'), array('"', "'"), $i);
-            $done = true;
-            --$i;
-        }
-
-        ++$i;
-
-        if ($done)
-        {
-          continue 2;
-        }
-      }
-    }
-
-    throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping));
-  }
-
-  /**
-   * Evaluates scalars and replaces magic values.
-   *
-   * @param string $scalar
-   *
-   * @return string A YAML string
-   */
-  static protected function evaluateScalar($scalar)
-  {
-    $scalar = trim($scalar);
-
-    $trueValues = '1.1' == sfYaml::getSpecVersion() ? array('true', 'on', '+', 'yes', 'y') : array('true');
-    $falseValues = '1.1' == sfYaml::getSpecVersion() ? array('false', 'off', '-', 'no', 'n') : array('false');
-
-    switch (true)
-    {
-      case 'null' == strtolower($scalar):
-      case '' == $scalar:
-      case '~' == $scalar:
-        return null;
-      case 0 === strpos($scalar, '!str'):
-        return (string) substr($scalar, 5);
-      case 0 === strpos($scalar, '! '):
-        return intval(self::parseScalar(substr($scalar, 2)));
-      case 0 === strpos($scalar, '!!php/object:'):
-        return unserialize(substr($scalar, 13));
-      case ctype_digit($scalar):
-        $raw = $scalar;
-        $cast = intval($scalar);
-        return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
-      case in_array(strtolower($scalar), $trueValues):
-        return true;
-      case in_array(strtolower($scalar), $falseValues):
-        return false;
-      case is_numeric($scalar):
-        return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
-      case 0 == strcasecmp($scalar, '.inf'):
-      case 0 == strcasecmp($scalar, '.NaN'):
-        return -log(0);
-      case 0 == strcasecmp($scalar, '-.inf'):
-        return log(0);
-      case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
-        return floatval(str_replace(',', '', $scalar));
-      case preg_match(self::getTimestampRegex(), $scalar):
-        return strtotime($scalar);
-      default:
-        return (string) $scalar;
-    }
-  }
-
-  static protected function getTimestampRegex()
-  {
-    return <<<EOF
-    ~^
-    (?P<year>[0-9][0-9][0-9][0-9])
-    -(?P<month>[0-9][0-9]?)
-    -(?P<day>[0-9][0-9]?)
-    (?:(?:[Tt]|[ \t]+)
-    (?P<hour>[0-9][0-9]?)
-    :(?P<minute>[0-9][0-9])
-    :(?P<second>[0-9][0-9])
-    (?:\.(?P<fraction>[0-9]*))?
-    (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
-    (?::(?P<tz_minute>[0-9][0-9]))?))?)?
-    $~x
-EOF;
-  }
-}
diff --git a/www/plugins/yaml/sfyaml/sfYamlParser.php b/www/plugins/yaml/sfyaml/sfYamlParser.php
deleted file mode 100755 (executable)
index baa5f76..0000000
+++ /dev/null
@@ -1,540 +0,0 @@
-<?php
-
-/*
- * This file is part of the symfony package.
- * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-require_once(dirname(__FILE__).'/sfYamlInline.php');
-
-/**
- * sfYamlParser parses YAML strings to convert them to PHP arrays.
- *
- * @package    symfony
- * @subpackage yaml
- * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version    SVN: $Id: sfYamlParser.class.php 10832 2008-08-13 07:46:08Z fabien $
- */
-class sfYamlParser
-{
-  protected
-    $value         = '',
-    $offset        = 0,
-    $lines         = array(),
-    $currentLineNb = -1,
-    $currentLine   = '',
-    $refs          = array();
-
-  /**
-   * Constructor
-   *
-   * @param integer $offset The offset of YAML document (used for line numbers in error messages)
-   */
-  public function __construct($offset = 0)
-  {
-    $this->offset = $offset;
-  }
-
-  /**
-   * Parses a YAML string to a PHP value.
-   *
-   * @param  string $value A YAML string
-   *
-   * @return mixed  A PHP value
-   *
-   * @throws InvalidArgumentException If the YAML is not valid
-   */
-  public function parse($value)
-  {
-    $this->value = $this->cleanup($value);
-    $this->currentLineNb = -1;
-    $this->currentLine = '';
-    $this->lines = explode("\n", $this->value);
-
-    $data = array();
-    while ($this->moveToNextLine())
-    {
-      if ($this->isCurrentLineEmpty())
-      {
-        continue;
-      }
-
-      // tab?
-      if (preg_match('#^\t+#', $this->currentLine))
-      {
-        throw new InvalidArgumentException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine));
-      }
-
-      $isRef = $isInPlace = $isProcessed = false;
-      if (preg_match('#^\-(\s+(?P<value>.+?))?\s*$#', $this->currentLine, $values))
-      {
-        if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
-        {
-          $isRef = $matches['ref'];
-          $values['value'] = $matches['value'];
-        }
-
-        // array
-        if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
-        {
-          $c = $this->getRealCurrentLineNb() + 1;
-          $parser = new sfYamlParser($c);
-          $parser->refs =& $this->refs;
-          $data[] = $parser->parse($this->getNextEmbedBlock());
-        }
-        else
-        {
-          if (preg_match('/^([^ ]+)\: +({.*?)$/', $values['value'], $matches))
-          {
-            $data[] = array($matches[1] => sfYamlInline::load($matches[2]));
-          }
-          else
-          {
-            $data[] = $this->parseValue($values['value']);
-          }
-        }
-      }
-      else if (preg_match('#^(?P<key>[^ ].*?) *\:(\s+(?P<value>.+?))?\s*$#', $this->currentLine, $values))
-      {
-        $key = sfYamlInline::parseScalar($values['key']);
-
-        if ('<<' === $key)
-        {
-          if (isset($values['value']) && '*' === substr($values['value'], 0, 1))
-          {
-            $isInPlace = substr($values['value'], 1);
-            if (!array_key_exists($isInPlace, $this->refs))
-            {
-              throw new InvalidArgumentException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine));
-            }
-          }
-          else
-          {
-            if (isset($values['value']) && $values['value'] !== '')
-            {
-              $value = $values['value'];
-            }
-            else
-            {
-              $value = $this->getNextEmbedBlock();
-            }
-            $c = $this->getRealCurrentLineNb() + 1;
-            $parser = new sfYamlParser($c);
-            $parser->refs =& $this->refs;
-            $parsed = $parser->parse($value);
-
-            $merged = array();
-            if (!is_array($parsed))
-            {
-              throw new InvalidArgumentException(sprintf("YAML merge keys used with a scalar value instead of an array at line %s (%s)", $this->getRealCurrentLineNb() + 1, $this->currentLine));
-            }
-            else if (isset($parsed[0]))
-            {
-              // Numeric array, merge individual elements
-              foreach (array_reverse($parsed) as $parsedItem)
-              {
-                if (!is_array($parsedItem))
-                {
-                  throw new InvalidArgumentException(sprintf("Merge items must be arrays at line %s (%s).", $this->getRealCurrentLineNb() + 1, $parsedItem));
-                }
-                $merged = array_merge($parsedItem, $merged);
-              }
-            }
-            else
-            {
-              // Associative array, merge
-              $merged = array_merge($merge, $parsed);
-            }
-
-            $isProcessed = $merged;
-          }
-        }
-        else if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
-        {
-          $isRef = $matches['ref'];
-          $values['value'] = $matches['value'];
-        }
-
-        if ($isProcessed)
-        {
-          // Merge keys
-          $data = $isProcessed;
-        }
-        // hash
-        else if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
-        {
-          // if next line is less indented or equal, then it means that the current value is null
-          if ($this->isNextLineIndented())
-          {
-            $data[$key] = null;
-          }
-          else
-          {
-            $c = $this->getRealCurrentLineNb() + 1;
-            $parser = new sfYamlParser($c);
-            $parser->refs =& $this->refs;
-            $data[$key] = $parser->parse($this->getNextEmbedBlock());
-          }
-        }
-        else
-        {
-          if ($isInPlace)
-          {
-            $data = $this->refs[$isInPlace];
-          }
-          else
-          {
-            $data[$key] = $this->parseValue($values['value']);
-          }
-        }
-      }
-      else
-      {
-        // one liner?
-        if (1 == count(explode("\n", rtrim($this->value, "\n"))))
-        {
-          $value = sfYamlInline::load($this->lines[0]);
-          if (is_array($value))
-          {
-            $first = reset($value);
-            if ('*' === substr($first, 0, 1))
-            {
-              $data = array();
-              foreach ($value as $alias)
-              {
-                $data[] = $this->refs[substr($alias, 1)];
-              }
-              $value = $data;
-            }
-          }
-
-          return $value;
-        }
-
-        throw new InvalidArgumentException(sprintf('Unable to parse line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine));
-      }
-
-      if ($isRef)
-      {
-        $this->refs[$isRef] = end($data);
-      }
-    }
-
-    return empty($data) ? null : $data;
-  }
-
-  /**
-   * Returns the current line number (takes the offset into account).
-   *
-   * @return integer The current line number
-   */
-  protected function getRealCurrentLineNb()
-  {
-    return $this->currentLineNb + $this->offset;
-  }
-
-  /**
-   * Returns the current line indentation.
-   *
-   * @return integer The current line indentation
-   */
-  protected function getCurrentLineIndentation()
-  {
-    return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' '));
-  }
-
-  /**
-   * Returns the next embed block of YAML.
-   *
-   * @return string A YAML string
-   */
-  protected function getNextEmbedBlock()
-  {
-    $this->moveToNextLine();
-
-    $newIndent = $this->getCurrentLineIndentation();
-
-    if (!$this->isCurrentLineEmpty() && 0 == $newIndent)
-    {
-      throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
-    }
-
-    $data = array(substr($this->currentLine, $newIndent));
-
-    while ($this->moveToNextLine())
-    {
-      if ($this->isCurrentLineEmpty())
-      {
-        if ($this->isCurrentLineBlank())
-        {
-          $data[] = substr($this->currentLine, $newIndent);
-        }
-
-        continue;
-      }
-
-      $indent = $this->getCurrentLineIndentation();
-
-      if (preg_match('#^(?P<text> *)$#', $this->currentLine, $match))
-      {
-        // empty line
-        $data[] = $match['text'];
-      }
-      else if ($indent >= $newIndent)
-      {
-        $data[] = substr($this->currentLine, $newIndent);
-      }
-      else if (0 == $indent)
-      {
-        $this->moveToPreviousLine();
-
-        break;
-      }
-      else
-      {
-        throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
-      }
-    }
-
-    return implode("\n", $data);
-  }
-
-  /**
-   * Moves the parser to the next line.
-   */
-  protected function moveToNextLine()
-  {
-    if ($this->currentLineNb >= count($this->lines) - 1)
-    {
-      return false;
-    }
-
-    $this->currentLine = $this->lines[++$this->currentLineNb];
-
-    return true;
-  }
-
-  /**
-   * Moves the parser to the previous line.
-   */
-  protected function moveToPreviousLine()
-  {
-    $this->currentLine = $this->lines[--$this->currentLineNb];
-  }
-
-  /**
-   * Parses a YAML value.
-   *
-   * @param  string $value A YAML value
-   *
-   * @return mixed  A PHP value
-   */
-  protected function parseValue($value)
-  {
-    if ('*' === substr($value, 0, 1))
-    {
-      if (false !== $pos = strpos($value, '#'))
-      {
-        $value = substr($value, 1, $pos - 2);
-      }
-      else
-      {
-        $value = substr($value, 1);
-      }
-
-      if (!array_key_exists($value, $this->refs))
-      {
-        throw new InvalidArgumentException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine));
-      }
-      return $this->refs[$value];
-    }
-
-    if (preg_match('/^(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?$/', $value, $matches))
-    {
-      $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
-
-      return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers)));
-    }
-    else
-    {
-      return sfYamlInline::load($value);
-    }
-  }
-
-  /**
-   * Parses a folded scalar.
-   *
-   * @param  string  $separator   The separator that was used to begin this folded scalar (| or >)
-   * @param  string  $indicator   The indicator that was used to begin this folded scalar (+ or -)
-   * @param  integer $indentation The indentation that was used to begin this folded scalar
-   *
-   * @return string  The text value
-   */
-  protected function parseFoldedScalar($separator, $indicator = '', $indentation = 0)
-  {
-    $separator = '|' == $separator ? "\n" : ' ';
-    $text = '';
-
-    $notEOF = $this->moveToNextLine();
-
-    while ($notEOF && $this->isCurrentLineBlank())
-    {
-      $text .= "\n";
-
-      $notEOF = $this->moveToNextLine();
-    }
-
-    if (!$notEOF)
-    {
-      return '';
-    }
-
-    if (!preg_match('#^(?P<indent>'.($indentation ? str_repeat(' ', $indentation) : ' +').')(?P<text>.*)$#', $this->currentLine, $matches))
-    {
-      $this->moveToPreviousLine();
-
-      return '';
-    }
-
-    $textIndent = $matches['indent'];
-    $previousIndent = 0;
-
-    $text .= $matches['text'].$separator;
-    while ($this->currentLineNb + 1 < count($this->lines))
-    {
-      $this->moveToNextLine();
-
-      if (preg_match('#^(?P<indent> {'.strlen($textIndent).',})(?P<text>.+)$#', $this->currentLine, $matches))
-      {
-        if (' ' == $separator && $previousIndent != $matches['indent'])
-        {
-          $text = substr($text, 0, -1)."\n";
-        }
-        $previousIndent = $matches['indent'];
-
-        $text .= str_repeat(' ', $diff = strlen($matches['indent']) - strlen($textIndent)).$matches['text'].($diff ? "\n" : $separator);
-      }
-      else if (preg_match('#^(?P<text> *)$#', $this->currentLine, $matches))
-      {
-        $text .= preg_replace('#^ {1,'.strlen($textIndent).'}#', '', $matches['text'])."\n";
-      }
-      else
-      {
-        $this->moveToPreviousLine();
-
-        break;
-      }
-    }
-
-    if (' ' == $separator)
-    {
-      // replace last separator by a newline
-      $text = preg_replace('/ (\n*)$/', "\n$1", $text);
-    }
-
-    switch ($indicator)
-    {
-      case '':
-        $text = preg_replace('#\n+$#s', "\n", $text);
-        break;
-      case '+':
-        break;
-      case '-':
-        $text = preg_replace('#\n+$#s', '', $text);
-        break;
-    }
-
-    return $text;
-  }
-
-  /**
-   * Returns true if the next line is indented.
-   *
-   * @return Boolean Returns true if the next line is indented, false otherwise
-   */
-  protected function isNextLineIndented()
-  {
-    $currentIndentation = $this->getCurrentLineIndentation();
-    $notEOF = $this->moveToNextLine();
-
-    while ($notEOF && $this->isCurrentLineEmpty())
-    {
-      $notEOF = $this->moveToNextLine();
-    }
-
-    if (false === $notEOF)
-    {
-      return false;
-    }
-
-    $ret = false;
-    if ($this->getCurrentLineIndentation() <= $currentIndentation)
-    {
-      $ret = true;
-    }
-
-    $this->moveToPreviousLine();
-
-    return $ret;
-  }
-
-  /**
-   * Returns true if the current line is blank or if it is a comment line.
-   *
-   * @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise
-   */
-  protected function isCurrentLineEmpty()
-  {
-    return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
-  }
-
-  /**
-   * Returns true if the current line is blank.
-   *
-   * @return Boolean Returns true if the current line is blank, false otherwise
-   */
-  protected function isCurrentLineBlank()
-  {
-    return '' == trim($this->currentLine, ' ');
-  }
-
-  /**
-   * Returns true if the current line is a comment line.
-   *
-   * @return Boolean Returns true if the current line is a comment line, false otherwise
-   */
-  protected function isCurrentLineComment()
-  {
-    //checking explicitly the first char of the trim is faster than loops or strpos
-    $ltrimmedLine = ltrim($this->currentLine, ' ');
-    return $ltrimmedLine[0] === '#';
-  }
-
-  /**
-   * Cleanups a YAML string to be parsed.
-   *
-   * @param  string $value The input YAML string
-   *
-   * @return string A cleaned up YAML string
-   */
-  protected function cleanup($value)
-  {
-    $value = str_replace(array("\r\n", "\r"), "\n", $value);
-
-    if (!preg_match("#\n$#", $value))
-    {
-      $value .= "\n";
-    }
-
-    // strip YAML header
-    preg_replace('#^\%YAML[: ][\d\.]+.*\n#s', '', $value);
-
-    // remove ---
-    $value = preg_replace('#^\-\-\-.*?\n#s', '', $value);
-
-    return $value;
-  }
-}
diff --git a/www/plugins/yaml/spyc/spyc-php4.php b/www/plugins/yaml/spyc/spyc-php4.php
deleted file mode 100644 (file)
index 9329268..0000000
+++ /dev/null
@@ -1,1024 +0,0 @@
-<?php
-/**
-   * Spyc -- A Simple PHP YAML Class
-   * @version 0.4.5
-   * @author Vlad Andersen <vlad.andersen@gmail.com>
-   * @author Chris Wanstrath <chris@ozmm.org>
-   * @link http://code.google.com/p/spyc/
-   * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2009 Vlad Andersen
-   * @license http://www.opensource.org/licenses/mit-license.php MIT License
-   * @package Spyc
-   */
-
-if (!function_exists('spyc_load')) {
-  /**
-   * Parses YAML to array.
-   * @param string $string YAML string.
-   * @return array
-   */
-  function spyc_load ($string) {
-    return Spyc::YAMLLoadString($string);
-  }
-}
-
-if (!function_exists('spyc_load_file')) {
-  /**
-   * Parses YAML to array.
-   * @param string $file Path to YAML file.
-   * @return array
-   */
-  function spyc_load_file ($file) {
-    return Spyc::YAMLLoad($file);
-  }
-}
-
-/**
-   * The Simple PHP YAML Class.
-   *
-   * This class can be used to read a YAML file and convert its contents
-   * into a PHP array.  It currently supports a very limited subsection of
-   * the YAML spec.
-   *
-   * Usage:
-   * <code>
-   *   $Spyc  = new Spyc;
-   *   $array = $Spyc->load($file);
-   * </code>
-   * or:
-   * <code>
-   *   $array = Spyc::YAMLLoad($file);
-   * </code>
-   * or:
-   * <code>
-   *   $array = spyc_load_file($file);
-   * </code>
-   * @package Spyc
-   */
-class Spyc {
-
-  // SETTINGS
-
-  /**
-   * Setting this to true will force YAMLDump to enclose any string value in
-   * quotes.  False by default.
-   * 
-   * @var bool
-   */
-  var $setting_dump_force_quotes = false;
-
-  /**
-   * Setting this to true will forse YAMLLoad to use syck_load function when
-   * possible. False by default.
-   * @var bool
-   */
-  var $setting_use_syck_is_possible = false;
-
-
-
-  /**#@+
-  * @access private
-  * @var mixed
-  */
-  var $_dumpIndent;
-  var $_dumpWordWrap;
-  var $_containsGroupAnchor = false;
-  var $_containsGroupAlias = false;
-  var $path;
-  var $result;
-  var $LiteralPlaceHolder = '___YAML_Literal_Block___';
-  var $SavedGroups = array();
-  var $indent;
-  /**
-   * Path modifier that should be applied after adding current element.
-   * @var array
-   */
-  var $delayedPath = array();
-
-  /**#@+
-  * @access public
-  * @var mixed
-  */
-  var $_nodeId;
-
-/**
- * Load a valid YAML string to Spyc.
- * @param string $input
- * @return array
- */
-  function load ($input) {
-    return $this->__loadString($input);
-  }
-
- /**
- * Load a valid YAML file to Spyc.
- * @param string $file
- * @return array
- */
-  function loadFile ($file) {
-    return $this->__load($file);
-  }
-
-  /**
-     * Load YAML into a PHP array statically
-     *
-     * The load method, when supplied with a YAML stream (string or file),
-     * will do its best to convert YAML in a file into a PHP array.  Pretty
-     * simple.
-     *  Usage:
-     *  <code>
-     *   $array = Spyc::YAMLLoad('lucky.yaml');
-     *   print_r($array);
-     *  </code>
-     * @access public
-     * @return array
-     * @param string $input Path of YAML file or string containing YAML
-     */
-  function YAMLLoad($input) {
-    $Spyc = new Spyc;
-    return $Spyc->__load($input);
-  }
-
-  /**
-     * Load a string of YAML into a PHP array statically
-     *
-     * The load method, when supplied with a YAML string, will do its best 
-     * to convert YAML in a string into a PHP array.  Pretty simple.
-     *
-     * Note: use this function if you don't want files from the file system
-     * loaded and processed as YAML.  This is of interest to people concerned
-     * about security whose input is from a string.
-     *
-     *  Usage:
-     *  <code>
-     *   $array = Spyc::YAMLLoadString("---\n0: hello world\n");
-     *   print_r($array);
-     *  </code>
-     * @access public
-     * @return array
-     * @param string $input String containing YAML
-     */
-  function YAMLLoadString($input) {
-    $Spyc = new Spyc;
-    return $Spyc->__loadString($input);
-  }
-
-  /**
-     * Dump YAML from PHP array statically
-     *
-     * The dump method, when supplied with an array, will do its best
-     * to convert the array into friendly YAML.  Pretty simple.  Feel free to
-     * save the returned string as nothing.yaml and pass it around.
-     *
-     * Oh, and you can decide how big the indent is and what the wordwrap
-     * for folding is.  Pretty cool -- just pass in 'false' for either if
-     * you want to use the default.
-     *
-     * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
-     * you can turn off wordwrap by passing in 0.
-     *
-     * @access public
-     * @return string
-     * @param array $array PHP array
-     * @param int $indent Pass in false to use the default, which is 2
-     * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
-     */
-  function YAMLDump($array,$indent = false,$wordwrap = false) {
-    $spyc = new Spyc;
-    return $spyc->dump($array,$indent,$wordwrap);
-  }
-
-
-  /**
-     * Dump PHP array to YAML
-     *
-     * The dump method, when supplied with an array, will do its best
-     * to convert the array into friendly YAML.  Pretty simple.  Feel free to
-     * save the returned string as tasteful.yaml and pass it around.
-     *
-     * Oh, and you can decide how big the indent is and what the wordwrap
-     * for folding is.  Pretty cool -- just pass in 'false' for either if
-     * you want to use the default.
-     *
-     * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
-     * you can turn off wordwrap by passing in 0.
-     *
-     * @access public
-     * @return string
-     * @param array $array PHP array
-     * @param int $indent Pass in false to use the default, which is 2
-     * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
-     */
-  function dump($array,$indent = false,$wordwrap = false) {
-    // Dumps to some very clean YAML.  We'll have to add some more features
-    // and options soon.  And better support for folding.
-
-    // New features and options.
-    if ($indent === false or !is_numeric($indent)) {
-      $this->_dumpIndent = 2;
-    } else {
-      $this->_dumpIndent = $indent;
-    }
-
-    if ($wordwrap === false or !is_numeric($wordwrap)) {
-      $this->_dumpWordWrap = 40;
-    } else {
-      $this->_dumpWordWrap = $wordwrap;
-    }
-
-    // New YAML document
-    $string = "---\n";
-
-    // Start at the base of the array and move through it.
-    if ($array) {
-      $array = (array)$array;
-      $first_key = key($array);
-      
-      $previous_key = -1;
-      foreach ($array as $key => $value) {
-        $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key);
-        $previous_key = $key;
-      }
-    }
-    return $string;
-  }
-
-  /**
-     * Attempts to convert a key / value array item to YAML
-     * @access private
-     * @return string
-     * @param $key The name of the key
-     * @param $value The value of the item
-     * @param $indent The indent of the current node
-     */
-  function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0) {
-    if (is_array($value)) {
-      if (empty ($value))
-        return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key);
-      // It has children.  What to do?
-      // Make it the right kind of item
-      $string = $this->_dumpNode($key, NULL, $indent, $previous_key, $first_key);
-      // Add the indent
-      $indent += $this->_dumpIndent;
-      // Yamlize the array
-      $string .= $this->_yamlizeArray($value,$indent);
-    } elseif (!is_array($value)) {
-      // It doesn't have children.  Yip.
-      $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key);
-    }
-    return $string;
-  }
-
-  /**
-     * Attempts to convert an array to YAML
-     * @access private
-     * @return string
-     * @param $array The array you want to convert
-     * @param $indent The indent of the current level
-     */
-  function _yamlizeArray($array,$indent) {
-    if (is_array($array)) {
-      $string = '';
-      $previous_key = -1;
-      $first_key = key($array);
-      foreach ($array as $key => $value) {
-        $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key);
-        $previous_key = $key;
-      }
-      return $string;
-    } else {
-      return false;
-    }
-  }
-
-  /**
-     * Returns YAML from a key and a value
-     * @access private
-     * @return string
-     * @param $key The name of the key
-     * @param $value The value of the item
-     * @param $indent The indent of the current node
-     */
-  function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0) {
-    // do some folding here, for blocks
-    if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false ||
-      strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false ||
-      strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || substr ($value, -1, 1) == ':')) {
-      $value = $this->_doLiteralBlock($value,$indent);
-    } else {
-      $value  = $this->_doFolding($value,$indent);
-      if (is_bool($value)) {
-        $value = ($value) ? "true" : "false";
-      }
-    }
-
-    if ($value === array()) $value = '[ ]';
-
-    $spaces = str_repeat(' ',$indent);
-
-    if (is_int($key) && $key - 1 == $previous_key && $first_key===0) {
-      // It's a sequence
-      $string = $spaces.'- '.$value."\n";
-    } else {
-      // Ligne ci-dessous désactivée car non compatible PHP4
-         //if ($first_key===0)  throw new Exception('Keys are all screwy.  The first one was zero, now it\'s "'. $key .'"');
-      // It's mapped
-      if (strpos($key, ":") !== false) { $key = '"' . $key . '"'; }
-      $string = $spaces.$key.': '.$value."\n";
-    }
-    return $string;
-  }
-
-  /**
-     * Creates a literal block for dumping
-     * @access private
-     * @return string
-     * @param $value
-     * @param $indent int The value of the indent
-     */
-  function _doLiteralBlock($value,$indent) {
-    if (strpos($value, "\n") === false && strpos($value, "'") === false) {
-      return sprintf ("'%s'", $value);
-    }
-    if (strpos($value, "\n") === false && strpos($value, '"') === false) {
-      return sprintf ('"%s"', $value);
-    }
-    $exploded = explode("\n",$value);
-    $newValue = '|';
-    $indent  += $this->_dumpIndent;
-    $spaces   = str_repeat(' ',$indent);
-    foreach ($exploded as $line) {
-      $newValue .= "\n" . $spaces . trim($line);
-    }
-    return $newValue;
-  }
-
-  /**
-     * Folds a string of text, if necessary
-     * @access private
-     * @return string
-     * @param $value The string you wish to fold
-     */
-  function _doFolding($value,$indent) {
-    // Don't do anything if wordwrap is set to 0
-
-    if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) {
-      $indent += $this->_dumpIndent;
-      $indent = str_repeat(' ',$indent);
-      $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent");
-      $value   = ">\n".$indent.$wrapped;
-    } else {
-      if ($this->setting_dump_force_quotes && is_string ($value))
-        $value = '"' . $value . '"';
-    }
-
-
-    return $value;
-  }
-
-// LOADING FUNCTIONS
-
-  function __load($input) {
-    $Source = $this->loadFromSource($input);
-    return $this->loadWithSource($Source);
-  }
-
-  function __loadString($input) {
-    $Source = $this->loadFromString($input);
-    return $this->loadWithSource($Source);
-  }
-
-  function loadWithSource($Source) {
-    if (empty ($Source)) return array();
-    if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) {
-      $array = syck_load (implode ('', $Source));
-      return is_array($array) ? $array : array();
-    }
-
-    $this->path = array();
-    $this->result = array();
-
-    $cnt = count($Source);
-    for ($i = 0; $i < $cnt; $i++) {
-      $line = $Source[$i];
-      
-      $this->indent = strlen($line) - strlen(ltrim($line));
-      $tempPath = $this->getParentPathByIndent($this->indent);
-      $line = $this->stripIndent($line, $this->indent);
-      if ($this->isComment($line)) continue;
-      if ($this->isEmpty($line)) continue;
-      $this->path = $tempPath;
-
-      $literalBlockStyle = $this->startsLiteralBlock($line);
-      if ($literalBlockStyle) {
-        $line = rtrim ($line, $literalBlockStyle . " \n");
-        $literalBlock = '';
-        $line .= $this->LiteralPlaceHolder;
-
-        while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) {
-          $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle);
-        }
-        $i--;
-      }
-
-      while (++$i < $cnt && $this->greedilyNeedNextLine($line)) {
-        $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t");
-      }
-      $i--;
-
-
-
-      if (strpos ($line, '#')) {
-        if (strpos ($line, '"') === false && strpos ($line, "'") === false)
-          $line = preg_replace('/\s+#(.+)$/','',$line);
-      }
-
-      $lineArray = $this->_parseLine($line);
-
-      if ($literalBlockStyle)
-        $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock);
-
-      $this->addArray($lineArray, $this->indent);
-
-      foreach ($this->delayedPath as $indent => $delayedPath)
-        $this->path[$indent] = $delayedPath;
-
-      $this->delayedPath = array();
-
-    }
-    return $this->result;
-  }
-
-  function loadFromSource ($input) {
-    if (!empty($input) && strpos($input, "\n") === false && file_exists($input))
-    return file($input);
-
-    return $this->loadFromString($input);
-  }
-
-  function loadFromString ($input) {
-    $lines = explode("\n",$input);
-    foreach ($lines as $k => $_) {
-      $lines[$k] = rtrim ($_, "\r");
-    }
-    return $lines;
-  }
-
-  /**
-     * Parses YAML code and returns an array for a node
-     * @access private
-     * @return array
-     * @param string $line A line from the YAML file
-     */
-  function _parseLine($line) {
-    if (!$line) return array();
-    $line = trim($line);
-
-    if (!$line) return array();
-    $array = array();
-
-    $group = $this->nodeContainsGroup($line);
-    if ($group) {
-      $this->addGroup($line, $group);
-      $line = $this->stripGroup ($line, $group);
-    }
-
-    if ($this->startsMappedSequence($line))
-      return $this->returnMappedSequence($line);
-
-    if ($this->startsMappedValue($line))
-      return $this->returnMappedValue($line);
-
-    if ($this->isArrayElement($line))
-     return $this->returnArrayElement($line);
-
-    if ($this->isPlainArray($line))
-     return $this->returnPlainArray($line); 
-     
-     
-    return $this->returnKeyValuePair($line);
-
-  }
-
-  /**
-     * Finds the type of the passed value, returns the value as the new type.
-     * @access private
-     * @param string $value
-     * @return mixed
-     */
-  function _toType($value) {
-    if ($value === '') return null;
-    $first_character = $value[0];
-    $last_character = substr($value, -1, 1);
-
-    $is_quoted = false;
-    do {
-      if (!$value) break;
-      if ($first_character != '"' && $first_character != "'") break;
-      if ($last_character != '"' && $last_character != "'") break;
-      $is_quoted = true;
-    } while (0);
-
-    if ($is_quoted)
-      return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\''));
-    
-    if (strpos($value, ' #') !== false)
-      $value = preg_replace('/\s+#(.+)$/','',$value);
-
-    if ($first_character == '[' && $last_character == ']') {
-      // Take out strings sequences and mappings
-      $innerValue = trim(substr ($value, 1, -1));
-      if ($innerValue === '') return array();
-      $explode = $this->_inlineEscape($innerValue);
-      // Propagate value array
-      $value  = array();
-      foreach ($explode as $v) {
-        $value[] = $this->_toType($v);
-      }
-      return $value;
-    }
-
-    if (strpos($value,': ')!==false && $first_character != '{') {
-      $array = explode(': ',$value);
-      $key   = trim($array[0]);
-      array_shift($array);
-      $value = trim(implode(': ',$array));
-      $value = $this->_toType($value);
-      return array($key => $value);
-    }
-    
-    if ($first_character == '{' && $last_character == '}') {
-      $innerValue = trim(substr ($value, 1, -1));
-      if ($innerValue === '') return array();
-      // Inline Mapping
-      // Take out strings sequences and mappings
-      $explode = $this->_inlineEscape($innerValue);
-      // Propagate value array
-      $array = array();
-      foreach ($explode as $v) {
-        $SubArr = $this->_toType($v);
-        if (empty($SubArr)) continue;
-        if (is_array ($SubArr)) {
-          $array[key($SubArr)] = $SubArr[key($SubArr)]; continue;
-        }
-        $array[] = $SubArr;
-      }
-      return $array;
-    }
-
-    if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') {
-      return null;
-    }
-
-    if (intval($first_character) > 0 && preg_match ('/^[1-9]+[0-9]*$/', $value)) {
-      $intvalue = (int)$value;
-      if ($intvalue != PHP_INT_MAX)
-        $value = $intvalue;
-      return $value;
-    }
-
-    if (in_array($value,
-                 array('true', 'on', '+', 'yes', 'y', 'True', 'TRUE', 'On', 'ON', 'YES', 'Yes', 'Y'))) {
-      return true;
-    }
-
-    if (in_array(strtolower($value),
-                 array('false', 'off', '-', 'no', 'n'))) {
-      return false;
-    }
-
-    if (is_numeric($value)) {
-      if ($value === '0') return 0;
-      if (trim ($value, 0) === $value)
-        $value = (float)$value;
-      return $value;
-    }
-    
-    return $value;
-  }
-
-  /**
-     * Used in inlines to check for more inlines or quoted strings
-     * @access private
-     * @return array
-     */
-  function _inlineEscape($inline) {
-    // There's gotta be a cleaner way to do this...
-    // While pure sequences seem to be nesting just fine,
-    // pure mappings and mappings with sequences inside can't go very
-    // deep.  This needs to be fixed.
-
-    $seqs = array();
-    $maps = array();
-    $saved_strings = array();
-
-    // Check for strings
-    $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/';
-    if (preg_match_all($regex,$inline,$strings)) {
-      $saved_strings = $strings[0];
-      $inline  = preg_replace($regex,'YAMLString',$inline);
-    }
-    unset($regex);
-
-    $i = 0;
-    do {
-
-    // Check for sequences
-    while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) {
-      $seqs[] = $matchseqs[0];
-      $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1);
-    }
-
-    // Check for mappings
-    while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) {
-      $maps[] = $matchmaps[0];
-      $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1);
-    }
-
-    if ($i++ >= 10) break;
-
-    } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false);
-
-    $explode = explode(', ',$inline);
-    $stringi = 0; $i = 0;
-
-    while (1) {
-
-    // Re-add the sequences
-    if (!empty($seqs)) {
-      foreach ($explode as $key => $value) {
-        if (strpos($value,'YAMLSeq') !== false) {
-          foreach ($seqs as $seqk => $seq) {
-            $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value);
-            $value = $explode[$key];
-          }
-        }
-      }
-    }
-
-    // Re-add the mappings
-    if (!empty($maps)) {
-      foreach ($explode as $key => $value) {
-        if (strpos($value,'YAMLMap') !== false) {
-          foreach ($maps as $mapk => $map) {
-            $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value);
-            $value = $explode[$key];
-          }
-        }
-      }
-    }
-
-
-    // Re-add the strings
-    if (!empty($saved_strings)) {
-      foreach ($explode as $key => $value) {
-        while (strpos($value,'YAMLString') !== false) {
-          $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1);
-          unset($saved_strings[$stringi]);
-          ++$stringi;
-          $value = $explode[$key];
-        }
-      }
-    }
-
-    $finished = true;
-    foreach ($explode as $key => $value) {
-      if (strpos($value,'YAMLSeq') !== false) {
-        $finished = false; break;
-      }
-      if (strpos($value,'YAMLMap') !== false) {
-        $finished = false; break;
-      }
-      if (strpos($value,'YAMLString') !== false) {
-        $finished = false; break;
-      }
-    }
-    if ($finished) break;
-
-    $i++;
-    if ($i > 10) 
-      break; // Prevent infinite loops.
-    }
-
-    return $explode;
-  }
-
-  function literalBlockContinues ($line, $lineIndent) {
-    if (!trim($line)) return true;
-    if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true;
-    return false;
-  }
-
-  function referenceContentsByAlias ($alias) {
-    do {
-      if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; }
-      $groupPath = $this->SavedGroups[$alias];
-      $value = $this->result;
-      foreach ($groupPath as $k) {
-        $value = $value[$k];
-      }
-    } while (false);
-    return $value;
-  }
-
-  function addArrayInline ($array, $indent) {
-      $CommonGroupPath = $this->path;
-      if (empty ($array)) return false;
-      
-      foreach ($array as $k => $_) {
-        $this->addArray(array($k => $_), $indent);
-        $this->path = $CommonGroupPath;
-      }
-      return true;
-  }
-
-  function addArray ($incoming_data, $incoming_indent) {
-
-   // print_r ($incoming_data);
-
-    if (count ($incoming_data) > 1)
-      return $this->addArrayInline ($incoming_data, $incoming_indent);
-    
-    $key = key ($incoming_data);
-    $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null;
-    if ($key === '__!YAMLZero') $key = '0';
-
-    if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values.
-      if ($key || $key === '' || $key === '0') {
-        $this->result[$key] = $value;
-      } else {
-        $this->result[] = $value; end ($this->result); $key = key ($this->result);
-      }
-      $this->path[$incoming_indent] = $key;
-      return;
-    }
-
-
-    
-    $history = array();
-    // Unfolding inner array tree.
-    $history[] = $_arr = $this->result;
-    foreach ($this->path as $k) {
-      $history[] = $_arr = $_arr[$k];
-    }
-
-    if ($this->_containsGroupAlias) {
-      $value = $this->referenceContentsByAlias($this->_containsGroupAlias);
-      $this->_containsGroupAlias = false;
-    }
-
-
-    // Adding string or numeric key to the innermost level or $this->arr.
-    if (is_string($key) && $key == '<<') {
-      if (!is_array ($_arr)) { $_arr = array (); }
-      $_arr = array_merge ($_arr, $value);
-    } else if ($key || $key === '' || $key === '0') {
-      $_arr[$key] = $value;
-    } else {
-      if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; }
-      else { $_arr[] = $value; end ($_arr); $key = key ($_arr); }
-    }
-
-    $reverse_path = array_reverse($this->path);
-    $reverse_history = array_reverse ($history);
-    $reverse_history[0] = $_arr;
-    $cnt = count($reverse_history) - 1;
-    for ($i = 0; $i < $cnt; $i++) {
-      $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i];
-    }
-    $this->result = $reverse_history[$cnt];
-
-    $this->path[$incoming_indent] = $key;
-
-    if ($this->_containsGroupAnchor) {
-      $this->SavedGroups[$this->_containsGroupAnchor] = $this->path;
-      if (is_array ($value)) {
-        $k = key ($value);
-        if (!is_int ($k)) {
-          $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k;
-        }
-      }
-      $this->_containsGroupAnchor = false;
-    }
-
-  }
-
-  function startsLiteralBlock ($line) {
-    $lastChar = substr (trim($line), -1);
-    if ($lastChar != '>' && $lastChar != '|') return false;
-    if ($lastChar == '|') return $lastChar;
-    // HTML tags should not be counted as literal blocks.
-    if (preg_match ('#<.*?>$#', $line)) return false;
-    return $lastChar;
-  }
-
-  function greedilyNeedNextLine($line) {
-    $line = trim ($line);
-    if (!strlen($line)) return false;
-    if (substr ($line, -1, 1) == ']') return false;
-    if ($line[0] == '[') return true;
-    if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true;
-    return false;
-  }
-
-  function addLiteralLine ($literalBlock, $line, $literalBlockStyle) {
-    $line = $this->stripIndent($line);
-    $line = rtrim ($line, "\r\n\t ") . "\n";
-    if ($literalBlockStyle == '|') {
-      return $literalBlock . $line;
-    }
-    if (strlen($line) == 0)
-      return rtrim($literalBlock, ' ') . "\n";
-    if ($line == "\n" && $literalBlockStyle == '>') {
-      return rtrim ($literalBlock, " \t") . "\n";
-    }
-    if ($line != "\n")
-      $line = trim ($line, "\r\n ") . " ";
-    return $literalBlock . $line;
-  }
-
-   function revertLiteralPlaceHolder ($lineArray, $literalBlock) {
-     foreach ($lineArray as $k => $_) {
-      if (is_array($_))
-        $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock);
-      else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder)
-              $lineArray[$k] = rtrim ($literalBlock, " \r\n");
-     }
-     return $lineArray;
-   }
-
-  function stripIndent ($line, $indent = -1) {
-    if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line));
-    return substr ($line, $indent);
-  }
-
-  function getParentPathByIndent ($indent) {
-    if ($indent == 0) return array();
-    $linePath = $this->path;
-    do {
-      end($linePath); $lastIndentInParentPath = key($linePath);
-      if ($indent <= $lastIndentInParentPath) array_pop ($linePath);
-    } while ($indent <= $lastIndentInParentPath);
-    return $linePath;
-  }
-
-
-  function clearBiggerPathValues ($indent) {
-
-
-    if ($indent == 0) $this->path = array();
-    if (empty ($this->path)) return true;
-
-    foreach ($this->path as $k => $_) {
-      if ($k > $indent) unset ($this->path[$k]);
-    }
-
-    return true;
-  }
-
-
-  function isComment ($line) {
-    if (!$line) return false;
-    if ($line[0] == '#') return true;
-    if (trim($line, " \r\n\t") == '---') return true;
-    return false;
-  }
-
-  function isEmpty ($line) {
-    return (trim ($line) === '');
-  }
-
-
-  function isArrayElement ($line) {
-    if (!$line) return false;
-    if ($line[0] != '-') return false;
-    if (strlen ($line) > 3)
-      if (substr($line,0,3) == '---') return false;
-    
-    return true;
-  }
-
-  function isHashElement ($line) {
-    return strpos($line, ':');
-  }
-
-  function isLiteral ($line) {
-    if ($this->isArrayElement($line)) return false;
-    if ($this->isHashElement($line)) return false;
-    return true;
-  }
-
-
-  function unquote ($value) {
-    if (!$value) return $value;
-    if (!is_string($value)) return $value;
-    if ($value[0] == '\'') return trim ($value, '\'');
-    if ($value[0] == '"') return trim ($value, '"');
-    return $value;
-  }
-
-  function startsMappedSequence ($line) {
-    return ($line[0] == '-' && substr ($line, -1, 1) == ':');
-  }
-
-  function returnMappedSequence ($line) {
-    $array = array();
-    $key         = $this->unquote(trim(substr($line,1,-1)));
-    $array[$key] = array();
-    $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key);
-    return array($array);
-  }
-
-  function returnMappedValue ($line) {
-    $array = array();
-    $key         = $this->unquote (trim(substr($line,0,-1)));
-    $array[$key] = '';
-    return $array;
-  }
-
-  function startsMappedValue ($line) {
-    return (substr ($line, -1, 1) == ':');
-  }
-  
-  function isPlainArray ($line) {
-    return ($line[0] == '[' && substr ($line, -1, 1) == ']');
-  }
-  
-  function returnPlainArray ($line) {
-    return $this->_toType($line); 
-  }  
-
-  function returnKeyValuePair ($line) {
-    $array = array();
-    $key = '';
-    if (strpos ($line, ':')) {
-      // It's a key/value pair most likely
-      // If the key is in double quotes pull it out
-      if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) {
-        $value = trim(str_replace($matches[1],'',$line));
-        $key   = $matches[2];
-      } else {
-        // Do some guesswork as to the key and the value
-        $explode = explode(':',$line);
-        $key     = trim($explode[0]);
-        array_shift($explode);
-        $value   = trim(implode(':',$explode));
-      }
-      // Set the type of the value.  Int, string, etc
-      $value = $this->_toType($value);
-      if ($key === '0') $key = '__!YAMLZero';
-      $array[$key] = $value;
-    } else {
-      $array = array ($line);
-    }
-    return $array;
-
-  }
-
-
-  function returnArrayElement ($line) {
-     if (strlen($line) <= 1) return array(array()); // Weird %)
-     $array = array();
-     $value   = trim(substr($line,1));
-     $value   = $this->_toType($value);
-     $array[] = $value;
-     return $array;
-  }
-
-
-  function nodeContainsGroup ($line) {    
-    $symbolsForReference = 'A-z0-9_\-';
-    if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-)
-    if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
-    if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
-    if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1];
-    if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1];
-    if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1];
-    return false;
-
-  }
-
-  function addGroup ($line, $group) {
-    if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1);
-    if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1);
-    //print_r ($this->path);
-  }
-
-  function stripGroup ($line, $group) {
-    $line = trim(str_replace($group, '', $line));
-    return $line;
-  }
-}
-
-// Enable use of Spyc from command line
-// The syntax is the following: php spyc.php spyc.yaml
-
-define ('SPYC_FROM_COMMAND_LINE', false);
-
-do {
-  if (!SPYC_FROM_COMMAND_LINE) break;
-  if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break;
-  if (empty ($_SERVER['PHP_SELF']) || $_SERVER['PHP_SELF'] != 'spyc.php') break;
-  $file = $argv[1];
-  printf ("Spyc loading file: %s\n", $file);
-  print_r (spyc_load_file ($file));
-} while (0);
\ No newline at end of file
diff --git a/www/plugins/yaml/spyc/spyc.php b/www/plugins/yaml/spyc/spyc.php
deleted file mode 100644 (file)
index e19d562..0000000
+++ /dev/null
@@ -1,1046 +0,0 @@
-<?php
-/**
-   * Spyc -- A Simple PHP YAML Class
-   * @version 0.5
-   * @author Vlad Andersen <vlad.andersen@gmail.com>
-   * @author Chris Wanstrath <chris@ozmm.org>
-   * @link http://code.google.com/p/spyc/
-   * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2011 Vlad Andersen
-   * @license http://www.opensource.org/licenses/mit-license.php MIT License
-   * @package Spyc
-   */
-
-if (!function_exists('spyc_load')) {
-  /**
-   * Parses YAML to array.
-   * @param string $string YAML string.
-   * @return array
-   */
-  function spyc_load ($string) {
-    return Spyc::YAMLLoadString($string);
-  }
-}
-
-if (!function_exists('spyc_load_file')) {
-  /**
-   * Parses YAML to array.
-   * @param string $file Path to YAML file.
-   * @return array
-   */
-  function spyc_load_file ($file) {
-    return Spyc::YAMLLoad($file);
-  }
-}
-
-/**
-   * The Simple PHP YAML Class.
-   *
-   * This class can be used to read a YAML file and convert its contents
-   * into a PHP array.  It currently supports a very limited subsection of
-   * the YAML spec.
-   *
-   * Usage:
-   * <code>
-   *   $Spyc  = new Spyc;
-   *   $array = $Spyc->load($file);
-   * </code>
-   * or:
-   * <code>
-   *   $array = Spyc::YAMLLoad($file);
-   * </code>
-   * or:
-   * <code>
-   *   $array = spyc_load_file($file);
-   * </code>
-   * @package Spyc
-   */
-class Spyc {
-
-  // SETTINGS
-
-  const REMPTY = "\0\0\0\0\0";
-
-  /**
-   * Setting this to true will force YAMLDump to enclose any string value in
-   * quotes.  False by default.
-   * 
-   * @var bool
-   */
-  public $setting_dump_force_quotes = false;
-
-  /**
-   * Setting this to true will forse YAMLLoad to use syck_load function when
-   * possible. False by default.
-   * @var bool
-   */
-  public $setting_use_syck_is_possible = false;
-
-
-
-  /**#@+
-  * @access private
-  * @var mixed
-  */
-  private $_dumpIndent;
-  private $_dumpWordWrap;
-  private $_containsGroupAnchor = false;
-  private $_containsGroupAlias = false;
-  private $path;
-  private $result;
-  private $LiteralPlaceHolder = '___YAML_Literal_Block___';
-  private $SavedGroups = array();
-  private $indent;
-  /**
-   * Path modifier that should be applied after adding current element.
-   * @var array
-   */
-  private $delayedPath = array();
-
-  /**#@+
-  * @access public
-  * @var mixed
-  */
-  public $_nodeId;
-
-/**
- * Load a valid YAML string to Spyc.
- * @param string $input
- * @return array
- */
-  public function load ($input) {
-    return $this->__loadString($input);
-  }
-
- /**
- * Load a valid YAML file to Spyc.
- * @param string $file
- * @return array
- */
-  public function loadFile ($file) {
-    return $this->__load($file);
-  }
-
-  /**
-     * Load YAML into a PHP array statically
-     *
-     * The load method, when supplied with a YAML stream (string or file),
-     * will do its best to convert YAML in a file into a PHP array.  Pretty
-     * simple.
-     *  Usage:
-     *  <code>
-     *   $array = Spyc::YAMLLoad('lucky.yaml');
-     *   print_r($array);
-     *  </code>
-     * @access public
-     * @return array
-     * @param string $input Path of YAML file or string containing YAML
-     */
-  public static function YAMLLoad($input) {
-    $Spyc = new Spyc;
-    return $Spyc->__load($input);
-  }
-
-  /**
-     * Load a string of YAML into a PHP array statically
-     *
-     * The load method, when supplied with a YAML string, will do its best 
-     * to convert YAML in a string into a PHP array.  Pretty simple.
-     *
-     * Note: use this function if you don't want files from the file system
-     * loaded and processed as YAML.  This is of interest to people concerned
-     * about security whose input is from a string.
-     *
-     *  Usage:
-     *  <code>
-     *   $array = Spyc::YAMLLoadString("---\n0: hello world\n");
-     *   print_r($array);
-     *  </code>
-     * @access public
-     * @return array
-     * @param string $input String containing YAML
-     */
-  public static function YAMLLoadString($input) {
-    $Spyc = new Spyc;
-    return $Spyc->__loadString($input);
-  }
-
-  /**
-     * Dump YAML from PHP array statically
-     *
-     * The dump method, when supplied with an array, will do its best
-     * to convert the array into friendly YAML.  Pretty simple.  Feel free to
-     * save the returned string as nothing.yaml and pass it around.
-     *
-     * Oh, and you can decide how big the indent is and what the wordwrap
-     * for folding is.  Pretty cool -- just pass in 'false' for either if
-     * you want to use the default.
-     *
-     * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
-     * you can turn off wordwrap by passing in 0.
-     *
-     * @access public
-     * @return string
-     * @param array $array PHP array
-     * @param int $indent Pass in false to use the default, which is 2
-     * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
-     */
-  public static function YAMLDump($array,$indent = false,$wordwrap = false) {
-    $spyc = new Spyc;
-    return $spyc->dump($array,$indent,$wordwrap);
-  }
-
-
-  /**
-     * Dump PHP array to YAML
-     *
-     * The dump method, when supplied with an array, will do its best
-     * to convert the array into friendly YAML.  Pretty simple.  Feel free to
-     * save the returned string as tasteful.yaml and pass it around.
-     *
-     * Oh, and you can decide how big the indent is and what the wordwrap
-     * for folding is.  Pretty cool -- just pass in 'false' for either if
-     * you want to use the default.
-     *
-     * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
-     * you can turn off wordwrap by passing in 0.
-     *
-     * @access public
-     * @return string
-     * @param array $array PHP array
-     * @param int $indent Pass in false to use the default, which is 2
-     * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
-     */
-  public function dump($array,$indent = false,$wordwrap = false) {
-    // Dumps to some very clean YAML.  We'll have to add some more features
-    // and options soon.  And better support for folding.
-
-    // New features and options.
-    if ($indent === false or !is_numeric($indent)) {
-      $this->_dumpIndent = 2;
-    } else {
-      $this->_dumpIndent = $indent;
-    }
-
-    if ($wordwrap === false or !is_numeric($wordwrap)) {
-      $this->_dumpWordWrap = 40;
-    } else {
-      $this->_dumpWordWrap = $wordwrap;
-    }
-
-    // New YAML document
-    $string = "---\n";
-
-    // Start at the base of the array and move through it.
-    if ($array) {
-      $array = (array)$array; 
-      $previous_key = -1;
-      foreach ($array as $key => $value) {
-        if (!isset($first_key)) $first_key = $key;
-        $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key, $array);
-        $previous_key = $key;
-      }
-    }
-    return $string;
-  }
-
-  /**
-     * Attempts to convert a key / value array item to YAML
-     * @access private
-     * @return string
-     * @param $key The name of the key
-     * @param $value The value of the item
-     * @param $indent The indent of the current node
-     */
-  private function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0, $source_array = null) {
-    if (is_array($value)) {
-      if (empty ($value))
-        return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key, $source_array);
-      // It has children.  What to do?
-      // Make it the right kind of item
-      $string = $this->_dumpNode($key, self::REMPTY, $indent, $previous_key, $first_key, $source_array);
-      // Add the indent
-      $indent += $this->_dumpIndent;
-      // Yamlize the array
-      $string .= $this->_yamlizeArray($value,$indent);
-    } elseif (!is_array($value)) {
-      // It doesn't have children.  Yip.
-      $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key, $source_array);
-    }
-    return $string;
-  }
-
-  /**
-     * Attempts to convert an array to YAML
-     * @access private
-     * @return string
-     * @param $array The array you want to convert
-     * @param $indent The indent of the current level
-     */
-  private function _yamlizeArray($array,$indent) {
-    if (is_array($array)) {
-      $string = '';
-      $previous_key = -1;
-      foreach ($array as $key => $value) {
-        if (!isset($first_key)) $first_key = $key;
-        $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key, $array);
-        $previous_key = $key;
-      }
-      return $string;
-    } else {
-      return false;
-    }
-  }
-
-  /**
-     * Returns YAML from a key and a value
-     * @access private
-     * @return string
-     * @param $key The name of the key
-     * @param $value The value of the item
-     * @param $indent The indent of the current node
-     */
-  private function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0, $source_array = null) {
-    // do some folding here, for blocks
-    if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false ||
-      strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false || strpos ($value, '  ') !== false ||
-      strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || strpos($value,"&") !== false || strpos($value, "'") !== false || strpos($value, "!") === 0 ||
-      substr ($value, -1, 1) == ':')
-    ) {
-      $value = $this->_doLiteralBlock($value,$indent);
-    } else {
-      $value  = $this->_doFolding($value,$indent);
-    }
-
-    if ($value === array()) $value = '[ ]';
-    if (in_array ($value, array ('true', 'TRUE', 'false', 'FALSE', 'y', 'Y', 'n', 'N', 'null', 'NULL'), true)) {
-       $value = $this->_doLiteralBlock($value,$indent);
-    }
-    if (trim ($value) != $value)
-       $value = $this->_doLiteralBlock($value,$indent);
-
-    if (is_bool($value)) {
-       $value = ($value) ? "true" : "false";
-    }
-    
-    if ($value === null) $value = 'null';
-    if ($value === "'" . self::REMPTY . "'") $value = null;
-
-    $spaces = str_repeat(' ',$indent);
-
-    //if (is_int($key) && $key - 1 == $previous_key && $first_key===0) {
-    if (is_array ($source_array) && array_keys($source_array) === range(0, count($source_array) - 1)) {
-      // It's a sequence
-      $string = $spaces.'- '.$value."\n";
-    } else {
-      // if ($first_key===0)  throw new Exception('Keys are all screwy.  The first one was zero, now it\'s "'. $key .'"');
-      // It's mapped
-      if (strpos($key, ":") !== false || strpos($key, "#") !== false) { $key = '"' . $key . '"'; }
-      $string = rtrim ($spaces.$key.': '.$value)."\n";
-    }
-    return $string;
-  }
-
-  /**
-     * Creates a literal block for dumping
-     * @access private
-     * @return string
-     * @param $value
-     * @param $indent int The value of the indent
-     */
-  private function _doLiteralBlock($value,$indent) {
-    if ($value === "\n") return '\n';
-    if (strpos($value, "\n") === false && strpos($value, "'") === false) {
-      return sprintf ("'%s'", $value);
-    }
-    if (strpos($value, "\n") === false && strpos($value, '"') === false) {
-      return sprintf ('"%s"', $value);
-    }
-    $exploded = explode("\n",$value);
-    $newValue = '|';
-    $indent  += $this->_dumpIndent;
-    $spaces   = str_repeat(' ',$indent);
-    foreach ($exploded as $line) {
-      $newValue .= "\n" . $spaces . ($line);
-    }
-    return $newValue;
-  }
-
-  /**
-     * Folds a string of text, if necessary
-     * @access private
-     * @return string
-     * @param $value The string you wish to fold
-     */
-  private function _doFolding($value,$indent) {
-    // Don't do anything if wordwrap is set to 0
-
-    if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) {
-      $indent += $this->_dumpIndent;
-      $indent = str_repeat(' ',$indent);
-      $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent");
-      $value   = ">\n".$indent.$wrapped;
-    } else {
-      if ($this->setting_dump_force_quotes && is_string ($value) && $value !== self::REMPTY)
-        $value = '"' . $value . '"';
-    }
-
-
-    return $value;
-  }
-
-// LOADING FUNCTIONS
-
-  private function __load($input) {
-    $Source = $this->loadFromSource($input);
-    return $this->loadWithSource($Source);
-  }
-
-  private function __loadString($input) {
-    $Source = $this->loadFromString($input);
-    return $this->loadWithSource($Source);
-  }
-
-  private function loadWithSource($Source) {
-    if (empty ($Source)) return array();
-    if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) {
-      $array = syck_load (implode ('', $Source));
-      return is_array($array) ? $array : array();
-    }
-
-    $this->path = array();
-    $this->result = array();
-
-    $cnt = count($Source);
-    for ($i = 0; $i < $cnt; $i++) {
-      $line = $Source[$i];
-      
-      $this->indent = strlen($line) - strlen(ltrim($line));
-      $tempPath = $this->getParentPathByIndent($this->indent);
-      $line = self::stripIndent($line, $this->indent);
-      if (self::isComment($line)) continue;
-      if (self::isEmpty($line)) continue;
-      $this->path = $tempPath;
-
-      $literalBlockStyle = self::startsLiteralBlock($line);
-      if ($literalBlockStyle) {
-        $line = rtrim ($line, $literalBlockStyle . " \n");
-        $literalBlock = '';
-        $line .= $this->LiteralPlaceHolder;
-        $literal_block_indent = strlen($Source[$i+1]) - strlen(ltrim($Source[$i+1]));
-        while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) {
-          $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle, $literal_block_indent);
-        }
-        $i--;
-      }
-
-      while (++$i < $cnt && self::greedilyNeedNextLine($line)) {
-        $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t");
-      }
-      $i--;
-
-
-
-      if (strpos ($line, '#')) {
-        if (strpos ($line, '"') === false && strpos ($line, "'") === false)
-          $line = preg_replace('/\s+#(.+)$/','',$line);
-      }
-
-      $lineArray = $this->_parseLine($line);
-
-      if ($literalBlockStyle)
-        $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock);
-
-      $this->addArray($lineArray, $this->indent);
-
-      foreach ($this->delayedPath as $indent => $delayedPath)
-        $this->path[$indent] = $delayedPath;
-
-      $this->delayedPath = array();
-
-    }
-    return $this->result;
-  }
-
-  private function loadFromSource ($input) {
-    if (!empty($input) && strpos($input, "\n") === false && file_exists($input))
-    return file($input);
-
-    return $this->loadFromString($input);
-  }
-
-  private function loadFromString ($input) {
-    $lines = explode("\n",$input);
-    foreach ($lines as $k => $_) {
-      $lines[$k] = rtrim ($_, "\r");
-    }
-    return $lines;
-  }
-
-  /**
-     * Parses YAML code and returns an array for a node
-     * @access private
-     * @return array
-     * @param string $line A line from the YAML file
-     */
-  private function _parseLine($line) {
-    if (!$line) return array();
-    $line = trim($line);
-    if (!$line) return array();
-
-    $array = array();
-
-    $group = $this->nodeContainsGroup($line);
-    if ($group) {
-      $this->addGroup($line, $group);
-      $line = $this->stripGroup ($line, $group);
-    }
-
-    if ($this->startsMappedSequence($line))
-      return $this->returnMappedSequence($line);
-
-    if ($this->startsMappedValue($line))
-      return $this->returnMappedValue($line);
-
-    if ($this->isArrayElement($line))
-     return $this->returnArrayElement($line);
-
-    if ($this->isPlainArray($line))
-     return $this->returnPlainArray($line); 
-     
-     
-    return $this->returnKeyValuePair($line);
-
-  }
-
-  /**
-     * Finds the type of the passed value, returns the value as the new type.
-     * @access private
-     * @param string $value
-     * @return mixed
-     */
-  private function _toType($value) {
-    if ($value === '') return null;
-    $first_character = $value[0];
-    $last_character = substr($value, -1, 1);
-
-    $is_quoted = false;
-    do {
-      if (!$value) break;
-      if ($first_character != '"' && $first_character != "'") break;
-      if ($last_character != '"' && $last_character != "'") break;
-      $is_quoted = true;
-    } while (0);
-
-    if ($is_quoted)
-      return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\''));
-    
-    if (strpos($value, ' #') !== false && !$is_quoted)
-      $value = preg_replace('/\s+#(.+)$/','',$value);
-
-    if (!$is_quoted) $value = str_replace('\n', "\n", $value);
-
-    if ($first_character == '[' && $last_character == ']') {
-      // Take out strings sequences and mappings
-      $innerValue = trim(substr ($value, 1, -1));
-      if ($innerValue === '') return array();
-      $explode = $this->_inlineEscape($innerValue);
-      // Propagate value array
-      $value  = array();
-      foreach ($explode as $v) {
-        $value[] = $this->_toType($v);
-      }
-      return $value;
-    }
-
-    if (strpos($value,': ')!==false && $first_character != '{') {
-      $array = explode(': ',$value);
-      $key   = trim($array[0]);
-      array_shift($array);
-      $value = trim(implode(': ',$array));
-      $value = $this->_toType($value);
-      return array($key => $value);
-    }
-    
-    if ($first_character == '{' && $last_character == '}') {
-      $innerValue = trim(substr ($value, 1, -1));
-      if ($innerValue === '') return array();
-      // Inline Mapping
-      // Take out strings sequences and mappings
-      $explode = $this->_inlineEscape($innerValue);
-      // Propagate value array
-      $array = array();
-      foreach ($explode as $v) {
-        $SubArr = $this->_toType($v);
-        if (empty($SubArr)) continue;
-        if (is_array ($SubArr)) {
-          $array[key($SubArr)] = $SubArr[key($SubArr)]; continue;
-        }
-        $array[] = $SubArr;
-      }
-      return $array;
-    }
-
-    if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') {
-      return null;
-    }
-
-    if ( is_numeric($value) && preg_match ('/^(-|)[1-9]+[0-9]*$/', $value) ){
-      $intvalue = (int)$value;
-      if ($intvalue != PHP_INT_MAX)
-        $value = $intvalue;
-      return $value;
-    }
-
-    if (in_array($value,
-                 array('true', 'on', '+', 'yes', 'y', 'True', 'TRUE', 'On', 'ON', 'YES', 'Yes', 'Y'))) {
-      return true;
-    }
-
-    if (in_array(strtolower($value),
-                 array('false', 'off', '-', 'no', 'n'))) {
-      return false;
-    }
-
-    if (is_numeric($value)) {
-      if ($value === '0') return 0;
-      if (rtrim ($value, 0) === $value)
-        $value = (float)$value;
-      return $value;
-    }
-    
-    return $value;
-  }
-
-  /**
-     * Used in inlines to check for more inlines or quoted strings
-     * @access private
-     * @return array
-     */
-  private function _inlineEscape($inline) {
-    // There's gotta be a cleaner way to do this...
-    // While pure sequences seem to be nesting just fine,
-    // pure mappings and mappings with sequences inside can't go very
-    // deep.  This needs to be fixed.
-
-    $seqs = array();
-    $maps = array();
-    $saved_strings = array();
-
-    // Check for strings
-    $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/';
-    if (preg_match_all($regex,$inline,$strings)) {
-      $saved_strings = $strings[0];
-      $inline  = preg_replace($regex,'YAMLString',$inline);
-    }
-    unset($regex);
-
-    $i = 0;
-    do {
-
-    // Check for sequences
-    while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) {
-      $seqs[] = $matchseqs[0];
-      $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1);
-    }
-
-    // Check for mappings
-    while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) {
-      $maps[] = $matchmaps[0];
-      $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1);
-    }
-
-    if ($i++ >= 10) break;
-
-    } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false);
-
-    $explode = explode(', ',$inline);
-    $stringi = 0; $i = 0;
-
-    while (1) {
-
-    // Re-add the sequences
-    if (!empty($seqs)) {
-      foreach ($explode as $key => $value) {
-        if (strpos($value,'YAMLSeq') !== false) {
-          foreach ($seqs as $seqk => $seq) {
-            $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value);
-            $value = $explode[$key];
-          }
-        }
-      }
-    }
-
-    // Re-add the mappings
-    if (!empty($maps)) {
-      foreach ($explode as $key => $value) {
-        if (strpos($value,'YAMLMap') !== false) {
-          foreach ($maps as $mapk => $map) {
-            $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value);
-            $value = $explode[$key];
-          }
-        }
-      }
-    }
-
-
-    // Re-add the strings
-    if (!empty($saved_strings)) {
-      foreach ($explode as $key => $value) {
-        while (strpos($value,'YAMLString') !== false) {
-          $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1);
-          unset($saved_strings[$stringi]);
-          ++$stringi;
-          $value = $explode[$key];
-        }
-      }
-    }
-
-    $finished = true;
-    foreach ($explode as $key => $value) {
-      if (strpos($value,'YAMLSeq') !== false) {
-        $finished = false; break;
-      }
-      if (strpos($value,'YAMLMap') !== false) {
-        $finished = false; break;
-      }
-      if (strpos($value,'YAMLString') !== false) {
-        $finished = false; break;
-      }
-    }
-    if ($finished) break;
-
-    $i++;
-    if ($i > 10) 
-      break; // Prevent infinite loops.
-    }
-
-    return $explode;
-  }
-
-  private function literalBlockContinues ($line, $lineIndent) {
-    if (!trim($line)) return true;
-    if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true;
-    return false;
-  }
-
-  private function referenceContentsByAlias ($alias) {
-    do {
-      if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; }
-      $groupPath = $this->SavedGroups[$alias];
-      $value = $this->result;
-      foreach ($groupPath as $k) {
-        $value = $value[$k];
-      }
-    } while (false);
-    return $value;
-  }
-
-  private function addArrayInline ($array, $indent) {
-      $CommonGroupPath = $this->path;
-      if (empty ($array)) return false;
-      
-      foreach ($array as $k => $_) {
-        $this->addArray(array($k => $_), $indent);
-        $this->path = $CommonGroupPath;
-      }
-      return true;
-  }
-
-  private function addArray ($incoming_data, $incoming_indent) {
-
-   // print_r ($incoming_data);
-
-    if (count ($incoming_data) > 1)
-      return $this->addArrayInline ($incoming_data, $incoming_indent);
-    
-    $key = key ($incoming_data);
-    $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null;
-    if ($key === '__!YAMLZero') $key = '0';
-
-    if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values.
-      if ($key || $key === '' || $key === '0') {
-        $this->result[$key] = $value;
-      } else {
-        $this->result[] = $value; end ($this->result); $key = key ($this->result);
-      }
-      $this->path[$incoming_indent] = $key;
-      return;
-    }
-
-
-    
-    $history = array();
-    // Unfolding inner array tree.
-    $history[] = $_arr = $this->result;
-    foreach ($this->path as $k) {
-      $history[] = $_arr = $_arr[$k];
-    }
-
-    if ($this->_containsGroupAlias) {
-      $value = $this->referenceContentsByAlias($this->_containsGroupAlias);
-      $this->_containsGroupAlias = false;
-    }
-
-
-    // Adding string or numeric key to the innermost level or $this->arr.
-    if (is_string($key) && $key == '<<') {
-      if (!is_array ($_arr)) { $_arr = array (); }
-
-      $_arr = array_merge ($_arr, $value);
-    } else if ($key || $key === '' || $key === '0') {
-      if (!is_array ($_arr))
-        $_arr = array ($key=>$value);
-      else
-        $_arr[$key] = $value;
-    } else {
-      if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; }
-      else { $_arr[] = $value; end ($_arr); $key = key ($_arr); }
-    }
-
-    $reverse_path = array_reverse($this->path);
-    $reverse_history = array_reverse ($history);
-    $reverse_history[0] = $_arr;
-    $cnt = count($reverse_history) - 1;
-    for ($i = 0; $i < $cnt; $i++) {
-      $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i];
-    }
-    $this->result = $reverse_history[$cnt];
-
-    $this->path[$incoming_indent] = $key;
-
-    if ($this->_containsGroupAnchor) {
-      $this->SavedGroups[$this->_containsGroupAnchor] = $this->path;
-      if (is_array ($value)) {
-        $k = key ($value);
-        if (!is_int ($k)) {
-          $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k;
-        }
-      }
-      $this->_containsGroupAnchor = false;
-    }
-
-  }
-
-  private static function startsLiteralBlock ($line) {
-    $lastChar = substr (trim($line), -1);
-    if ($lastChar != '>' && $lastChar != '|') return false;
-    if ($lastChar == '|') return $lastChar;
-    // HTML tags should not be counted as literal blocks.
-    if (preg_match ('#<.*?>$#', $line)) return false;
-    return $lastChar;
-  }
-
-  private static function greedilyNeedNextLine($line) {
-    $line = trim ($line);
-    if (!strlen($line)) return false;
-    if (substr ($line, -1, 1) == ']') return false;
-    if ($line[0] == '[') return true;
-    if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true;
-    return false;
-  }
-
-  private function addLiteralLine ($literalBlock, $line, $literalBlockStyle, $indent = -1) {
-    $line = self::stripIndent($line, $indent);
-    if ($literalBlockStyle !== '|') {
-        $line = self::stripIndent($line);
-    }
-    $line = rtrim ($line, "\r\n\t ") . "\n";
-    if ($literalBlockStyle == '|') {
-      return $literalBlock . $line;
-    }
-    if (strlen($line) == 0)
-      return rtrim($literalBlock, ' ') . "\n";
-    if ($line == "\n" && $literalBlockStyle == '>') {
-      return rtrim ($literalBlock, " \t") . "\n";
-    }
-    if ($line != "\n")
-      $line = trim ($line, "\r\n ") . " ";
-    return $literalBlock . $line;
-  }
-
-   function revertLiteralPlaceHolder ($lineArray, $literalBlock) {
-     foreach ($lineArray as $k => $_) {
-      if (is_array($_))
-        $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock);
-      else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder)
-              $lineArray[$k] = rtrim ($literalBlock, " \r\n");
-     }
-     return $lineArray;
-   }
-
-  private static function stripIndent ($line, $indent = -1) {
-    if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line));
-    return substr ($line, $indent);
-  }
-
-  private function getParentPathByIndent ($indent) {
-    if ($indent == 0) return array();
-    $linePath = $this->path;
-    do {
-      end($linePath); $lastIndentInParentPath = key($linePath);
-      if ($indent <= $lastIndentInParentPath) array_pop ($linePath);
-    } while ($indent <= $lastIndentInParentPath);
-    return $linePath;
-  }
-
-
-  private function clearBiggerPathValues ($indent) {
-
-
-    if ($indent == 0) $this->path = array();
-    if (empty ($this->path)) return true;
-
-    foreach ($this->path as $k => $_) {
-      if ($k > $indent) unset ($this->path[$k]);
-    }
-
-    return true;
-  }
-
-
-  private static function isComment ($line) {
-    if (!$line) return false;
-    if ($line[0] == '#') return true;
-    if (trim($line, " \r\n\t") == '---') return true;
-    return false;
-  }
-
-  private static function isEmpty ($line) {
-    return (trim ($line) === '');
-  }
-
-
-  private function isArrayElement ($line) {
-    if (!$line) return false;
-    if ($line[0] != '-') return false;
-    if (strlen ($line) > 3)
-      if (substr($line,0,3) == '---') return false;
-    
-    return true;
-  }
-
-  private function isHashElement ($line) {
-    return strpos($line, ':');
-  }
-
-  private function isLiteral ($line) {
-    if ($this->isArrayElement($line)) return false;
-    if ($this->isHashElement($line)) return false;
-    return true;
-  }
-
-
-  private static function unquote ($value) {
-    if (!$value) return $value;
-    if (!is_string($value)) return $value;
-    if ($value[0] == '\'') return trim ($value, '\'');
-    if ($value[0] == '"') return trim ($value, '"');
-    return $value;
-  }
-
-  private function startsMappedSequence ($line) {
-    return ($line[0] == '-' && substr ($line, -1, 1) == ':');
-  }
-
-  private function returnMappedSequence ($line) {
-    $array = array();
-    $key         = self::unquote(trim(substr($line,1,-1)));
-    $array[$key] = array();
-    $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key);
-    return array($array);
-  }
-
-  private function returnMappedValue ($line) {
-    $array = array();
-    $key         = self::unquote (trim(substr($line,0,-1)));
-    $array[$key] = '';
-    return $array;
-  }
-
-  private function startsMappedValue ($line) {
-    return (substr ($line, -1, 1) == ':');
-  }
-  
-  private function isPlainArray ($line) {
-    return ($line[0] == '[' && substr ($line, -1, 1) == ']');
-  }
-  
-  private function returnPlainArray ($line) {
-    return $this->_toType($line); 
-  }  
-
-  private function returnKeyValuePair ($line) {
-    $array = array();
-    $key = '';
-    if (strpos ($line, ':')) {
-      // It's a key/value pair most likely
-      // If the key is in double quotes pull it out
-      if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) {
-        $value = trim(str_replace($matches[1],'',$line));
-        $key   = $matches[2];
-      } else {
-        // Do some guesswork as to the key and the value
-        $explode = explode(':',$line);
-        $key     = trim($explode[0]);
-        array_shift($explode);
-        $value   = trim(implode(':',$explode));
-      }
-      // Set the type of the value.  Int, string, etc
-      $value = $this->_toType($value);
-      if ($key === '0') $key = '__!YAMLZero';
-      $array[$key] = $value;
-    } else {
-      $array = array ($line);
-    }
-    return $array;
-
-  }
-
-
-  private function returnArrayElement ($line) {
-     if (strlen($line) <= 1) return array(array()); // Weird %)
-     $array = array();
-     $value   = trim(substr($line,1));
-     $value   = $this->_toType($value);
-     $array[] = $value;
-     return $array;
-  }
-
-
-  private function nodeContainsGroup ($line) {    
-    $symbolsForReference = 'A-z0-9_\-';
-    if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-)
-    if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
-    if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
-    if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1];
-    if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1];
-    if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1];
-    return false;
-
-  }
-
-  private function addGroup ($line, $group) {
-    if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1);
-    if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1);
-    //print_r ($this->path);
-  }
-
-  private function stripGroup ($line, $group) {
-    $line = trim(str_replace($group, '', $line));
-    return $line;
-  }
-}
-
-// Enable use of Spyc from command line
-// The syntax is the following: php spyc.php spyc.yaml
-
-define ('SPYC_FROM_COMMAND_LINE', false);
-
-do {
-  if (!SPYC_FROM_COMMAND_LINE) break;
-  if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break;
-  if (empty ($_SERVER['PHP_SELF']) || $_SERVER['PHP_SELF'] != 'spyc.php') break;
-  $file = $argv[1];
-  printf ("Spyc loading file: %s\n", $file);
-  print_r (spyc_load_file ($file));
-} while (0);
\ No newline at end of file
diff --git a/www/plugins/yaml/svn.revision b/www/plugins/yaml/svn.revision
deleted file mode 100644 (file)
index 32e227a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<svn_revision>
-<text_version>
-Origine: file:///home/svn/repository/spip-zone/_plugins_/yaml
-Revision: 104080
-Dernier commit: 2017-04-25 05:33:04 +0200 
-</text_version>
-<origine>file:///home/svn/repository/spip-zone/_plugins_/yaml</origine>
-<revision>104080</revision>
-<commit>2017-04-25 05:33:04 +0200 </commit>
-</svn_revision>
\ No newline at end of file
diff --git a/www/plugins/yaml/yaml.png b/www/plugins/yaml/yaml.png
deleted file mode 100644 (file)
index 9c14d44..0000000
Binary files a/www/plugins/yaml/yaml.png and /dev/null differ
diff --git a/www/plugins/yaml/yaml_fonctions.php b/www/plugins/yaml/yaml_fonctions.php
deleted file mode 100644 (file)
index ef2c1fb..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-// Sécurité
-if (!defined('_ECRIRE_INC_VERSION')) {
-       return;
-}
-
-// Filtre permettant d'utiliser yaml_decode_file() dans un squelette
-function decoder_yaml($fichier) {
-       include_spip('inc/yaml');
-       return yaml_decode_file($fichier);
-}
-
-function inc_yaml_to_array($u) {
-       include_spip('inc/yaml');
-       return yaml_decode($u);
-}